Очистка и сброс iptables в Debian

Очистка и сброс iptables в Debian

Чтобы очистить все правила в iptables я использую это

#!/bin/bash
echo "clearing iptables ... "
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

Это работает до тех пор, пока в iptables больше нет записей, что проверяется с помощью

sudo iptables -L

или

sudo iptables -S

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

Похоже, что очищенные iptables все еще активны после их очистки!

До сих пор единственным способом избавиться от этих правил для меня была перезагрузка системы, что не очень-то элегантно.

ВДебианПохоже, iptables не работает как служба, поэтому запуск или остановка этой службы не работает.

Как полностью очистить или сбросить настройки iptables, чтобы ранее определенные правила были деактивированы?

решение1

  1. Очистка правил iptables не влияет на уже установленные соединения, которые были перенаправлены с помощью DNAT. Это связано, поскольку запись conntrack для пакетов UDP содержит информацию о перенаправлении, которая используется помимо правил iptables.

  2. Проверьте существующие записи conntrack с помощью conntrack -Lи отслеживайте события conntrack с помощью conntrack -Eкоманды.

  3. Используйте conntrack -Fкоманду для очистки записей conntrack. Новые пакеты UDP больше не будут перенаправляться.

  4. Для управления правилами iptables как службой используйте пакеты netfilter-persistentи iptables-persistent.

  5. Лучше использовать команды iptables-save/ iptables-restoreвместо ручного запуска iptables. Это более безопасно и атомарно.

  6. Для управления правилами iptables на удаленном хосте используйте команду iptables-apply, которая позволяет откатить набор правил, если он не был подтвержден.

решение2

sudo ufw status verbose; sudo iptables -L; 

Может быть, запущен ufw? Попробуйте остановить.

Не могли бы вы рассказать немного больше о вашей системе, сети и о том, какой трафик все еще маршрутизируется?

Допустимо 1-2 примера, включая начальное правило брандмауэра.

РЕДАКТИРОВАТЬ:

Проверено некоторыми из моих скриптов... Также сбрасываю цепи.

sudo iptables -F INPUT
sudo iptables -F FORWARD 
sudo iptables -F OUTPUT

решение3

Ваш скрипт для очистки правил iptables достаточен для очистки всех правил и установки политики по умолчанию на ACCEPT. Это фактически отключает брандмауэр, поскольку правил нет и все разрешено.

Мы знаем из ваших комментариев, что вы отправляете пакеты UDP. Вы можете почувствовать, что старые правила все еще активны некоторое время, особенно когда через ваш брандмауэр идет непрерывный поток пакетов UDP. Это в основном потому, что UDP не имеет способа закрыть соединение, и поэтому брандмауэр не знает, когда текущий активный поток завершен. Единственный способ — использовать тайм-аут простоя, чтобы сбросить активные «соединения», когда больше нет видимых пакетов.

У вас есть два варианта:

  1. Подождите некоторое время, прежде чем повторить попытку. Это требует остановки всех текущих активных "подключений". Вы можете найти тайм-аут UDP в /proc/sys/net/netfilter/nf_conntrack_udp_timeout.
  2. Используйте conntrackинструмент для удаления существующих «соединений» вручную.

Обратите внимание, что брандмауэр Linux отслеживает активные сокеты для TCP/UDP, даже если UDP является протоколом без установления соединения.

Связанный контент