Пример конфигурации PF на FreeBSD

В этой статье я расскажу вам немного про конфигурацию фаервола PF на базе FreeBSD. Данная статься является продолжением предыдущей статьи. На самом деле конфиг PF очень интересно структуризирован. ОН делиться на секции и все они должны идти в строгом порядке и не должны ни в коем случае пересекаться между собой. Ниже я приведу пример конфигурации PF с своего сервера, с комментариями. Политика данной конфигурации блокируем все, разрешаем только нужное. Так как это боевой сервер, то порты будем открывать только необходимые. Для которых в конфиге указаны таблицы по протоколам. Так же отключены все ненужные icmp запросы. Так как на хостинг бывают ddos атаки в конфиге присутствует таблица куда попадают и блочатся те кто превысил лимиты при запросах на 80 порт. То же самое делаем и с почтой. Присутствует защита от спуфинга, так как при атаках зачастую используются несуществующие ip.

ext_if = " bce0 " ## внешка 
int_if = " bce1 " ## локалка
lan="192.168.0.0/24" ## локальная подсетка
tcp_services="{ 20, 21, 22, 25, 80, 53, 110, 143, 443, 3306, 8080 }" ## tcp порты использующиеся на сервере
udp_services="{ 53, 514 }" ## udp порты использующиеся на сервере
ispmgr_services="{ 1500 }" ## порт ispmanager
icmp_types="{ echoreq, unreach}" ## разрешенные icmp типы запросов
table  {77.77.77.77} ## таблица разрешенных ip
table  persist ## таблица куда заносим уродов ддосеров
table  persist ## таблица уродов для pop3, которые долбятся на почту
set block-policy drop ##сбрасываем соединение грубо
set skip on lo0 ## полностью пропускаем проверку на петле 
set skip on $int_if ## полностью пропускаем проверку на интерфейсе,
set loginterface $ext_if ## включаем логирование на интерфейсе
set optimization normal ## оптимизация
scrub in all ## нормализуем все входящие пакеты на всех интерфейсах
scrub on $ext_if all reassemble tcp
nat on $ext_if from $lan to any -> $ext_if ## проброс NAT внутри сеть
antispoof quick for $ext_if ## правило для антиспуфинга
block in log all ## блокируем вход
block out log all ## блокируем выход
pass quick on lo0 all ## разрешаем петлю
pass quick on $ext_if from   to $ext_if keep state ## разрешаем вайтлисту без обработки
block in quick on $ext_if from  to any ## блочим всех кто попался в таблицу white_list
pass in on $ext_if proto tcp from any to $ext_if port $tcp_services flags S/SA keep state ## разрешаем с внешки ломится на разрешенные tcp порты
pass in on $ext_if proto tcp from any to $ext_if port www flags S/SA synproxy state ## чистим траф www от SYN flood
pass in on $ext_if proto tcp from any to $ext_if port $ispmgr_services flags S/SA keep state ## пропускаем ispmanager
pass in on $ext_if proto tcp to $ext_if port www flags S/SA keep state (max-src-conn-rate 5/2, overload  flush) ## www режим тех кто превысил лимиты и ложим в таблицу 
pass in on $ext_if proto tcp to $ext_if port ftp flags S/SA keep state ( max-src-conn 400, max-src-conn-rate 400/2, overload  flush) ## ftp режим тех кто превысил лимиты и ложим в таблицу
pass in on $ext_if proto tcp from any to $ext_if port pop3 flags S/SA keep state (max-src-conn-rate 15/60, overload  flush) ## флюшкаем уродов по лимитам которые ломятся безможно на почту
pass in on $ext_if proto udp from any to $ext_if port $udp_services keep state ## пропускаем udp на разрешенные порты
pass in on $ext_if inet proto icmp all icmp-type $icmp_types keep state ## разрешаем только некоторые типы icmp
pass in quick on $ext_if proto tcp from any to any port 20 flags S/SA keep state ## разрешаем 20 порт для ftp
pass in quick on $ext_if proto tcp from any to any port 21 flags S/SA keep state ## разрешаем 21 порт для ftp
pass in quick on $ext_if proto tcp from any to any port > 49151 keep state ## разрешаем порты выше 49151 для passive FTP mode
pass out on $ext_if proto tcp all modulate state flags S/SA ## разрешаем все модуляции для исходящих tcp соединений 
pass out on $ext_if proto {tcp, udp, icmp } all keep state ## разрешаем исходящие протоколы


Исходя из этого конфига можно по кусочку собрать что то под себя, допустим для того же роутера. Так же полезные команды для PF: Включение фаервола 
pfctl -e
 Отключение фаервола 
pfctl -d
 Загрузка новой конфигурации (путь может быть любой) 
pfctl -f /etc/pf.conf
 Проверка ошибок конфига 
pfctl -nf /etc/pf.conf
 Загрузить только NAT правила 
pfctl -Nf /etc/pf.conf
 Применить только фильтрующие правила 
pfctl -Rf /etc/pf.conf
 Вся информация PF 
pfctl -sa
 Статистика 
pfctl -si
 Активные правила фильтрации 
pfctl -sr
 Активные правила NAT 
pfctl -sn
 Посмотреть тех кто находится в таблице (где table_name - это имя вашей таблицы) 
>pfctl -t table_name -T show
 Посчитать колличество ip в таблице 
pfctl -t table_name -T show | wc -l
 Еще хотел сказать по поводу логов. Так как PF пишет их в бинарном формате то так просто вы их не посмотрите, просмотреть их можно следующей командой. 
tcpdump -n -e -ttt -r /var/log/pf.log
 
 
 
 
 
 
 
 
 
 
 
 

  • Автор: WereWolf
  • Комментарии: 0
  • Просмотры: 120

Добавить комментарий

Вы не авторизованы и вам запрещено писать комментарии. Для расширенных возможностей зарегистрируйтесь!