FAQ по IPTABLES

Материал из megapuper
Перейти к: навигация, поиск

СИНТАКСИС:

iptables [-t ТАБЛИЦА] -A ЦЕПОЧКА ПАРАМЕТРЫ -j ДЕЙСТВИЕ


КЛЮЧИ ДЛЯ РАБОТЫ С ЦЕПОЧКАМИ:

-A <цепочка> - добавление правила к цепочке(в самое начало)
-D <цепочка> - удалить правило из цепочки
-I <цепочка> <номер> – вставить правило в цепочку с указаным номером
-F <цепочка> - удалить все правила из цепочки, если цепочка не указана, удаляются все правила
-L <цепочка> - листинг правил цепочки
-N <цепочка> - создание новой пользовательской цепочки
-P <цепочка> – задать действие по умолчанию, действие будет выполняться на все пакеты, которые не подошли по каким-либо параметрам в другие правила.
-R <цепочка> <номер> - заменяет определенные критерии цепочки с номером
-Z <цепочка> - обнуляет все счётчики пакетов и байтов в цепочке


БАЗОВЫЕ ЦЕПОЧКИ:

PREROUTING - правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне
INPUT - применяются к пакетам, которые предназначаются для самого хоста или для локального процесса, запущенного на данном хосте. То есть не являются транзитными
FORWARD - правила, которые применяются к транзитным пакетам, проходящими через хост, не задерживаясь
OUTPUT - применяются к пакетам, которые сгенерированы самим хостом
POSTROUTING - применяются к пакетам, которые должны покинуть сетевой интерфейс


ПАРАМЕТРЫ:

-p - протокол, можно использовать all,icmp,tcp,udp
-m - включает дополнительные модули, явно задающимися данным ключем (например -m limit --limit 3/min - установит лимит на количество пакетов в минуту)
-s - ip адрес/хост источника
-d - ip адрес/хост назначения
-i - интерфейс на который пришел пакет
-o - интерфейс с которого уйдет пакет
–-sport - порт источника
-–dport - порт назначения


ДЕЙСТВИЯ:

ACCEPT - разрешить прохождение пакета
DROP - отбросить пакет не сообщая причины(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне) 
REJECT - выбрасывает пакет и возвращает причину в виде ошибки, например: icmp unreachable
QUEUE - отправляет пакет за пределы логики iptables, в стороннее приложение. Это может понадобиться, когда нужно обработать пакет в рамках другого процесса в другой программе
RETURN - остановить обработку правила и вернуться на одно правило назад. Это действие подобно break'у в языке программирования
LOG - просто делает запись в логе, если пакет соответствует критериям правила;


ТАБЛИЦЫ:

filter - таблица, выполняющая функции фильтрации пакетов по определённым параметрам. В большинстве случаев используется она
raw - iptables рассматривает каждый пакет как часть потока и может определить какому соединению принадлежит пакет. В таблице raw настраиваются исключения, которые рассматривают пакет как отдельную сущность
nat - таблица, предназначенная целиком по функции трансляции сетевых адресов
mangle - таблица, предназначенная для изменения различных заголовков пакета. Можно, например, изменить TTL, количество hop'ов и другое
security - используется для назначения пакетам или соединениям неких меток, которые в дальнейшем может интерпретировать SElinux

iptables -L - покажет какие правила находятся в памяти
iptables -L -t nat - покажет правила таблицы nat
iptables -L –line-numbers - узнать номер правила
iptables -D INPUT 5 - удалить правило номер 5 из цепочки INPUT
iptables -L -n -v --line-numbers - параметр -v показывает детальную статистику по правилам, -n не резолвит ипишки
iptables -F - поностью очищаем список со всеми правилами
iptables -F -t nat - удаляем правила табилцы nat


Параметры конфигурации сервиса /etc/sysconfig/iptables-config

IPTABLES_SAVE_ON_STOP=«yes» - это заставит сервис iptables сохранять свою конфигурацию в файл при выключении файрвола или завершении работы, чтобы не пришлось конфигурировать все повторно
IPTABLES_STATUS_LINENUMBERS=«yes» - по команде /etc/init.d/iptables status отобразит номера правил
IPTABLES_STATUS_VERBOSE=«yes» - по команде /etc/init.d/iptables status покажет бегущие байтики и пакетики


Если после перезагрузки правила не загрузились - надо проверить, откуда их читает сервис

/etc/init.d/iptables → параметр IPTABLES_DATA 


Сохранить правила(CentOS)

iptables-save > /etc/sysconfig/iptables 


Сохранить правила, если файл уже создан:

/etc/init.d/iptables-save


Восстановить правила из конфига(если чёто делали-делали и похерили)

iptables-restore < /etc/sysconfig/iptables 

Сохранить правила(Debian)

iptables-save > /etc/iptables.conf

Сбросить правила и не потерять коннект

iptables -A INPUT ACCEPT
iptables -F
iptables -t nat -F


ПРИМЕРЫ:

Разрешаем прохождение любого трафика по loopback

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT 


Разрешаем пинги

iptables -A INPUT -p icmp -m icmp -i $INET_IFACE –icmp-type source-quench -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp -o $INET_IFACE –icmp-type source-quench -j ACCEPT 


Блокируем все пакеты, которые не подходят ни под одно описанное выше правило, со статусом «узел запрещен». Фактически «дефолтное» правило - запретить всё остальное

iptables -A INPUT -j REJECT –-reject-with icmp-host-prohibited 


Блокируем все входящие пакеты с ip адреса 111.111.111.111

iptables -A INPUT -s 111.111.111.111 -j DROP 


Блокируем пакеты со всех адресов, кроме 111.111.111.111

iptables -A INPUT ! -s 111.111.111.111 -j DROP 


Блокируем подсеть по протоколу tcp на все порты

iptables -A INPUT -p tcp -s 111.111.111.0/255.255.255.0 -j DROP 


Блокируем входящие пакеты для диапазона ip адресов c 192.168.0.8 по 192.168.0.25

iptables -I INPUT -m iprange –src-range 192.168.0.8-192.168.0.25 -j DROP 


Блокируем весь входящий трафик на 80 порт

iptables -A INPUT -p tcp –-dport 80 -j DROP 


Сбрасываем соединения, количество которых превышает 10 штук на порт 80

iptables -A INPUT -p tcp –-dport 80 -m connlimit –connlimit-above 10 -j REJECT 


Блокируем домен vk.com

iptables -A INPUT -s vk.com -j DROP # блокируем входящие пакеты от домена vk.com
iptables -A OUTPUT -d vk.com -j DROP # блокируем исходящие пакеты к домену vk.com 


Изменение конфига в реальном времени без стирания цепочек и таблиц(2-номер правила)

iptables -R INPUT 2 -i eth1 -p tcp –-dport 21 -j ACCEPT 


Включение ната для локальной сети

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -j MASQUERADE


Проброс порта ssh на хост в локалке

iptables -t nat -A PREROUTING -p tcp -m tcp -d 188.9.31.168 --dport 2222 -j DNAT --to-destination 192.168.0.10:22


Снимаем бан с IP 111.111.111.111

iptables -D INPUT -s 111.111.111.111 -j DROP 


Удаляем бан из цепочки fail2ban

iptables -D fail2ban-ASTERISK -s 109.195.52.173 -j DROP 

Можно прописать алиасы в файл .bashrc(или в .bash_aliases) для удобства:

alias ban='iptables -I INPUT -j DROP -s'
alias unban='iptables -D INPUT -j DROP -s'

После чего можно гораздо быстрее банить ip адрес командой: ban 111.111.111.111 и снимать бан командой: unban 111.111.111.111