Документация по ОС FreeBSD Четверг, 28.03.2024, 15:49
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » РРР

Свет в конце криптотуннеля [2008]

В настоящее время технологии виртуальных частных сетей переживают настоящий бум - стандарты вытесняют друг друга, компании, выпускающие устройства сетевой безопасности (Cisco, Dlink, Trendnet, etc), не щадя живота и денег, продвигают в массы различные VPN-концентраторы, а печатные издания и онлайновые ресурсы наперебой рассказывают о преимуществах использования VPN. Мы, в свою очередь, никак не можем остаться в стороне от этой, без сомнения, позитивной тенденции, поэтому предлагаем твоему вниманию пошаговое руководство по настройке PPTP-сервера на базе FreeBSD/mpd и OpenBSD/poptop.

Точка, точка, запятая

Туннельный протокол типа «точка-точка» (PPTP, The Point to Point Tunneling Protocol), разработанный в недрах Microsoft, позволяет компьютеру устанавливать защищенное соединение с сервером за счет создания специального туннеля в общедоступной сети. PPTP не только предоставляет удаленным пользователям безопасный доступ к корпоративной сети при наличии выхода в интернет, но и обеспечивает широкие возможности разделения доступа и защиты информации внутри локальной сети.

Функционирование РРТР заключается в инкапсулировании пакетов виртуальной сети в пакеты РРР, которые, как по цепочке, упаковываются в пакеты GRE (Generic Routing Incapsulation), передаваемые по IP от клиента к РРР-серверу и обратно. Совместно с каналом инкапсулированных данных существует управляющий сеанс на базе протокола TCP. Пакеты управляющего сеанса позволяют запросить статус и сопровождать сигнальную информацию между клиентом и сервером. РРТР не оговаривает конкретных алгоритмов аутентификации и протоколов, вместо этого он обеспечивает основу для их обсуждения.

Для выполнения процедуры проверки подлинности удаленных рабочих станций применяется протокол MS-CHAP (Microsoft Challenge Handshake Authentication Protocol), за шифрование данных отвечает протокол MPPE (Microsoft Point-to-Point Encryption). Кстати, последний не сжимает данные, для этих целей обычно используется MPPC (Microsoft Point-to-Point Compression).

Ни для кого не секрет, что протокол PPTP далек от совершенства. Его спецификация не была ратифицирована IETF, и он менее безопасен, чем другие VPN-протоколы, например IPSec. Несмотря на это, данная реализация VPN получила наибольшее распространение. И во многом благодаря тому, что PPTP-клиент встроен во все Windows-системы, начиная с Win95 OSR2.

Подняв PPTP-сервер, системный администратор сможет разграничить доступ в Сеть, решить проблему подмены IP- и MAC-адресов и, не прилагая титанических усилий, организовать учет трафика штатными средствами. Стоит отметить, что именно PPTP использует большинство провайдеров так называемой «последней мили» для предоставления своим клиентам выхода в интернет.

Предлагаю остальные материалы теоретического свойства оставить на откуп бородатым дядькам, проводящим курсы в учебных центрах, и перейти непосредственно к рассмотрению конкретных примеров построения VPN-серверов, совместимых с Windows-клиентами. А за основу для подобных конструкций мы возьмем самые популярные на сегодняшний день операционные системы из линейки xBSD: FreeBSD и OpenBSD.

Установка сервера MPD в FreeBSD

Сервер MPD (Multi-link PPP Daemon, sf.net/projects/mpd) работает только в FreeBSD. В августе 2007 года вышла новая версия сервера 4.3, которую и рекомендуют использовать разработчики (хотя уже доступна бета-версия 5.0). Поддерживается PAP-, CHAP-, MS-CHAP- и EAP-аутентификация, сжатие и шифрование PPP-соединений, имеется поддержка L2TP, NetFlow и NAT, веб-интерфейс и еще много всего полезного. Установка из коллекции портов стандартна для FreeBSD:

