iptables Linux
Введение
iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter
для ядер
Linux
, начиная с версии 2.4. До этого в основном пользовались ipchains и ipfw.
Для использования утилиты iptables требуются привилегии суперпользователя (root).
Проверить версию
Чтобы проверить статус iptablesd выполните
iptables -V
В новых дистрибутивах, например, Rocky или CentOS 8 результат будет содержать nf_tables
iptables v1.8.4 (nf_tables)
В старых дистрибутивах, например, CentOS 7 результат будет содержать legacy версию
iptables v1.4.21
Также изучить тип iptables можно с помощью
ls -al /usr/sbin/iptables
Пример для nft
lrwxrwxrwx. 1 root root 17 May 19 2021 /usr/sbin/iptables -> xtables-nft-multi
Пример для устаревшей (legacy) версии
lrwxrwxrwx. 1 root root 17 Jan 24 2025 /usr/sbin/iptables -> xtables-multi
Проверить статус
Чтобы проверить статус iptables выполните
iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Результат выше получен при выключенном
firewall
который является надстройкой над iptables и добавляет большое количество нужных ему записей.
Выключить firewall можно командой systemctl stop firewalld. Подробнее
здесь
Сохранить конфигурацию
Чтобы сохранить текущую конфигурацию iptables выполните
iptables-save > fwoff
fwoff означает firewall off - то есть такая конфигурация, при которой мы не применяем никаких правил.
Добавить правило
Чтобы добавить к текущей конфигурации iptables новое правило выполните
iptables -A
Например чтобы добавить правило на входящий трафик на локальный интерфейс выполните
iptables -A INPUT -i lo -j ACCEPT
Использована команда
--append -A chain Append to chain
C опциями:
[!] --in-interface -i input name[+] network interface name ([+] for wildcard) --jump -j target target for rule (may load target extension)
Проверить результат
iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Явно задать разрешение на получение ответного трафика
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
--match -m match extended match (may load extension)
conntrack
означает connection tracker - этот модуль пришёл на смену модулю state начиная с версии ядра
3.7
подробнее -
здесь
Определить версию своего ядра можно командой uname -r подробнее
здесь
iptables -L
Chain INPUT (policy ACCEPT) Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Разрешить доступ по ssh
Чтобы разрешить доступ по ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Конфиграцию с созданными правилами можно сохранить в файл
iptables-save > fwon
Запретить всё что не разрешено
Если созданы какие-либо разрешающие правила от них нет толку пока нет запрещающих.
Чтобы запретить всё, кроме того что явно разрешено выполните
iptables -A INPUT -j DROP
Либо внесите измнения в файл конфигурации вручную и загрузите iptables из него - как это сделать вы узнаете в следующем парагарафе.
Редактирование файла с конфигурацией
С помощью iptables-save и iptables-restore можно сохранять и восстанавливать
конфигурации.
Выглядят файлы с конфигурацией следующим оригинальным образом
vi fwoff
# Generated by iptables-save v1.4.21 on Fri Jan 24 06:32:26 2025 *filter :INPUT ACCEPT [336:29428] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [579:44284] COMMIT # Completed on Fri Jan 24 06:32:26 2025
В эти файлы можно вносить изменения. Перед этим желательно восстановить конфигурацию из какого-то другого файла.
iptables-restore < fwoff
vi fwon
# Generated by iptables-save v1.4.21 on Fri Jan 24 06:32:26 2025 *filter :INPUT ACCEPT [1:169] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [1060:80724] -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -j DROP COMMIT # Completed on Fri Jan 24 06:32:26 2025
Последнее правило запрещает всё что не разрешено явно.
iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh DROP all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
iptables | |
conntrack | |
Настройка сети | |
Linux | |
Компьютерные сети | |
ip | |
SCP: обмен файлами; | |
SSH: удалённый доступ | |
Сокеты в C |