Firewall с возможностью vpn (freebsd + pf + mpd)
Автор:
Григорий Ситнин
Опубликовано: 17 августа 2005 года
Источник: Блог Григория Ситнина
1. Устанавливаем FreeBSD 5.4. С версиями от 5.3 и до 5.0 работать, судя по документации, тоже будет, но pf там идёт как часть KAME и несколько урезан, насколько я понял. На компьтере должны быть две сетевые карты: одна смотрящая в нашу сеть, другая — в интернет. Подробно не расписываю, полагаю, что все знают.
2. В этой версии FreeBSD пакетный фильтр pf входит в стандартный набор. Поэтому ничего пока не устанавливаем. Просто создаём файл “/etc/pf.conf” примерно вот такого содержания:
--- pf.conf ------------------------------------
ext_if="rl0" # внешний интерфейс
int_if="dc0" # внутренний (локальный) интерфейс
int_net="{192.168.1.1/24}" # внутренняя сеть
# разрешаем натить всё, что должно быть снаружи
nat on $ext_if from $int_net to any -> ($ext_if)
# разрешаем входящие и исходящие соединения
pass in all
pass out all
------------------------------------------------
3. Добавляем пакет (для скорости я использую не порты, а пакеты, это удобно) “mpd-3.xx_x.tbz”. В моём случае это было сделано с помощью команды “pkg_add ftp://ftp.freebsd.org/…/mpd-3.18_2.tbz “. Такой вариант очень удобен тем, что позволяет также автоматически добавить и все требуемые пакеты. Внимание, ни в коем случае не скачивайте содержимое каталога “All”, в котором лежит бинарник пакета. Это безумное количество траффика (там лежат все пакеты, которые есть для текущей версии FreeBSD, а это много, поверьте).
4. Создаём в каталоге /usr/local/etc/mpd следующие файлы:
--- mpd.conf -----------------------------------
default:
load pptp0
load pptp1
load pptp2
pptp0:
new -i ng0 pptp0 pptp0
set ipcp ranges 192.168.1.2/32 192.168.5.10/32
load pptp_standart
pptp1:
new -i ng1 pptp1 pptp1
set ipcp ranges 192.168.1.2/32 192.168.5.11/32
load pptp_standart
pptp2:
new -i ng2 pptp2 pptp2
set ipcp ranges 192.168.1.2/32 192.168.5.12/32
load pptp_standart
pptp_standart:
set iface disable on-demand
set bundle disable multilink
set link yes acfcomp protocomp
set link no pap chap
set link enable chap
set link keep-alive 60 180
set ipcp yes vjcomp
# ниже прописать локальные dns и wins
set ipcp dns 192.168.1.1
set ipcp nbns 192.168.1.1
set iface enable proxy-arp
set bundle enable compression
set ccp yes mppc
set ccp yes mpp-e40
set ccp yes mpp-e128
set ccp yes mpp-stateless
set bundle yes crypt-reqd
# ниже прописать свой внешний ip
set pptp self 111.11.11.111
set pptp enable incoming
set pptp disable originate
------------------------------------------------
--- mpd.links ----------------------------------
pptp0:
set link type pptp
pptp1:
set link type pptp
pptp2:
set link type pptp
------------------------------------------------
При помощи этих конфигурационных файлов я создал три pptp-бандла. Это означает, что одновременно к нам сможет присоединяться 3 пользователя, максимум. Адрес vpn-сервера во внутренней сети будет 192.168.1.2 (учтите, что такого ip не должно быть в сети). Клиентам будут динамически выдаваться ip-адреса 192.168.5.10-12 (маска в файлах странная, но таковы требования pf).
--- mpd.secret ---------------------------------
user1 pass1
user2 pass2
user3 pass3
------------------------------------------------
В этом файле я просто прописал трёх пользователей с их паролями.
5. В теперь /etc/rc.conf написать следующее:
--- часть rc.conf ------------------------------
pf_enable="YES"
mpd_enable="YES"
------------------------------------------------
6. Перезагрузитесь. Задайте ip-адрес фаервола всем, кто нуждается в выходе в интернет, в качестве “шлюза по умолчанию” (default gateway). Всё работает.
Теперь, коментарии.
Сделать можно было гораздо больше, однако я не стал заморачиваться. Кто-то может сказать, что это никакой не фаервол, однако, если не устанавливать больше ничего, то на этой машине из портов открыт только порт pptp, поэтому ломать, право слово, нечего. Так что вполне это фаервол.
Почему я так накинулся на pf, когда есть ipfw, iptables и прочий софт для форвардинга? Очень просто: pf является штатным пакетным фильтром OpenBSD, операционной системы, в которой уже более восьми (!) лет не найдено ни одной дыры в установке по умолчанию. Но это не главное. Вы видите количество правил, которые пришлось задать для корректной работы? Макросы, таблицы, очереди — всем этим действительно быстро и удобно управлять. Ну и скорость у pf очень хорошая (я практически не заметил разницы между подключением напрямую и подключением через фаервол).
Вскоре я должен сделать подсчёт траффика для пользователей, так что ожидайте продолжения.