# cd /usr/port/net/mpd
# make install clean

Добавляем запуск MPD при загрузке системы:

# echo `mpd_enable="YES"' >> /etc/rc.conf

Работа MPD настраивается с помощью нескольких файлов. Переходим в каталог /usr/local/etc/mpd и убираем префикс sample.

# cd /usr/local/etc/mpd
# mv mpd.conf.sample mpd.conf
# mv mpd.links.sample mpd.links
# mv mpd.secret.sample mpd.secret

Четвертый файл mpd.script предназначен для настройки модема, мы его трогать не будем. В mpd.conf задается одна или более конфигураций, каждая из которых представляет собой последовательность команд mpd. Все строки должны начинаться с начала строки или знака табуляции. Использование пробелов может привести к неправильному считыванию параметров. Открываем файл и приступаем к настройке:

# vi mpd.conf

default:
 
# Подключаем разделы файла; сколько туннелей, столько и разделов
load client0
load client1
client0:
 
# Создаем и настраиваем интерфейс
new -i ng0 client0 client0
 
# Первый адрес сервера, второй - клиента
set ipcp ranges 192.168.2.1/32 10.0.0.0/24
set ipcp dns 192.168.2.3
set ipcp nbns 192.168.2.4 # WINS
 
# Загружаем раздел client_standart
load client_standart
client1:
new -i ng01 client1 client1
set ipcp ranges 192.168.2.1/32 10.0.1.30/32
load client_standart
client_standard:
 
# Отключаем режим «по требованию»
set iface disable on-demand
set iface enable proxy-arp
 
# Устанавливаем тип pptp, описание смотри в mpd.links
set link type pptp
 
# Позаботимся об MTU
set link mtu 1420
set link mru 1420
set iface enable tcpmssfix
 
# Шифрование и сжатие
set bundle enable compression
set bundle enable crypt-reqd
set bundle disable multilink
set ccp yes mppc
 
# set ccp yes mpp-e40
set ccp yes mpp-e128
set ccp yes mpp-stateless
set ccp yes mppe-policy
 
# Контроль протокола и адреса
set link yes acfcomp protocomp
 
# Аутентификация
set link no pap chap
 
# CHAP является синонимом md5-chap ms-chapv1 ms-chapv2, протокол можно указать в явном виде
set link enable chap
set link keep-alive 10 60
 
# Включение Van Jacobson TCP-компрессии
set ipcp yes vjcomp
 
# Отключаем windowing
set pptp disable windowing

В файл mpd.links заносим:

# vi mpd.links

client0:
set link type pptp
client1:
set link type pptp
pptp:
set link type pptp
 
# IP-адрес сервера, на котором должен работать FreeBSD
set pptp self 11.22.33.44
 
# Разрешаем входящие, отключаем исходящие соединения по PPTP
set pptp enable incoming
set pptp disable originate

В файл mpd.secret заносится пара логин/пароль, дополнительным аргументом может быть IP-адрес, с которого зайдет клиент с таким именем:

# vi mpd.secret

sergej "password"
fedja "foobar" 192.168.1.1
vasja "p@sSw0rd" 192.168.1.0/24

Альтернативным вариантом является использование перечисленных ниже параметров в нужном разделе файла mpd.conf:

set auth authname "VpnLogin"
set auth password "VpnPassword"

Если планируется использовать системную базу пользователей, то в файле mpd.conf можно указать параметр set auth enable system, а в /etc/login.conf прописать строку «:passwd_format=nth:». Для отслеживания работы MPD с помощью syslog занесем в файл /etc/syslog.conf следующие строки (не забывая его затем перезапустить):

# vi /etc/syslog.conf

!mpd
*.* /var/log/mpd.log

Чтобы обратные пакеты доходили до сети VPN, необходимо указать маршрут:

# route add 192.168.2.1/32 10.0.1.30/32
# route add 192.168.2.1/32 10.0.0.0/24

