iptables Linux

Содержание
Введение
Проверить версию
-L: Проверить статус
-F: Очистить все правила
-save: Сохранить конфигурацию
-restore: Восстановить конфигурацию из файла
-A: Добавить правило
Разрешить доступ по ssh
Редактирование файла с конфигурацией
Похожие статьи

Введение

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 Mar 29 2024 /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 Mar 29 05:30:15 2024 *filter :INPUT ACCEPT [336:29428] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [579:44284] COMMIT # Completed on Fri Mar 29 05:30:15 2024

В эти файлы можно вносить изменения. Перед этим желательно восстановить конфигурацию из какого-то другого файла.

iptables-restore < fwoff
vi fwon

# Generated by iptables-save v1.4.21 on Fri Mar 29 05:30:15 2024 *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 Mar 29 05:30:15 2024

Последнее правило запрещает всё что не разрешено явно.

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