FAQ по IPTABLES — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
Строка 5: | Строка 5: | ||
КЛЮЧИ ДЛЯ РАБОТЫ С ЦЕПОЧКАМИ: | КЛЮЧИ ДЛЯ РАБОТЫ С ЦЕПОЧКАМИ: | ||
− | -A <цепочка> - добавление новой записи в конец цепочки | + | '''-A''' <цепочка> - добавление новой записи в конец цепочки |
− | -D <цепочка> - удалить правило | + | '''-D''' <цепочка> - удалить правило |
− | -I <цепочка> <номер> – вставляет правило над цепочкой с указаным номером | + | '''-I''' <цепочка> <номер> – вставляет правило над цепочкой с указаным номером |
− | -F <цепочка> - удалить все правила из цепочки | + | '''-F''' <цепочка> - удалить все правила из цепочки |
− | -R <цепочка> <номер> - заменяет определенные критерии цепочки с номером | + | '''-R''' <цепочка> <номер> - заменяет определенные критерии цепочки с номером |
− | -L <цепочка> - листинг правил цепочки | + | '''-L''' <цепочка> - листинг правил цепочки |
− | -P <цепочка> – задать действие по умолчанию, действие будет выполняться на все пакеты, которые не подошли по каким-либо параметрам в другие правила. | + | '''-P''' <цепочка> – задать действие по умолчанию, действие будет выполняться на все пакеты, которые не подошли по каким-либо параметрам в другие правила. |
БАЗОВЫЕ ЦЕПОЧКИ: | БАЗОВЫЕ ЦЕПОЧКИ: | ||
− | PREROUTING - правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне | + | '''PREROUTING''' - правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне |
− | INPUT - применяются к пакетам, которые предназначаются для самого хоста или для локального процесса, запущенного на данном хосте. То есть не являются транзитными | + | '''INPUT''' - применяются к пакетам, которые предназначаются для самого хоста или для локального процесса, запущенного на данном хосте. То есть не являются транзитными |
− | FORWARD - правила, которые применяются к транзитным пакетам, проходящими через хост, не задерживаясь | + | '''FORWARD''' - правила, которые применяются к транзитным пакетам, проходящими через хост, не задерживаясь |
− | OUTPUT - применяются к пакетам, которые сгенерированы самим хостом | + | '''OUTPUT''' - применяются к пакетам, которые сгенерированы самим хостом |
− | POSTROUTING - применяются к пакетам, которые должны покинуть сетевой интерфейс | + | '''POSTROUTING''' - применяются к пакетам, которые должны покинуть сетевой интерфейс |
ПАРАМЕТРЫ: | ПАРАМЕТРЫ: | ||
− | -p - протокол, можно использовать all,icmp,tcp,udp | + | '''-p''' - протокол, можно использовать all,icmp,tcp,udp |
− | -m - | + | '''-m''' - |
− | -s - ip адрес/хост источника | + | '''-s''' - ip адрес/хост источника |
− | -d - ip адрес/хост назначения | + | '''-d''' - ip адрес/хост назначения |
− | -i - интерфейс на который пришел пакет | + | '''-i''' - интерфейс на который пришел пакет |
− | -o - интерфейс с которого уйдет пакет | + | '''-o''' - интерфейс с которого уйдет пакет |
− | –-sport - порт источника | + | '''–-sport''' - порт источника |
− | -–dport - порт назначения | + | '''-–dport''' - порт назначения |
ДЕЙСТВИЯ: | ДЕЙСТВИЯ: | ||
− | ACCEPT - разрешить пакеты | + | '''ACCEPT''' - разрешить пакеты |
− | REJECT - блокировать пакеты с сообщением об отказе | + | '''REJECT''' - блокировать пакеты с сообщением об отказе |
− | DROP - блокировать пакеты(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне) | + | '''DROP''' - блокировать пакеты(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне) |
ТАБЛИЦЫ: | ТАБЛИЦЫ: | ||
− | filter - таблица, выполняющая функции фильтрации пакетов по определённым параметрам. В большинстве случаев используется она | + | '''filter''' - таблица, выполняющая функции фильтрации пакетов по определённым параметрам. В большинстве случаев используется она |
− | raw - iptables рассматривает каждый пакет как часть потока и может определить какому соединению принадлежит пакет. В таблице raw настраиваются исключения, которые рассматривают пакет как отдельную сущность | + | '''raw''' - iptables рассматривает каждый пакет как часть потока и может определить какому соединению принадлежит пакет. В таблице raw настраиваются исключения, которые рассматривают пакет как отдельную сущность |
− | nat - таблица, предназначенная целиком по функции трансляции сетевых адресов | + | '''nat''' - таблица, предназначенная целиком по функции трансляции сетевых адресов |
− | mangle - таблица, предназначенная для изменения различных заголовков пакета. Можно, например, изменить TTL, количество hop'ов и другое | + | '''mangle''' - таблица, предназначенная для изменения различных заголовков пакета. Можно, например, изменить TTL, количество hop'ов и другое |
− | security - используется для назначения пакетам или соединениям неких меток, которые в дальнейшем может интерпретировать SElinux | + | '''security''' - используется для назначения пакетам или соединениям неких меток, которые в дальнейшем может интерпретировать SElinux |
iptables -L - покажет вам какие правила у вас сейчас находятся в памяти<br/> | iptables -L - покажет вам какие правила у вас сейчас находятся в памяти<br/> |
Версия 10:19, 21 января 2021
СИНТАКСИС:
iptables [-t ТАБЛИЦА] -A ЦЕПОЧКА ПАРАМЕТРЫ -j ДЕЙСТВИЕ
КЛЮЧИ ДЛЯ РАБОТЫ С ЦЕПОЧКАМИ:
-A <цепочка> - добавление новой записи в конец цепочки -D <цепочка> - удалить правило -I <цепочка> <номер> – вставляет правило над цепочкой с указаным номером -F <цепочка> - удалить все правила из цепочки -R <цепочка> <номер> - заменяет определенные критерии цепочки с номером -L <цепочка> - листинг правил цепочки -P <цепочка> – задать действие по умолчанию, действие будет выполняться на все пакеты, которые не подошли по каким-либо параметрам в другие правила.
БАЗОВЫЕ ЦЕПОЧКИ:
PREROUTING - правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне INPUT - применяются к пакетам, которые предназначаются для самого хоста или для локального процесса, запущенного на данном хосте. То есть не являются транзитными FORWARD - правила, которые применяются к транзитным пакетам, проходящими через хост, не задерживаясь OUTPUT - применяются к пакетам, которые сгенерированы самим хостом POSTROUTING - применяются к пакетам, которые должны покинуть сетевой интерфейс
ПАРАМЕТРЫ:
-p - протокол, можно использовать all,icmp,tcp,udp -m - -s - ip адрес/хост источника -d - ip адрес/хост назначения -i - интерфейс на который пришел пакет -o - интерфейс с которого уйдет пакет –-sport - порт источника -–dport - порт назначения
ДЕЙСТВИЯ:
ACCEPT - разрешить пакеты REJECT - блокировать пакеты с сообщением об отказе DROP - блокировать пакеты(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне)
ТАБЛИЦЫ:
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 iptables
iptables -L -n -v --line-numbers - параметр -v показывает детальную статистику по правилам, -n не резолвит ипишки
iptables -F - поностью очищаем список со всеми правилами
iptables -F -t 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/sysctl.conf
net.ipv4.ip_forward=1
Запуск iptables при старте системы
chkconfig iptables on
Если после перезагрузки правила не загрузились - надо проверить, откуда их читает сервис
/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