Интернету уже почти 50 лет. И с каждым днем он становится быстрее, доступнее, функциональнее и, как это не обидно, опаснее. В мировой паутине находятся тысячи и миллионы вирусов, червей, руткитов, троянов и прочих программ, которые ничего полезного в своём функционале не несут. И это только программы. Так же не стоит забывать хакеров, взломщиков, вредителей и просто спамеров.
Кроме полезности и удобства в интернете существуют огромное количество опасностей, от которых компании вцелом и пользователи лично пытаются максимально защититься. Установка антивирусов и фаерволов на конечные компьютеры это хорошо и правильно. Но хорошим тоном считается предупреждение опасностей на более ранних стадиях. Это работа Интернет-Шлюза. Один из Таких шлюзов это Packet Filter. Для FreeBSD он не является «родным», соответственно его нужно вкомпилить в ядро. Как вариант, можно загрузить его модулем и он и так будет работать, но это не есть путь настоящего unix-джедая.
Итак, приступим. Для начала отредактируем конфиг нашего будущего ядра. Для этого скопируем дефолтный и подправим под свои нужды:
# cd /usr/src/sys/i386/conf/ |
после этого открываем наш новый конфиг и добавляем в него следующие строки:
#Queuing support (requied by PF) |
device pf включает в ядро поддержку сетевого экрана Packet Filter. Собственно это то, чего мы добиваемся.
device pflog включает в ядро необязательное сетевое псевдоустройство pflog, которое может использоваться для протоколирования трафика через bpf (berkley packet filter). Даемон pflogd может использоваться для сохранения протоколируемой информации на диск. При желании все что попадает туда можно посмотреть tcpdump’ом. Однако, надо знать, как заставить PF логировать траффик. Об этом позднее.
device pfsync включает необязательное сетевое псевдоустройство pfsync, используемое для отслеживания изменений состояния. Поскольку оно не входит в загружаемый модуль, для его использования необходимо собрать собственное ядро.
Очереди (ALTQ — ALTernate Queuing).
options ALTQ включает подсистему ALTQ.
options ALTQ_CBQ включает Class Based Queuing (CBQ). CBQ позволяет распределять пропускную способность соединений по классам или очередям для выставления приоритетов трафика на основе правил фильтрации.
options ALTQ_RED включает Random Early Detection (RED). RED используется для предотвращения перегрузки сети. RED вычисляет длину очереди и сравнивает ее с минимальной и максимальной границей очереди. Если очередь превышает максимум, все новые пакеты отбрасываются. В соответствии со своим названием, RED отбрасывает пакеты из различные соединений в произвольном порядке.
options ALTQ_RIO включает Random Early Detection In and Out.
options ALTQ_HFSC включает Hierarchical Fair Service Curve Packet Scheduler.
options ALTQ_PRIQ включает Priority Queuing (PRIQ). PRIQ всегда пропускает трафик из более высокой очереди первым.
options ALTQ_NOPCC включает поддержку SMP для ALTQ. Эта опция необходима для SMP систем.
Ознакомившись с теми возможностями, которые появятся в нашем новом ядре приступаем к сборке:
# cd ../compile/PF/ && make cleandepend && make depend && make && make install && reboot |
здесь чистятся зависимости, собираются, собирается и устанавливается наше новое ядро и происходит перезапуск системы.
После перезагрузки проверить успешную установку можно командой ifconfig:
pflog0: flags=0<> metric 0 mtu 33200 |
pfsync0: flags=0<> metric 0 mtu 1500 |
syncpeer: 0.0.0.0 maxupd: 128 |
Эти 2 устройства указывают на то, что PF успешно установился в систему.
Теперь можно заняться непосредственно настройкой самого фаервола.
Начнём с того, что сделаем нашу машину шлюзом и заставим PF грузиться вместе с системой. Сделаем это с помощью системного файла /etc/rc.conf. Добавим в него следующее:
gateway_enable= "YES" # Говорим, что наша машина будет выполнять функции шлюза |
pf_enable= "YES" # Включаем сам PF |
pf_rules= "/etc/pf.conf" # Указываем файл с набором правил |
pflog_enable= "YES" # Запускаем демон логирования pflogd |
pflog_logfile= "/var/log/pflog" # И говорим, куда надо складывать весь лог |
Теперь необходимо объяснить фаерволу как он должен работать. Для этого создадим файл /etc/pf.conf с набором правил и приведём его к такому виду:
ext_if = "re0" #указываем внешний интерфейс |
int_if = "ste0" # указываем внутренний интерфейс. |
localnet = "192.168.7.0/24" # задаём всю локальную сеть |
set skip on lo0 # пропускаем все на локальной петле |
set loginterface $ext_if # указываем интерфейс с которого снимаем логи |
set block-policy return #политика блокировния |
scrub in all # вычищаем все фрагментированные пакеты |
nat on $ext_if from $localnet to any -> ($ext_if) # собственно эта строка и позволяет поднять NAT |
block in on $ext_if all # блокируем весь входящий трафик на внешнем интерфейсе |
pass on $int_if all # пропускаем все внутри сети |
Замечание!
В FreeBSD 9 строка, отвечающая за NAT немного изменилась:
nat on $ext_if from !($ext_if) -> ($ext_if:0) |
Далее следует запустить PF. Это делается следующим образом:
Перечитываем конфигурационный файл:
Конфигурация фаервола минимальна. Следует обратить внимание на то, что мы закрыли весь доступ на внешний интерфейс. В частых случаях этого достаточно. Если же у Вас напущены различные сервисы, как WEB, FTP или вы хотите удаленно подключаться по SSH, эти все порты необходимо будет отдельно открывать
Истояник : http://tradenark.com.ua/nat-freebsd-with-pf/
Запись опубликована в рубрике
*Lan&Wan,
*Unix,*Linux. Добавьте в закладки
постоянную ссылку.
Перечитываем конфигурационный файл:
# pfctl -f /etc/pf.conf
Проверка конфигурации на валидность
pfctl -nf /etc/pf.rules