Ввиду того что я не так часто использую ipfilter, а больше ориентируюсь на ipfw, но все же иногда он тоже нужен — появилась эта статья.

В этой статье, я делаю краткие заметки, «живые примеры» и то что необходимо для настройки, другими словами кому нужен «первый опыт знакомства с ipfilter» — прочитав эту статью, можно понять что к чему.

Итак,
Принцип прохождения пакетов, курируется таким правилом:

К пакету применяется последнее подходящее правило.

Что это значит? То есть, если выше было сказано зарезать все, а потом открыть порты 22,25,110 и т.д., то по умолчанию будет закрыто все кроме этих портов.

Для запуска ipfiltrа, необходимо вкомпилить в ядро такие строки:

options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCK

И прописать в /etc/rc.conf такие параметры:

ipfilter_enable="YES"             # Запуск межсетевого экрана ipf
ipfilter_rules="/etc/ipf.rules"   # Загрузка файла с правилами
ipnat_enable="YES"                # Если надо задействовать nat
ipnat_rules="/etc/ipnat.rules"    # Определение файла правил для ipnat
gateway_enable="YES"              # Включение шлюза для локальной сети

Теперь привожу «живые примеры» правил в ipf.rules:

block in log all
block out log all
pass in quick on lo0 all
pass out quick on lo0 all
pass in quick on rl0 all
pass out quick on rl0 all
# [smtp to world]
pass out quick on rl1 proto tcp from any to any port = 25 flags S keep state keep frags
# [whois to world]
pass out quick on rl1 proto tcp from any to any port = 43 flags S keep state keep frags
# [domain to world]
pass out quick on rl1 proto tcp from any to any port = 53 flags S keep state keep frags
pass out quick on rl1 proto udp from any to any port = 53 keep state keep frags
# [http to world]
pass out quick on rl1 proto tcp from any to any port = 80 flags S keep state keep frags
# [pop3 to world]
pass out quick on rl1 proto tcp from any to any port = 110 flags S keep state keep frags
# [https to world]
pass out quick on rl1 proto tcp from any to any port = 443 flags S keep state keep frags
# [dhclient]
pass in quick on rl1 proto udp from any to any port = 68 keep state keep frags
pass in quick on rl1 proto udp from any to any port = 67 keep state keep frags
# [icmp]
pass in quick on rl1 proto icmp from any to any icmp-type 3 keep state keep frags
pass in quick on rl1 proto icmp from any to any icmp-type 11 keep state keep frags

Для примера вот ещё правила:

pass out quick on lo0 proto ip from any to any
pass in quick on lo0 proto ip from any to any
pass in quick on fxp1 proto tcp from any to 1.2.3.1/32 port = 80 flags S keep state
pass out log quick on fxp1 from 1.2.3.1/32 to any
pass in quick on fxp1 proto icmp from any to any icmp-type 0
pass in quick on fxp1 proto icmp from any to any icmp-type 11
block in log quick on fxp1 proto icmp from any to any
block return-icmp(port-unr) in log quick on tun0 proto udp from any to 20.20.20.0/24 port = 111

Теперь проанализируем команды:

quick — обозначает, что если анализируемый пакет подпадает под данное правило, то дальнейший просмотр правил прекращается.
keep state — обозначает, что так же будут разрешены все пакеты, которые пойдут по этому же соединению в том числе в обратную сторону.

Теперь примеры редиректа в ipnat.rules:

map tun0 10.10.1.0/24 -> 20.20.20.1/32
map tun0 10.10.1.0/24 -> 0/32 portmap tcp/udp 20000:30000

Запускаем:

/etc/rc.d/ipfilter start
/etc/rc.d/ipnat start

Системные команды:

ipf -Fa -f /etc/ipf.rules - сбросить все правила и загрузить новые из файла                               
ipfstat -in - вывод правил для входящего трафика
ipfstat -on - вывод правил для исходящего трафика
ipfstat -t - просмотр текущей статистики в виде TOP-а
ipnat -l - смотрим текущие редиректы для ipnat
/etc/rc.d/ipnat reload - для перезагрузки правил ната
ipf - выполняет чтение правил из файла или из командной строки и добавляет их в ядро.
ipfstat - выполняет вывод детальной статистики фильтра пакетов. 
ipftest - читает правила из файла и затем для каждого создает примерный пакет для тестирования.
ipmon - выполняет чтение логов ipf.
ipsend - создает пакеты с заданными параметрами и выполняет их отсылку.
ipresend - выполняет чтение сохраненных пакетов из файла (snoop, tcpdump, etherfind) и посылает их снова. 
iptest - программа для тестирования надежности TCP/IP стека.

Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:

http://noted.org.ua/1455


Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)

Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455

На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел

Add your comment now

Please note: JavaScript is required to post comments.