Quero manter algumas iptables
regras de permanência, portanto, apenas adiciono as regras manualmente:
/sbin/iptables -I OUTPUT -p tcp --sport 80 -j QUEUE
Estou certo de que o comando funciona, porque pude vê-lo após a execução iptables -vnL
. Infelizmente, acho que ele desaparece sem reiniciar ou reiniciar iptables
após uma hora ou mais, porque não consegui vê-lo depois de executar iptables -vnL
mais tarde.
Primeiro de tudo, tenho certeza de que não há um comando de execução como esse iptables -F
. Também encontro uma linha relacionada em /var/log/message
:
Dec 18 10:10:50 zt_21_23 kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
Acho que esse é um comportamento do kernel completamente após o Google. Alguém disse iptables
que reconstruiria as regras, mas ele não me disse a condição de desencadeamento. e verifico o arquivo de configuração do iptables ( /etc/sysconfig/iptables-config
), mas não encontrei nenhum item de configuração que pudesse iptables
reconstruir as regras.
Eu tenho que adicionar as regras em intervalos definidos usando o crontab se eu quiser manter a permanência.
Resumindo:
- Como impedir o iptables de reverter as regras adicionadas?
- Quando irá
iptables
reconstruir suas regras e qual é a condição de disparo? - Qual regra seria recarregada quando o iptables fosse reconstruído e onde essas regras serão salvas?
PS. Modificar /etc/sysconfig/iptables
ou usar iptables-save
e iptables-restore
pode funcionar, mas as regras ainda desaparecem após uma hora ou mais.
Estou usando o Linux (2.6.18-308.24.1.el5 x86_64).
Respostas:
Algo ou alguém está removendo suas regras ou reiniciando o serviço iptables. O kernel não faz isso automaticamente. Para pará-lo, primeiro você precisa descobrir o que está fazendo isso. Eu começaria com a verificação para ver se algo está reiniciando o serviço iptables. Para descobrir isso, adicione o seguinte a /etc/init.d/iptables:
Depois que suas regras "desaparecerem", verifique o
/tmp/iptables-service.log
arquivo para ver quem / o que executou o script de serviço iptables.Se você não vir um
/tmp/iptables-service.log
arquivo, algo executou o/sbin/iptables
comando diretamente. Para encontrar o que está sendo executado este comando, renomear/sbin/iptables
a/sbin/iptables.real
e, em seguida, crie o seguinte script e salve-o como/sbin/iptables
:Não se esqueça de definir o script como executável:
chmod a+x /sbin/iptables
. Observe também que seu comando iptables atual pode ser algo como/sbin/iptables-multi-1.4.7
dependendo de como vocêalternatives
configurou.Então, como antes, observe o
/tmp/iptables-cmd.log
arquivo para ver quem / o que está executando o comando. Depois de conhecer a causa, você poderá evitá-la.fonte