Firewall & vpn (freebsd + pf
+ mpd)
Автор: Григорий Ситнин 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 очень хорошая (я практически не заметил разницы между подключением напрямую и подключением через фаервол). |