Почему правила iptables исчезают при перезапуске моей системы Debian?

48

Я добавляю это правило:

sudo iptables -t nat -A OUTPUT -d a.b.c.d -p tcp \
       --dport 1723 -j DNAT --to-destination a.b.c.d:10000
  1. При перезагрузке компьютера правила удаляются. Почему?
  2. Что я могу сделать, чтобы правила сохранялись?
Jhonathan
источник

Ответы:

45

В iptables нет опции, которая сделает ваши правила постоянными. Но вы можете использовать iptables-saveи iptables-restoreдля выполнения своей задачи.

Сначала добавьте правило iptable, используя указанную вами команду.

Затем сохраните правила iptables в некоторый файл, например, /etc/iptables.confиспользуя следующую команду:

$  iptables-save > /etc/iptables.conf

Добавьте следующую команду, /etc/rc.localчтобы перезагрузить правила при каждой перезагрузке.

$  iptables-restore < /etc/iptables.conf
pradeepchhetri
источник
15
На Debian есть iptables-persistentпакет, который сделает это.
Багамат
7
Это довольно плохая идея, rc.localтак как между запуском сервисов и политикой брандмауэра будет разрыв в открытом окне. Я предпочитаю использовать pre-up крюк для петлевого интерфейса в , /etc/network/interfacesчтобы преодолеть это.
Пой
@poige: я согласен на 100%, rc.localможет иметь ожидаемый эффект, но в этой ситуации это является препятствием.
Дж. М. Беккер
3
@bahamat: установка этого пакета - лучшее решение, оно заслуживает отдельного ответа.
Дж. М. Беккер
1
@TechZilla: Готово.
bahamat
53

(Потому что было предложено сделать это своим собственным ответом ...)

На Debian установить iptables-persistent.

Пакет автоматически загрузится /etc/iptables/rulesдля вас во время загрузки.

Каждый раз, когда вы изменяете свои правила, запускайте их, /sbin/iptables-save > /etc/iptables/rulesчтобы сохранить. Вы также можете добавить это к последовательности выключения, если хотите.

bahamat
источник
12
Есть два разных файла правил: /etc/iptables/rules.v4и /etc/iptables/rules.v6для IPv4 и IPv6 соответственно. Если вы хотите, чтобы таблица применялась к обоим видам соединений, вы должны сохранить ее в обоих файлах правил.
PetaspeedBeaver
11
Не добавляйте его в последовательность выключений! Если вы нарушите свои правила во время изменений / настройки, по крайней мере, старая добрая перезагрузка вернет вещи в предыдущее рабочее состояние.
VertigoRay
1

После установки iptables-persistentвыше вы также можете сохранить правила с помощью следующей более короткой команды в Ubuntu 16.04+: sudo netfilter-persistent save

И они также могут быть возвращены к тому, какими они были в прошлый раз, когда вы их сохранили: sudo netfilter-persistent reload

Робин Уилсон
источник