Iptables – полезные команды

Netfilter-Iptables hitrostНижеприведенные команды iptables требуют соответствующую поддержку ядра системы. Если у вас стандартное системное ядро, то эти модули уже присутствуют в системе и будут подгружаться при необходимости.
Длинные правила я обрезал символом “\”. На самом деле эти правила надо писать в одну строку.

Использование IP диапазона

В любых правилах можно задавать диапазоны ip. Это требуется, когда масками сети не перекрыть все возможные ip диапазоны.

 #Запрет ip с 192.168.0.1 по 192.168.0.16
iptables -A INPUT -p tcp -i eth0 -m iprange --src-range 192.168.0.1-192.168.0.16 -j DROP 

Задание мультипортов

Очень полезно, чтобы не писать несколько правил на каждый порт, используем только одно правило

 #запрещаем входящие соединения к нам на перечисленные порты от сети 192.168.10.0
 iptables -A INPUT -p tcp -m multiport --dports \ 
ssh,smtp,http,587,110,https -i eth0 -s 192.168.10.0/24 -j DROP 

Задаем вероятность соединения

Очень хитрое правило 🙂 Можно задавать вероятности срабатывания правил.
Я читал байку, что таким образом были выбиты деньги на новый сервер, когда системный администратор грамотно расставил вероятности в правилах и доказал начальству, что старый сервер не справляется с нагрузкой. Т.к понять неискушенному человеку почему то есть соединение на порт, то нет, да еще непонятна закономерность очень непросто.

 #соединение на порт ssh будет с вероятностью успеха 25% 
iptables -A INPUT -i eth0 -m statistic --mode random \ 
--probability 0.25 -p tcp --destination-port 22 -j ACCEPT 

Защищаем 22 порт SSH от брутфорса (перебора паролей)

Задача следующих правил ограничить соединения на порт ssh пятью попытками в течении 10 минут с 1 ip адреса.
Создаем новую цепочку правил SSHDROP

 iptables -N SSHDROP 

Все новые соединения на порт 22 пропускаем через цепочку SSHDROP

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHDROP 
iptables -A SSHDROP -m recent --set --name SSH 

Если требуется будем писать лог соединений ssh

 iptables -A SSHDROP -m recent --update --seconds 300 \
 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH DROP: " 

Если начальные условия нарушены то запретим соединение

 iptables -A SSHDROP -m recent --update --seconds 300 --hitcount 5 --name SSH -j DROP 

Добавляем правило не перегружая весь конфиг iptables

Чтобы добавить правило в определенное место требуется вывести правила с нумерацией строк. На примере цепочки INPUT это делается командой:

 iptables -L INPUT -n --line-numbers 

Номера строк идут по порядку и ничего страшного, что надо вставить вместо какой-то строки новое правило. Правила подвинуться 🙂
Для вставки строки выполняем команду:

 iptables -I INPUT <номер строки> <остальная часть правила>  

Если после тестирования правила все нормально не забываем добавить это же правило и в конфиг iptables.

Удаляем правила из цепочек

Правила удалять достаточно просто. Иногда требуется удалить только одно правило, не перегружая весь конфиг iptables.
Например у нас в системе есть правило.

 iptables -A INPUT -p udp -i eth0 -s 192.168.10.0/24 -j DROP 

Удаляем это правило, используя команду iptables -D <правило>.

 iptables -D INPUT -p udp -i eth0 -s 192.168.10.0/24 -j DROP 

Еще пример с более сложный правилом для NAT

 #добавили правило
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 
#удалили 
iptables -t nat -D POSTROUTING -o eth1 -j MASQUERADE 

Еще одна возможность удалять правила, через его номер.
Смотрим номера к примеру цепочки INPUT

 iptables -L INPUT -n --line-numbers 

Первым столбцом идут номера правил.
Удаляем первое правило в цепочке INPUT

 iptables -D INPUT 1 

Аналогичным образом можно смотреть, а потом удалять правила в любой цепочке.

Статья еще не закончена и будет постоянно пополняться по мере накопления мной знаний по новым интересным возможностям (хитростям) Iptables

Запись опубликована в рубрике Firewall, iptables с метками , , , . Добавьте в закладки постоянную ссылку.

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

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