Настройка фаервола на ОС FreeBSD (ipfw)

Самое вкусное – настройка фаервола на ОС FreeBSD на базе родного ipfw.

Приступим. Для начала смотрим наше ядро на наличиее следующих строк :

18:51 user@ns3 [/etc]#cat /usr/src/sys/i386/conf/mailsrv | grep IPFIREWALL
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
18:51 user@ns3 [/etc]#

Если Вы такого не наблюдаете, тогда Вам необходимо пересобрать ядро, используя в качестве подсказки файлик LINT. Для его создания, Вам необходимо перейти в директорию /usr/src/sys/i386/conf (у Вас может быть другая – все зависит от того, какую платформу Вы используете, у меня в данном случае i386), и выполнить команду make LINT.

Если же у Вас есть в наличии такие строки, тогда Вы можете проверить запущен ли у Вас фаервол:

18:57 user@ns3 [/etc]#ipfw show
65535 651516 311197005 allow ip from any to any
18:57 user@ns3 [/etc]#

У меня запущен, и, как мы видим, по правилам этого фаервола, у меня все открыто. Чтож, будет устранять эту погрешность. Для начала ползем в /etc/rc.conf и добавляет следующие строки:

firewall_enable=”YES”
firewall_script=”/etc/firewall”

Это говорит системе о том, что по умолчанию фаервол запускать при загрезке системы, и использовать файл /etc/firewall в качестве списка правил. Создаем файл:

DING! user@ns3 [/etc]#touch /etc/firewall
19:00 user@ns3 [/etc]#chmod 755 /etc/firewall

И проверяем:

19:01 user@ns3 [/etc]#ll /etc/ | grep fire
-rwxr-xr-x  1 root  wheel         0 Nov 20 19:00 firewall

Видим, что файл создан, есть в системе и он исполняемый. Пришло время создать правила, по которым будем работать дальше.

#!/bin/sh
fwcmd=”/sbin/ipfw -q” – указываем, где находится сама программа
${fwcmd} -f flush – делаем очистку правил при старте
${fwcmd} add check-state – проверяет пакет по динамическому набору правил; если найдено соответствие, дальнейший поиск прекращается, иначе – переходим к следующему правилу.
#Setup loopback
${fwcmd} add allow all from any to any via lo0 – разрешаем трафик по внутреннему интерфейсу lo0
${fwcmd} add deny all from any to 127.0.0.0/8 – запрещаем доступ с интерфейса lo0 и на него
${fwcmd} add deny all from 127.0.0.0/8 to any
#Deny Broadcasts – запрещаем широковещательные запросы
${fwcmd} add deny log icmp from any to 255.255.255.25
#Allow ports rules – разрешаем ранее разрешенные соединения
${fwcmd} add allow log tcp from any to any established
#DNS – и перечень тех или иных разрешщенных или запрещенных служб
${fwcmd} add allow log tcp from any to any 53
${fwcmd} add allow log udp from any to any 53
#NTPD
${fwcmd} add allow log ip from any to any 123
#SSH
${fwcmd} add pass log ip from any to any 22 setup
#Apache
${fwcmd} add pass log ip from any to any 80 setup
#FTP
${fwcmd} add pass log ip from any to any 20,21 setup
#Cvsup
${fwcmd} add allow log tcp from any to any 5999 setup
#Allowed ports
${fwcmd} add allow log tcp from any to any 1025-1100,49152-65535
#MySQL
${fwcmd} add deny log ip from any to any 3306 setup
#Deny
${fwcmd} add deny log ip from any to any

В кратце и все. Тут не расматривал вопрос о включении ната (ибо он мне в этом случае просто не нужен был), не расматривал вопрос о пайпах (pipe). Простой обычный фаервол для почтового сервера.