|
|
Строка 1: |
Строка 1: |
− | Схема обработки правил iptables<br>
| |
− | [[Файл:iptables01.jpg]]
| |
| | | |
− | СИНТАКСИС:
| |
− |
| |
− | iptables [-t ТАБЛИЦА] -A ЦЕПОЧКА ПАРАМЕТРЫ [опция]ДЕЙСТВИЕ
| |
− |
| |
− |
| |
− | ТАБЛИЦЫ:
| |
− | '''filter''' - таблица, выполняющая функции фильтрации пакетов по определённым параметрам. В большинстве случаев используется она
| |
− | '''raw''' - iptables рассматривает каждый пакет как часть потока и может определить какому соединению принадлежит пакет. В таблице raw настраиваются исключения, которые рассматривают пакет как отдельную сущность
| |
− | '''nat''' - таблица, предназначенная целиком по функции трансляции сетевых адресов
| |
− | '''mangle''' - таблица, предназначенная для изменения различных заголовков пакета. Можно, например, изменить TTL, количество hop'ов и другое
| |
− | '''security''' - используется для назначения пакетам или соединениям неких меток, которые в дальнейшем может интерпретировать SElinux
| |
− |
| |
− |
| |
− | КЛЮЧИ ДЛЯ РАБОТЫ С ЦЕПОЧКАМИ:
| |
− | '''-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''' - порт назначения
| |
− |
| |
− |
| |
− | ОПЦИИ ДЛЯ ДЕЙСТВИЙ:
| |
− | '''-j''' - применяет одно из действий accept, drop, reject и другие
| |
− | '''-g''' - переходит к другой цепочке правил
| |
− |
| |
− |
| |
− | ДЕЙСТВИЯ:
| |
− | '''ACCEPT''' - разрешить прохождение пакета
| |
− | '''DROP''' - отбросить пакет не сообщая причины(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне)
| |
− | '''REJECT''' - выбрасывает пакет и возвращает причину в виде ошибки, например: icmp unreachable
| |
− | '''QUEUE''' - отправляет пакет за пределы логики iptables, в стороннее приложение. Это может понадобиться, когда нужно обработать пакет в рамках другого процесса в другой программе
| |
− | '''RETURN''' - остановить обработку правила и вернуться на одно правило назад. Это действие подобно break'у в языке программирования
| |
− | '''LOG''' - просто делает запись в логе, если пакет соответствует критериям правила;
| |
− | '''DNAT''' - правило используется в NAT-ировании и меняет Destination IP пакета. Используется только в таблице nat и цепочках OUTPUT и PREROUTING
| |
− | '''SNAT''' - правило используется в NAT-ировании и меняет Source IP пакета. Используется только в таблице nat и цепочке POSTROUTING
| |
− | '''MASQUERADE''' - делает то же самое что SNAT, только применяется на выходном интерфейсе, когда IP адрес может меняться, например, когда назначается по DHCP
| |
− |
| |
− |
| |
− | iptables -L - покажет какие правила находятся в памяти<br/>
| |
− | iptables -L -t nat - покажет правила таблицы nat<br/>
| |
− | iptables -L –line-numbers - узнать номер правила<br/>
| |
− | iptables -D INPUT 5 - удалить правило номер 5 из цепочки INPUT<br/>
| |
− | iptables -L -n -v --line-numbers - параметр -v показывает детальную статистику по правилам, -n не резолвит ипишки<br/>
| |
− | iptables -F - полностью очищаем список со всеми правилами<br/>
| |
− | iptables -F -t nat - удаляем правила таблицы nat<br/>
| |
− |
| |
− |
| |
− | Параметры конфигурации сервиса <code bash>/etc/sysconfig/iptables-config</code>
| |
− |
| |
− | '''IPTABLES_SAVE_ON_STOP=«yes»''' - это заставит сервис iptables сохранять свою конфигурацию в файл при выключении файрвола или завершении работы, чтобы не пришлось конфигурировать все повторно<br/>
| |
− | '''IPTABLES_STATUS_LINENUMBERS=«yes»''' - по команде /etc/init.d/iptables status отобразит номера правил<br/>
| |
− | '''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
| |