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
Разрешить доступ к порту только для одного IP-адреса:
iptables -A INPUT -p tcp —dport 9100 -s 1.2.3.4 -j ACCEPT (Сначала создаём правило ACCEPT)
iptables -A INPUT -p tcp —dport 9100 -j DROP (Закрываем порт для всех)
Удалить конкретное правило (повторить его полностью):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
Сохранить все правила можно с помощью утилиты iptables-persistent
apt install iptables-persistent
netfilter-persistent save