Ввиду того что я не так часто использую 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 стека. |
Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:
Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)
Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455
На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел