Настраиваем фаервол: ipfw

firewallИтак, в этой статье мы узнаем, как быстро настроить фаервол ipfw на FreeBSD.

Для начала, Ipfw должен быть в ядре или в виде модуля. Если ядро самосборное – крайне желательно собирать с IPFIREWALL_DEFAULT_TO_ACCEPT
Это связано с тем, что при ошибке в конфиге фаера или просто перезапуск без перевода процесса в фон чревато полной недоступностью сервера из сети. А так – прошёл ipfw -f -q flush (сброс правил), состояние стало “разрешить всё”, и пока не дойдём до правила в конце “запрет всего лишнего”, мы сможем как минимум переподключиться и поправить правила. Хотя это и не спасёт от ошибки вида “забыли проковырять дырку для ssh”.

Минимальный набор служб, который обычно надо выпустить: 22 (ssh – tcp), 25 (smtp, отправка уведомлений с сервера, tcp), 53 (dns – как минимум мы сами должны уметь делать резолв, может быть как tcp так и udp). Также надо сразу разрешить трафик на служебном интерфейсе lo0.

Проверим, что ipfw включен:

ipfw -a list

Должно быть что-то вроде

65535 583535090 359726489527 allow ip from any to any

Правило номер 65535, следующие 2 числа это сколько трафика вошло и вышло (in и out), потом само правило – разрешить всё ото всех.

Простейшее правило:

ipfw add allow all from any to any via lo0

Разрешаем весь трафик на интерфейсе lo0

Разрешим для примера ssh

ipfw add allow tcp from any to me 22
ipfw add allow tcp from me 22 to any

Это правила без контроля соединения, поэтому надо 2 правила: первым мы разрешили коннекты к нам на 22 порт (ssh), но ответы от нас будут резаться. Вторым правилом мы разрешили отправлять с нашей стороны с 22 порта.

Есть динамические правила. Пишутся так:

ipfw add allow all from any to me 25 setup keep-state

Внимание! На нагруженном сервере спокойно можем схватить “Too many dynamic rules”. Немного рассматривал у себя на примере limit, но вызывается это именно на keep-state, поэтому не рекомендую для web-сервера вешать на 80 порт, не понимая принципов работы IPFW. Также не рекомендую для ssh – если на сервере кончились динамические правила, фаервол не сможет нам разрешить ssh-подключение.

Пытался разобраться в смысле setup+keep-state, не разобрался. Кто-то пишет только setup, кто-то только keep-state…

– дальше по аналогии нужные правила –
Нюансы: например, чтобы почта ходила нормально, нужно 2 набора:
1) почта к нам

allow all from any to me 25 setup keep-state

2) почта от нас

allow all from me 25 to any setup keep-state

То же для днс, веба (если у нас там веб-сервер) – обновления тянутся по 80 порту…

Также не забываем про пинги

allow icmp from any to any

Теперь запретим всё лишнее, но будем писать лог, что запретили

ipfw add 65000 deny log all from any to any

логи идут в /var/log/security, но надо включить вывод

в ядре

options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100 # или сколько надо по умолчанию

либо в /etc/rc.conf

firewall_logging="YES"

либо

sysctl -w net.inet.ip.fw.verbose=1

Не забываем первое время проверять этот файл – там может оказаться забытая служба или разные аномалии.

Можно запретить выборочные порты, например 3306 (mysql), чтобы в лог не попадало об этом записей.

Вообще, возможностей значительно больше, включая нат, копирование всех пакетов куда-либо (tee), ограничение скорости (queue) итд. На хорошую книгу можно набрать.


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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2023

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!