Документация по ОС FreeBSD
Воскресенье, 23.11.2025, 18:10
Главная
Регистрация
Вход
Приветствую Вас
Гость
|
RSS
Меню сайта
Главная страница
Новости в мире Unix
NEW
Каталог файлов
NEW
Установка и настройка
Ports & Packages
cvs
Безопасность
Работа с железом
X Window
Multimedia
Man pages
Net
Apache
DNS
FTP
Mail
Samba
Squid
SSH
VPN
РРР
Shell
IPFW
Tips'n'tricks
RFC
Книги по FreeBSD
Темы экзамена BSDA
Гостевая книга
Форум на bsdportal.ru
Каталог сайтов
Самый свежий софт
Каталог ссылок
Категории каталога
Apache
[58]
DNS
[25]
FTP
[27]
Mail
[74]
Samba
[24]
Squid
[46]
SSH
[23]
VPN
[35]
РРР
[20]
Net
[173]
Главная
»
Статьи
»
Сеть
»
РРР
Настройка pptpd на FreeBSD [2010]
Некоторое время назад автору этих строк была поставлена задача поднять PPTP-сервер на FreeBSD. Обычно для этого используют mpd, но поскольку автор является "прожжёным линуксоидом" то он решил попробовать поднять привычный по Linux pptpd. Попытка увенчалась успехом и был получен простой в администрировании pptp-сервер. Далее будет приведено описание процесса настройки и запуска сервиса.
Настройка сервера
Подробная постановка задачи:
сервер под управлением FreeBSD 8.1;
сетевой интерфейс fxp0 на сервере с IP-адресом 1.2.3.4 и алиасом 1.2.3.5;
клиенты должны подключаться к серверу на его алиас и иметь точкой выхода основной адрес сервера;
трафик между клиентами и сервером должен шифроваться;
Приступаем к настройке. Первым делом запустим DNS-сервер. Для этого открываем файл "/etc/namedb/named.conf" и меняем строку:
listen-on { 127.0.0.1; };
На:
listen-on { any; };
Чтобы сервер слушал на всех доступных адресах и интерфейсах а не только на localhost, поскольку именно этот сервер в качестве DNS и будут использовать наши клиенты. Затем добавляем в файл /etc/rc.conf строку:
named_enable="YES"
И запускаем сервис:
/etc/rc.d/named start
Теперь нужно обновить дерево портов, чтобы быть уверенными что ставим всё самое свежее:
portsnap fetch extract
Сервер pptpd доступен в портах FreeBSD как net/poptop. Установим его:
cd /usr/ports/net/poptop && make install clean
Переходим к настройке. Клиентам мы будем выдавать адреса из сети 10.255.117.0/255.255.255.0. Для всех PPP-соединений на стороне сервера будет адрес 10.255.117.1.
Самая большая сложность при настройке возникла когда выяснилось что при использовании типовой конфигурации клиенты на Linux и Mac OS X не могли согласовать с сервером шифрование и потому хотя формально подключение и происходило - реально трафик не ходил. У клиентов под управлением Windows таких проблем не возникло.
Однако вдумчивое чтение документации некоторые эксперименты с конфигурацией помогли решить эту проблему. Далее будет описано сразу готовое решение.
Создадим файл конфигурации pptpd "/usr/local/etc/pptpd.conf" следующего содержания:
noipparam
logwtmp
localip 10.255.117.1
remoteip 10.255.117.2-102
+chapms-v2
mppe-128
mppe-stateless
nobsdcomp
Теперь нам нужно настроить подсистему ppp, надстройкой над которой и является pptpd. Здесь самым первым делом нужно привести файл "/etc/ppp/ppp.conf" к виду:
default:
set log Phase Chat LCP IPCP CCP tun command
disable ipv6cp
ident user-ppp VERSION
set device /dev/cuau1
set speed 115200
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
\"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
set timeout 180
enable dns
papchap:
set phone PHONE_NUM
set authname USERNAME
set authkey PASSWORD
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR
loop:
set timeout 0
set log phase chat connect lcp ipcp command
set device localhost:pptp
set dial
set login
# Здесь указываем:
# 1. Адрес на стороне сервера для всех подключений
# 2. Диапазон клиентских адресов
# 3. Маску подсети
set ifaddr 10.255.117.1 10.255.117.2-10.255.117.102 255.255.255.0
add default HISADDR
set server /tmp/loop "" 0177
loop-in:
set timeout 0
set log phase lcp ipcp command
allow mode direct
pptp:
load loop
disable pap
disable ipv6cp
accept dns
enable MSChapV2
enable mppe
disable deflate pred1
deny deflate pred1
add default HISADDR
# Адрес DNS, выдаваемый клиентам.
# Идеальный вариант - адрес сервера ("точка выхода")
set dns 1.2.3.4
set mppe 128 stateless
set device !/etc/ppp/secure
Следующий шаг - создание скрипта "/etc/ppp/secure", управляющего ppp-соединенями:
#!/bin/sh
exec /usr/sbin/ppp -direct loop-in
Создаём файл с логинами и паролями "/etc/ppp/ppp.secret":
# Логин и пароль. Адрес будет выдан динамически из пула сервера
login1 pass1
# Логин и пароль со "ситатическим" адресом
login2 pass2 10.255.117.200
Запускаем сервер:
echo pptpd_enable="YES" >> /etc/rc.conf && /usr/local/etc/rc.d/pptpd start
Настраиваем пакетный фильтр (файрволл). Опишем правила в файле /etc/pf.rules:
set limit { states 20000, frags 5000 }
set timeout { adaptive.start 6000, adaptive.end 12000 }
set skip on { lo0 }
# Базовые настройки
if_ext = "fxp0"
if_pptp = "tun"
table <pptp_users> { 10.255.117.0/24 }
set block-policy drop
set state-policy if-bound
scrub all reassemble tcp fragment reassemble
# NAT для клиентов PPTPD
nat on $if_ext inet from <pptp_users> -> ($if_ext:0)
pass quick on lo0 all
pass quick on tun all
# Разрешаем исходящий трафик
pass out quick on $if_ext inet proto tcp from ($if_ext) to any flags S/SA keep state
pass out quick on $if_ext inet proto { udp, icmp } from ($if_ext) to any keep state
pass out quick on $if_ext inet proto gre from ($if_ext) to any
# Разрешаем доступ к серверу по SSH
pass in quick on $if_ext inet proto tcp from any to ($if_ext) port 22 flags S/SA keep state
# Разрешаем подключение по PPTP
pass in quick on $if_ext inet proto tcp from any to ($if_ext) port 1723 flags S/SA keep state
pass in quick on $if_ext inet proto gre from any to ($if_ext) keep state
# Разрешаем ICMP
pass in quick on $if_ext inet proto icmp from any to ($if_ext)
# Разрешаем весь трафик наших клиентов
pass in quick inet from <pptp_users> to any
# Запрещаем весь остальной трафик
block drop all
Добавляем в файл "/etc/rc.conf" строки:
pf_enable="YES"
pf_rules="/etc/pf.rules"
И запускаем пакетный фильтр:
/etc/rc.d/pf start
Казалось бы всё, но кое-что ещё не сделано. И это кое-что очень важное: мы не включили форвардинг (пересылку) пакетов. Без этого клиенты смогут подключаться к серверу, но их трафик дальше сервера не уйдёт.
Включаем форвардинг и сразу добавляем соответствующую строку в файл "/etc/sysctl.conf" чтобы он включался при загрузке:
sysctl net.inet.ip.forwarding=1 && echo net.inet.ip.forwarding=1 >> /etc/sysctl.conf
Вот теперь действительно всё. Сервером можно пользоваться.
Настройка клиентов
Настройка PPTP-соедения на Windows вещь элементарная и описывать её не стоит. Нужно только отметить что в качестве сервера для подключения нужно указывать авторой IP-адрес (алиас) сервера, а точкой выхода будет первый (основной) адрес. Шифрование в Windows включено и используется по умолчанию.
В Linux (при использовании Network Manager) шифрование по умолчанию выключено и потому его нужно включать самому. Для этого в свойствах соединения нужно нажать кнопку "Advanced" и включить "MPPE" и "stateful encryption":
После этого соединение проходит успешно и между клиентом и сервером ходит шифрованный трафик.
Генерация логинов и паролей
Ещё один интересный момент это быстрая генерация большого количества логинов и паролей для последующей раздачи клиентам. Автор этих строк для быстрой генерации сотни пар "логин-пароль" написал небольшой скрипт на bash:
#!/usr/local/bin/bash
# Уровень "случайности" пароля.
RND_LEVEL=8
# Длина пароля
PASS_LEN=8
for i in {1..100}; do
echo user$i `head -c $RND_LEVEL /dev/urandom | md5 | cut -c 1-$PASS_LEN`
done
После запуска скрипт напечатает сотню пар "логин-пароль" на стандартный вывод. Вывод скрипт можно сразу перенаправить в файл /etc/ppp/ppp.secret.
На этом всё. Приятной работы!
Источник:
http://www.ylsoftware.com/news/597
Категория:
РРР
| Добавил:
oleg
(20.11.2010) | Автор:
MooSE
Просмотров:
1456
| Рейтинг:
0.0
/
0
|
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Всего комментариев:
0
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация
|
Вход
]
Форма входа
Друзья сайта
Google+
Copyright MyCorp © 2025