лучший способ очистить все правила iptables


83

В настоящее время у меня есть этот фрагмент:

# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X

Есть ли вероятность, что какое-то непроницаемое правило останется в силе после запуска этого?

Идея состоит в том, чтобы иметь полностью чистый конфиг iptables, который можно легко заменить новым набором правил (не обращайте внимания на параметры routs / ifconfig).

Ответы:


107

Чтобы ответить на ваш вопрос кратко, нет: не будет никаких «остатков» правил после очистки каждой таблицы. Однако в целях тщательности вы можете также установить политику для встроенного INPUTи FORWARDцепочек ACCEPT:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

Очистить правила ip6tables:

ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X

... и это должно сделать это. iptables -nvLдолжен произвести этот (или очень похожий) вывод:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

9
Вы забыли о «сыром»: iptables -t raw -F iptables -t raw -X
kK-Storm

there would not be any "leftover" rules after flushing every tableОП не очищает каждый стол. Как и вы. Вот как это выглядит, если вы хотите быть тщательным . И вы можете добавить iptables -t "$table" -Z. Обратите внимание, что таким образом вы жестко программируете список таблиц и их цепочек. Поэтому я бы серьезно подумал о решении сохранить-восстановить . Или вы можете просто выгрузить iptables .
x-юрий

23

Это правильно полностью сбросит вашу систему iptables в очень простое состояние:

iptables-save | awk '/^[*]/ { print $1 } 
                     /^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
                     /COMMIT/ { print $0; }' | iptables-restore

Все политики будут сброшены на ACCEPT, а также сброшены все таблицы, используемые в текущий момент. Все цепочки, кроме встроенных цепочек, больше не будут существовать.


1
Аккуратный хак! Я бы не зависел от этого, поскольку всегда возможно, что незначительные изменения в формате сохранения / восстановления могут сломать его. Вероятно, лучше всего придерживаться API, предоставляемого iptablesинструментом, IMO.
Стивен Понедельник

3
Я передумал: формат данных вряд ли изменится больше, так как он используется так широко. +1.
Стивен Понедельник

2
+1, интересный хак
Сэм Халике

Этому удалось избавиться от оставшихся цепей UFW, чего-то, что принятый ответ не сделал.
10

Это незначительная деталь, но вы можете заменить первое print $1с print $0быть последовательным :)
х-Yuri

2

Всякий раз, когда мне нужен отключенный брандмауэр, это что-то вроде этого:

  • iptables-save > iptables.bak
  • service iptables stop (я на федоре)

1

Вы можете просто выгрузить iptablesмодули из ядра:

modprobe -r iptable_raw iptable_mangle iptable_security iptable_nat iptable_filter

UPD К сожалению, слишком хорошо, чтобы быть правдой. Пока в таблице есть правило или цепочка, определенная пользователем, счетчик ссылок соответствующего модуля равен 1 и modprobe -rне работает. Вы можете удалить правила и пользовательские цепочки следующим образом:

echo $'*raw\nCOMMIT\n*mangle\nCOMMIT\n*security\nCOMMIT\n*nat\nCOMMIT\n*filter\nCOMMIT' | iptables-restore

или же:

iptables-save | awk '/^[*]/ { print $1 "\nCOMMIT" }' | iptables-restore

Кроме того, вы можете захотеть выгрузить модули таким образом (без жесткого кодирования имен модулей):

lsmod | egrep ^iptable_ | awk '{print $1}' | xargs -rd\\n modprobe -r

С другой стороны, после этого iptables-saveвыдается хороший пустой вывод :)


Это может быть молот здесь. Спасибо.
Конрад Гаевский

0

Это можно сделать с помощью 1 или 2 команд:

 $ sudo iptables-save > iptables.bak
 $ sudo iptables -F

Результат:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 3138 packets, 5567K bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3602 packets, 6547K bytes)
pkts bytes target     prot opt in     out     source               destination         

5
Если политики по умолчанию в настоящее время установлены на DROP, это быстрый способ заблокировать сервер. Так что нет, это не командный процесс 1 или 2. Вы должны сначала установить ПРИНЯТЬ, если это не в настоящее время.
RyanH

0

Недавно мне пришлось заблокировать все соединения.

iptables-policy INPUT DROP
iptables-policy OUTPUT DROP
iptables-policy FORWARD DROP

Что касается сохранения, я бы порекомендовал следующее

Ubuntu:

/etc/init.d/iptables save
/sbin/service iptables save

RedHat / CentOS:

/etc/init.d/iptables save
/sbin/iptables-save

В дополнение к резервному копированию всех текущих правил UFW, которые я использовал в прошлом

cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION> 
cp /lib/ufw/{user.rules,user6.rules} ./

Я думаю, что это может быть полезно для дальнейшего использования. Мысль я бы поделился.


0

Создайте резервную копию конфигурации в iptables_backup.conf и очистите все правила.

iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore

Чтобы восстановить предыдущую конфигурацию:

iptables-restore < iptables_backup.conf
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.