1

Я хочу сохранить постоянство некоторых правил iptables , поэтому я просто добавляю правила только вручную:

/sbin/iptables -I OUTPUT -p tcp --sport 80 -j QUEUE

Я уверен, что команда работает, потому что я мог видеть ее после выполнения iptables -vnL . К сожалению, я обнаружил, что он исчезает без перезагрузки или перезапуска iptables через час или около того, потому что я не смог его увидеть после выполнения iptables -vnL позже.

Прежде всего, я уверен, что нет ни одной команды, выполняющей, например, iptables -F . Я также нахожу одну связанную строку в /var/log/message:

Dec 18 10:10:50 zt_21_23 kernel: ip_tables: (C) 2000-2006 Netfilter Core Team

Я считаю, что это поведение ядра полностью после Google. Кто-то сказал, что iptables перестроит правила, но он не сказал мне условия запуска. и я проверяю файл конфигурации iptables (/etc/sysconfig/iptables-config), но я не смог найти ни одного элемента конфигурации, который мог бы заставить iptables перестроить правила.

Я должен добавлять правила с установленными интервалами, используя crontab, если я хочу сохранить его постоянство.

Подводить итоги:

  1. Как помешать iptables отменить добавленные мной правила?
  2. Когда iptables восстановит свои правила и каково условие запуска?
  3. Какое правило будет перезагружено при восстановлении iptables и где эти правила сохранены?

PS. Изменение /etc/sysconfig/iptables или использование iptables-save и iptables-restore могут работать, но правила все равно исчезают через час или около того.

Я использую Linux (2.6.18-308.24.1.el5 x86_64).

1 ответ1

3

Кто-то или кто-то удаляет ваши правила или перезапускает службу iptables. Ядро не просто делает это автоматически. Чтобы остановить это, сначала нужно выяснить, что это делает. Я бы начал с проверки того, что-то перезапускает службу iptables. Чтобы понять это, добавьте следующее в /etc/init.d/iptables:

date >> /tmp/iptables-service.log
ps -f $PPID >> /tmp/iptables-service.log

Затем, после того как ваши правила "исчезнут", проверьте файл /tmp/iptables-service.log чтобы узнать, кто / что запускал сценарий службы iptables.

Если вы не видите файл /tmp/iptables-service.log , то что-то напрямую запускало команду /sbin/iptables . Чтобы найти, что выполняет эта команда, переименуйте /sbin/iptables в /sbin/iptables.real а затем создайте следующий сценарий и сохраните его как /sbin/iptables:

#!/bin/bash
date >> /tmp/iptables-cmd.log
ps -f $PPID >> /tmp/iptables-cmd.log
/sbin/iptables $*

Не забудьте установить скрипт как исполняемый: chmod a+x /sbin/iptables . Также обратите внимание, что ваша фактическая команда iptables может быть чем-то вроде /sbin/iptables-multi-1.4.7 зависимости от того, как у вас настроены alternatives .

Затем, как и раньше, посмотрите файл /tmp/iptables-cmd.log чтобы узнать, кто / что запускает команду. Как только вы узнаете причину, вы сможете предотвратить ее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .