Назад | Перейти на главную страницу

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

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

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

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

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

Если кратко ответить на ваш вопрос, то нет: не будет никаких «оставшихся» правил после очистки каждой таблицы. Однако в интересах полноты вы можете настроить политику для встроенного 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

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

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

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

Когда мне нужно отключить брандмауэр, происходит что-то вроде этого:

  • iptables-save > iptables.bak
  • service iptables stop (я в шляпе)

Резервное копирование конфигурации в iptables_backup.conf и очистка всех правил.

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

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

iptables-restore < iptables_backup.conf

Вы можете просто разгрузить 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 производит красивый пустой результат :)

Это можно сделать одной или двумя командами:

 $ 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         

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

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} ./

Я думаю, это может быть полезно для справок в будущем. Думал, что поделюсь.

Это сработало для меня (на Ubuntu 18.04):

sudo bash -c "ufw -f reset && iptables -F && iptables -X && ufw allow 22 && ufw -f enable"

Он сбрасывает (и отключает) ufw, а затем сбрасывает iptables, очищая и удаляя все цепочки. Затем он снова включает ufw, но не раньше, чем разрешит порт 22 для удаленного доступа. Две команды, требующие подтверждения от пользователя, являются «принудительными», поэтому ввод не требуется. Мне удалось запустить это через активное соединение SSH.

(источник)

Вот как я удаляю все правила DROP:

iptables -S |grep DROP| sed 's/-A/-D/' >rules  # -A becomes -D: delete
nano rules  # check that everything is correct
cat rules | while read line; do iptables $line; done
iptables-save

Готово!