Настраиваем файрвол PF (Packet Filter)

Задача:
---------------------------------------------------------------Настроить межсетевой экран PF (Packet Filter) на операционной системе FreeBSD.
Packet Filter из OpenBSD был портирован в FreeBSD в июле 2003. PF – это полноценный межсетевой экран с поддержкой ALTQ (Alternate Queuing). ALTQ предоставляет управление пропускной способностью Quality of Service (QoS).
Первым делом, проверим наличие PF в автозапуске
root@/:/usr/share/examples/pf # cat /etc/rc.conf | grep pf pf_enable="YES" pflog_enable="YES" pflog_logfile="/var/log/pflog" pf_rules="/etc/pf.conf" root@/:/usr/share/examples/pf #
При отсутствии добавляем файрвол в автозагрузку и активируем логирование
echo "pf_enable='YES'" >> /etc/rc.conf echo "pflog_enable='YES'" >> /etc/rc.conf echo "pflog_logfile='/var/log/pflog'" >> /etc/rc.conf echo "pf_rules='/etc/pf.conf'" >> /etc/rc.conf
Примеры конфигов можно найти по адресу:
root@ws1:/ # ls -1 /usr/share/examples/pf ackpri faq-example1 faq-example2 faq-example3 pf.conf queue1 queue2 queue3 queue4 spamd root@ws1:/ #
тут более подробно
man pf.conf
Настройка конфига. Синтаксис написания правил PF (pf.conf)
{pass,block}{in,out}{quick} proto {tcp,udp,icmp,gre ...} from SRC_IP to DSP_IP port = PORT_NUM {keep stat, flags S/SA ...} pass -разрешить block - запретить далее если нужно на вход или выход in/out далее параметр quick - если присутсвует, то список правил далее не просматривается и пакет останавливается на данном правиле proto - протокол from - откуда, to - куда будет идти пакет, port = номер порта Дополнительные опции: keep stat, флаги соединения и т.д.
Вот пример простого конфига, который можно использовать для веб-сервера
root@/:/etc # cat /etc/pf.conf # # info: # pfctl -t banip -T show # # Add ban: # pfctl -t banip -T add 111.222.333.444 # pfctl -t banip -T del 111.222.333.444 # restart: # pfctl -d # pfctl -ef /etc/pf.conf ext_if="vtnet0" # Anchor for fail2ban #anchor "f2b/*" set skip on lo set optimization normal set block-policy drop tcp_services = "{22, 80, 443}" #udp_services="{ 53 }" icmp_types="{ echoreq, unreach}" scrub in all scrub on $ext_if all reassemble tcp antispoof quick for $ext_if table <private> const { 10/8, 172.16/12, 192.168/16 } table <banip> persist table <blockip> persist file "/etc/pf.blockip" block return in quick on $ext_if from { <private>, <blockip>, <banip> } to any block in all pass out all pass in quick on $ext_if inet proto tcp from any to $ext_if port $tcp_services #pass in on $ext_if proto udp from any to $ext_if port $udp_services keep state pass in on $ext_if inet proto icmp all icmp-type $icmp_types keep state
Для этого конфига необходимо создать файл в который будем записывать адреса заблокированных IP
root@/:/etc # touch /etc/pf.blockip
Заблокируем IP адресс и сразу активируем блокировку
echo "11.22.33.44" >> /etc/pf.blockip pfctl -ef /etc/pf.conf
Примеры команд для просмотра логов:
tcpdump -nettti pflog0 tcpdump -netttr /var/log/pflog tcpdump -n -e -ttt -r /var/log/pflog port 2323 tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3 tcpdump -n -e -ttt -i pflog0 host 192.168.4.2 tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0
Запускаем файрвол
pfctl -ef /etc/pf.conf
echo “11.22.33.44” >> /etc/rc.conf -Ошибочка, однако 😉
Спасибо, подправил. Думал одно, печатал другое 🙂
Кхм… echo “11.22.33.44” >> /etc/pf.conf 😉
Спасибо, исправил )
печатал одно, думал другое 😉