Удалить правило iptables можно по его номеру или ориентируясь на содержание сохранив предварительно список правил в файл и загрузив обратно данные из файла после редактирования.
Цепочки iptables, просмотр правил
iptables представляет собой системный сетевой фильтр состоящий из нескольких цепочек, правил и политики фильтрации. Схематично структура выглядит так:
Чтобы просмотреть список используемых системой правил нужно выполнить команду iptables-save. Она сохраняет все изменения в файл если вывод перенаправить, по умолчанию выводит правила в терминал.
iptables-save
Как удалить одно правило iptables по номеру строки
Можно удалить одно правило — например, по номеру строки
Так выводится пронумерованный список правил:
iptables -L --line-numbers
Chain INPUT (policy ACCEPT) num target prot opt source destination 1 f2b-sshd tcp -- anywhere anywhere multiport dports ssh 2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain 3 ACCEPT udp -- anywhere anywhere udp dpt:domain 4 f2b-sshd tcp -- anywhere anywhere multiport dports ssh 5 ispmgr_deny_ip all -- anywhere anywhere 6 ispmgr_allow_ip all -- anywhere anywhere 7 ispmgr_allow_sub all -- anywhere anywhere 8 ispmgr_deny_sub all -- anywhere anywhere 9 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED 10 ACCEPT tcp -- anywhere anywhere ctstate NEW multiport dports heathview:35999 11 ACCEPT tcp -- anywhere anywhere ctstate NEW multiport dports ftp-data:ssh,smtp,http,https,pop3,imap,urd,submission,imaps,pop3s,domain,mysql,postgres,44477 12 ACCEPT tcp -- anywhere anywhere ctstate NEW multiport dports vlsi-lm 13 ACCEPT udp -- anywhere anywhere ctstate NEW multiport dports domain 14 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 15 ACCEPT icmp -- anywhere anywhere 16 ACCEPT all -- anywhere anywhere 17 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
Удалим одно из них с указанием таблицы, и цепочки (iptables -t TABLE -D INPUT номер_строки)
Возьмем девятое правило из списка:
iptables -t nat -D INPUT 9
Также можно удалять правила применяя ключ -D без номера, приводя полное правило:
Команда приведенная ниже разрешит обращения по перечисленным портам
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,25,80,443 -j ACCEPT
С ключом -D правило будет удалено
iptables -D INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,25,80,443 -j ACCEPT
Каждый раз необходимо выполнять iptables-save чтобы проверить результат.
Если нужно отредактировать несколько правил или много правил, то проще сначала сохранить все правила в файл. Отредактировать его, затем загрузить их вновь.
iptables-save > /tmp/iptabeles.txt
iptables-restore < /tmp/iptabeles.txt
Как сбросить все правила iptables
В iptables удалить все правила можно удалить выполнив в консоли команду iptables с флагом -F (flush)
iptables -F
Перед выполнением команды обязательно нужно выполнить iptables-save и убедиться в том, что политика для входящих пакетов на INPUT установлена в ACCEPT, в противном случае можно потерять доступ к серверу.
Перед очисткой правил всегда нужно их просмотреть и сохранить в файл.
Все правила и политики можно вывести такой командой
iptables -S
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT
В примере выше политики для INPUT, FORWARD и OUTPUT установлены в состояние ACCEPT. Значит после сброса правил iptables -F доступ к серверу извне потерян не будет.
С INPUT DENY было бы иначе. При такой конфигурации политикой запрещается доступ, за счет правил разрешается, при сбросе правил остается только запрет.
Если нам интересны правила для определенной цепочки нужно использовать ключ -L и название цепочки. Их можно сохранить отдельно
iptables -L INPUT
Читайте про сохранение правил iptables после перезагрузки