FreeBSD 9: поддержка таблиц в PF

Понадбилась мне тут поддержка таблиц в межсетевого экрана PF, т.к. попытка просмотреть таблицу командой:

pfctl -t badhosts -T show


Заканчивалась вот таким сообщением:

No ALTQ support in kernel
ALTQ related functions disabled
No ALTQ support in kernel


Будем пересобирать ядро. Это кстати намного проще и удобнее, чем в Linux. Делаем вот что:

( Читать дальше )

FreeBSD: firewall для web сервера за 5 минут

В данном топике мы за 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