Вопрос или проблема
Я добавляю это правило:
sudo iptables -t nat -A OUTPUT -d a.b.c.d -p tcp \
--dport 1723 -j DNAT --to-destination a.b.c.d:10000
- При перезагрузке компьютера правила удаляются. Почему?
- Что я могу сделать, чтобы правила сохранялись?
На Debian установите iptables-persistent
:
sudo apt-get install iptables-persistent
Пакет автоматически загрузит /etc/iptables/rules
при загрузке.
Каждый раз, когда вы вносите изменения в свои правила, выполните /sbin/iptables-save > /etc/iptables/rules.v4
, чтобы сохранить их. Вы также можете добавить это в последовательность завершения работы, если хотите.
В iptables нет опции, которая сделает ваши правила постоянными. Но вы можете использовать iptables-save
и iptables-restore
, чтобы выполнить вашу задачу.
Сначала добавьте правило iptables, используя команду, которую вы дали.
Затем сохраните правила iptables в какой-нибудь файл, например, /etc/iptables.conf
, используя следующую команду:
$ iptables-save > /etc/iptables.conf
Добавьте следующую команду в /etc/rc.local
, чтобы загружать правила при каждом перезагрузке.
$ iptables-restore < /etc/iptables.conf
После установки iptables-persistent
выше вы также можете сохранить правила с помощью следующей более короткой команды на Ubuntu 16.04+:
sudo netfilter-persistent save
И вы также можете восстановить их обратно так, как они были в последний раз, когда вы их сохраняли, используя:
sudo netfilter-persistent reload
Потому что вы не сохранили правила iptables.
Вы можете сделать это, используя sudo iptables-save
- Установите пакет
iptables-persistent
- Каждый раз, когда вы изменяете правила iptables, вы должны сохранить резервную копию в следующий файл, используя следующую команду:
iptables-save -f /etc/iptables/rules.v4
(для iptables)
iptables-save -f /etc/iptables/rules.v6
(для ip6tables)
Сначала установите постоянные iptables (ubuntu или debian)
apt install iptables-persistent
Запустите ваше выражение:
iptables -A INPUT -s 0/0 -p tcp --dport 5433 -j ACCEPT
Затем сохраните настройки
iptables-save
Наконец, перезагрузите машину, чтобы проверить
reboot
Ответ или решение
Почему правила iptables исчезают при перезагрузке системы Debian?
При использовании iptables
на Debian, многие пользователи сталкиваются с проблемой исчезновения правил после перезагрузки системы. Это связано с тем, что настройки iptables не сохраняются автоматически и по умолчанию не применяются при каждом старте системы. Рассмотрим подробнее, почему это происходит и как можно сделать так, чтобы ваши правила сохранялись и загружались автоматически при каждом запуске.
1. Почему правила iptables исчезают?
Когда вы добавляете правило, например:
sudo iptables -t nat -A OUTPUT -d a.b.c.d -p tcp --dport 1723 -j DNAT --to-destination a.b.c.d:10000
Это правило применяется в текущем сеансе работы вашей системы и хранится в памяти. Однако, как только вы перезагружаете систему, все данные, хранящиеся в памяти, будут потеряны, поскольку они не были сохранены в постоянное хранилище.
В отличие от некоторых других систем конфигурации, iptables
не поддерживает автоматическое сохранение правил после их создания. Поэтому, чтобы сохранить ваши изменения, необходимо явно указать это.
2. Как сделать правила iptables постоянными?
Чтобы сделать правила iptables устойчивыми к перезагрузкам, существует несколько методов, которые вы можете использовать:
Метод 1: Установка iptables-persistent
-
Установка пакета. Вы можете установить пакет
iptables-persistent
, который обеспечивает автоматическую загрузку правил iptables при старте системы:sudo apt-get install iptables-persistent
Во время установки вам будет предложено сохранить текущие правила. Примите это предложение.
-
Сохранение правил. После добавления или изменения правил, чтобы они сохранились и были загружены при следующем запуске, используйте команду:
sudo iptables-save > /etc/iptables/rules.v4
Для правил IPv6 используйте:
sudo ip6tables-save > /etc/iptables/rules.v6
-
Проверка загрузки правил. После установки и сохранения убедитесь, что при перезагрузке системы правила действительно загружаются, проверив их статус:
sudo iptables -L
Метод 2: Использование rc.local
Для тех, кто предпочитает более традиционный подход или если iptables-persistent
не подходит, вы можете добавить команду восстановления в файл /etc/rc.local
:
-
Сначала создайте файл конфигурации правил:
sudo iptables-save > /etc/iptables.conf
-
Откройте файл
/etc/rc.local
(иногда может потребоваться создать его):sudo nano /etc/rc.local
-
Добавьте следующую строку перед
exit 0
:iptables-restore < /etc/iptables.conf
-
Сохраните изменения и перезагрузите систему.
Заключение
Таким образом, правила iptables исчезают при перезагрузке системы из-за того, что они не сохраняются в постоянное хранилище. Для обеспечения их устойчивости необходимо применять методы сохранения через пакет iptables-persistent
или использовать файл rc.local
. Следуя этим шагам, вы сможете эффективно управлять сетевыми правилами и обеспечивать вашу систему необходимой защитой без необходимости повторной настройки после каждой перезагрузки.