iptables
— это встроенный в ядро Linux инструмент для настройки правил фильтрации сетевого трафика. Он работает с подсистемой netfilter и позволяет управлять входящими, исходящими и пересылаемыми пакетами. Используется для настройки файрволов, NAT и других сетевых правил. Это низкоуровневый инструмент, и ошибки могут привести к потере доступа к системе.
Синтаксис:iptables [ДЕЙСТВИЕ С ПРАВИЛОМ] [ЦЕПОЧКА] [УСЛОВИЯ] [ДЕЙСТВИЕ С ПАКЕТОМ]
Действие с правилом
Элемент | Назначение |
---|---|
-A [цепочка] | добавить правило в конец цепочки |
-I [цепочка] [N] | вставить правило в позицию N (или в начало) |
-D [цепочка] [N] | удалить правило по номеру |
-R [цепочка] [N] | заменить правило в позиции N |
-L [цепочка] | показать текущие правила |
-F [цепочка] | очистить цепочку |
Цепочки
INPUT — входящие пакеты |
OUTPUT — исходящие |
FORWARD — пересылаемые |
Условия
-p [протокол] | Протокол: tcp, udp, icmp |
–dport [порт] | Порт назначения |
–sport [порт] | Порт источника |
-s [IP/подсеть] | Источник IP или подсеть |
-d [IP/подсеть] | Назначение IP |
-i [интерфейс] | Входящий интерфейс |
-o [интерфейс] | Исходящий интерфейс |
-m state –state … | Фильтрация по состоянию соединения |
Действие с пакетом
-j ACCEPT — разрешить |
-j DROP — отбросить |
-j REJECT — отклонить с ответом |
-j LOG — залогировать |
-j RETURN — выйти из цепочки |
Примеры
Разрешить SSH (порт 22) из любого источника:iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Разрешить HTTP только с интерфейса eth0
:iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
Разрешить входящие пакеты, относящиеся к уже установленным соединениям:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Удалить конкретное правило (повторить его полностью):iptables -D INPUT -p tcp --dport 22 -j ACCEPT
Удалить правило по номеру (сначала посмотреть список):iptables -L INPUT --line-numbers
iptables -D INPUT 3
Заменить правило №2 в цепочке INPUT на разрешение HTTPS:iptables -R INPUT 2 -p tcp --dport 443 -j ACCEPT
Разрешить ICMP (ping) только через интерфейс eth1:
iptables -A INPUT -i eth1 -p icmp -j ACCEPT
Запретить весь входящий трафик на eth1
:iptables -A INPUT -i eth1 -j DROP