И теперь стартуем MPD:

# mpd -b

Такой командой будут запущены все туннели, указанные в секции default. Если нужно запустить конкретный туннель, указываем его последним параметром:

# mpd –b client0

Если подключение прошло без проблем, можно добавить FreeRADIUS, настройки которого аналогичны описанным в статье «Виртуальная сеть для Windows-клиента» из июльского номера ][ за 2007 год. А чтобы MPD узнал о его использовании, в файл mpd.conf заносим следующие строки:

# vi mpd.conf

set auth enable radius-auth
set auth enable radius-acct
set radius enable message-authentic
set radius config /etc/local/etc/mpd4/radius.conf
set radius retries 3
set radius timeout 3
set radius server localhost password123 1812 1813

И в файл radius.conf прописываем:

# vi radius.conf

acct 127.0.0.1 password123
auth 127.0.0.1 password123

Настройка PPTP-сервера с использованием Poptop

Poptop (www.poptop.org) является наиболее удачным, простым и быстрым решением для организации VPN-сервера на базе Linux/xBSD. В возможности Poptop входит: Microsoft-совместимая аутентификация и шифрование (MS-CHAPv2, MPPE 40-128 bit RC4), поддержка нескольких клиентских соединений, прозрачная интеграция в сетевое пространство Microsoft (LDAP, Samba) с использованием плагина RADIUS, поддержка популярных PPTP-клиентов. В плане производительности, по сравнению с MPD, Poptop имеет один серьезный недостаток: он работает в пространстве пользователя, в то время как MPD трудится через модуль ядра NetGraph.

Предположим, у нас есть сервер под управлением OpenBSD 4.2 с внутренним IP-адресом 192.168.2.1; аутентифицированным клиентам необходимо выдавать IP-адреса из диапазона 192.168.2.32/27 (192.168.2.32-192.168.2.63, маска подсети 255.255.255.224, 30 доступных адресов).

Для функционирования системы в качестве шлюза, позволяющего клиентам локальной сети обращаться к внешнему миру, первым делом необходимо включить перенаправление IPv4-пакетов с одного сетевого интерфейса на другой:

# sysctl -w net.inet.ip.forwarding=1

Штатное ядро OpenBSD поддерживает протокол GRE, наша задача - разрешить его использование:

# sysctl -w net.inet.gre.allow=1

Чтобы изменения вступили в силу после перезагрузки, добавляем соответствующие записи в /etc/sysctl.conf:

# vi /etc/sysctl.conf

net.inet.ip.forwarding=1
net.inet.gre.allow=1
 
# Еще один полезный параметр для шлюза: при панике ядра не сваливаемся в отладчик DDB, сразу идем на перезагрузку
ddb.panic=0

Устанавливаем poptop из портов:

# cd /usr/ports/net/poptop
# make install clean

Или с помощью прекомпилированного пакета:

# pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/poptop-1.1.4.b4p1.tgz

При компиляции из исходных текстов конфигурационному скрипту configure следует передать два параметра: '--with-bsdppp' и '--with-pppd-ip-alloc'. Назначение первой опции очевидно из названия, вторая позволяет снять ограничения на количество одновременных сессий и добавляет поддержку механизма распределения IP-адресов.

Все, инсталляция произведена, переходим к настройке.

# vi /etc/ppp/ppp.conf

# Умолчальные установки
default:
set log Phase Chat LCP IPCP CCP tun command
 
# Отключаем использование протокола IPv6
disable ipv6cp

# Ключевая секция
pptp:
 
# Используем MS-CHAP v2
enable MSChapV2
 
# Используем алгоритм шифрования данных MPPE
set mppe 128 stateless
 
# Стандартные методы компрессии не работают с MPPE, отключаем их
disable deflate pred1
deny deflate pred1
 
# Отключаем таймер ожидания
set timeout 0
 
# Задаем адрес VPN-шлюза, диапазон клиентских адресов и широковещательный адрес
set ifaddr 192.168.2.1 192.168.2.32-192.168.2.63 255.255.255.255
 
# Разрешаем получение адреса DNS-сервера и передаем его клиенту
accept dns
set dns 192.168.1.1
 
# При необходимости включаем ARP proxy
enable proxy

Создание или изменение учетных записей пользователей производится путем редактирования файла /etc/ppp/ppp.secret. В поле Hostname вместо имени хоста или IP-адреса можно указать знак звездочки «*», что означает возможность установить соединение с любого компьютера. Последние два поля («Метка» и «Обратный вызов») являются необязательными.

# vi /etc/ppp/ppp.secret

#Authname Authkey Hostname Label Callback
user1 X4dWg9327 192.168.2.50 pupkin
user2 123qWe456 *

Обрати внимание, вся информация хранится в открытом виде. Если не ограничить права к этому файлу, паролями для доступа в интернет сможет воспользоваться любой зарегистрированный в системе пользователь:

# chown root:wheel /etc/ppp/ppp.{conf,secret}
# chmod 600 /etc/ppp/ppp.{conf,secret}

Когда сделаны все вышеописанные настройки, poptop можно считать готовым к работе. Для запуска pptpd достаточно ввести в командной строке:

# /usr/local/sbin/pptpd

В /etc/rc.local добавляем автозапуск демона:

# vi /etc/rc.local

if [ -x /usr/local/sbin/pptpd ]; then
echo -n 'pptpd'; /usr/local/sbin/pptpd
fi

Настройка фильтра пакетов pf(4) на корректную работу с PPTP нетривиальна и заключается в разрешении входящих соединений по 1723/tcp и прохождения GRE-трафика:

# vi /etc/pf.conf

# Задаем используемые сетевые интерфейсы
ext_if = "fxp0"
int_if = "fxp1"
pptp_if = "tun"

# Определяем список, в который занесены IP-адреса подключающихся клиентов
table <pptp_users> { 192.168.2.32/27 }

# Не фильтруем пакеты на интерфейсах обратной петли
set skip on lo

# Выполняем трансляцию сетевых адресов только для пользователей, использующих PPTP
nat on $ext_if inet from <pptp_users> -> ($ext_if:0)

# Запрещаем все входящие соединения
block quick inet6 all
block in
block return-rst in proto tcp

# Разрешаем исходящие соединения
pass out keep state

# Разрешаем управляющее соединение
pass in on $int_if inet proto tcp from ($int_if:network) \
to ($int_if) port pptp keep state

# Разрешаем использование трафика, инкапсулированного в GRE
pass in on $int_if inet proto gre from ($int_if:network) \
to ($int_if) keep state

# Разрешаем трафик на туннельном интерфейсе
pass in on $pptp_if inet from <pptp_users> to ! (self) \
keep state

Проверяем конфиг на наличие ошибок:

# pfctl -n -f /etc/pf.conf

И перезагружаем набор рулесетов файрвола:

# pfctl -f /etc/pf.conf

Заключение

Все настройки произведены, сервер поднят и караулит подключения клиентов. Если все сделано правильно, то они не заставят себя долго ждать :). Причины облома смотри, как всегда, в логах. Удачи.

INFO

В статье «Виртуальная сеть для Windows-клиента» из июльского номера ][ за 2007 год Сергей Яремчук подробно рассказал, как настроить PPTP-сервер на базе Linux. Казалось бы, тема раскрыта полностью и к ней можно больше не возвращаться, однако поднятие подобного сервера в Free/Net/OpenBSD существенно отличается, именно поэтому и была написана эта статья.

PPTP - это одно из немногих многопротокольных решений - туннели можно создавать по протоколам IP, IPX и NetBEUI.



Источник: http://www.xakep.ru/magazine/xa/109/160/1.asp
Категория: РРР | Добавил: oleg (27.06.2008) | Автор: Ульяна Смелая
Просмотров: 1635 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024