В данном топике мы за 5 минут настроим firewall на FreeBSD. Так как в моем случае сервер работает на xen, никаких усложнений в плане защиты от ddos, syn флуда и прочего я расписывать не буду, т.к. внутри виртуальной машины это делать бессмысленно. По всем этим вещам рекомендую, например, данное руководство
Wouter Coene The OpenBSD Packet Filter HOWTO, ну и разумеется
FAQ.
Правим
/etc/rc.conf:
pf_enable="YES"
Создаем/правим файл
/etc/pf.conf:
# re0 - сетевой интерфейс
net_if1="re0"
# пропускаем все на локальном интерфейсе
set skip on lo
# список tcp портов, которые будут открыты со внешки
tcp_services = "{22, 80, 8080, 443}"
# блокируем все входящие соединения, но разрешаем исходящие
block in all
pass out all
# разрешаем доступ со внешки к вышеперечисленным портам
# ключевое слово quick означает, что после этого правила
# никакие другие правила к пакетам применяться не будут
pass in quick on $net_if1 inet proto tcp from any to $net_if1 port $tcp_services
Стартуем (кстати, если делаете это на удаленном сервере, ssh соединение будет разорвано после старта pf).
/etc/rc.d/pf start
Вот такой минимализм. Работают только определенные TCP порты, ICMP отключен.
Также пример настроек для работы ftp сервера в пассивном режиме:
net_if1="re0"
set skip on lo
tcp_services = "{20, 21, 22, 1222, 80, 8080, 443, 6969, 5222, 5223, 9090, 9091}"
block in all
pass out all
pass in quick on $net_if1 inet proto tcp from any to $net_if1 port $tcp_services
pass in quick on $net_if1 inet proto tcp from any to $net_if1 port 49512 >< 65535