Eu ainda suspeito que duas execuções de /etc/network/if-pre-up.d/iptables
estão sendo executadas ao mesmo tempo durante todo o processo de inicialização. Devido ao comportamento systemd
normal de iniciar coisas simultaneamente, a menos que seja aconselhado a não fazê-lo, acredito que o processo de inicialização aciona um processo de script para a interface lo
e outro para a interface ens16
. Isso resultaria em uma execução simultânea de iptables-restore
, o que pode causar erros, como iptables-restore: line 10 failed
. Eu sou incapaz de fornecer evidências embora.
Estou acostumado a gerenciar sistemas CentOS e Red Hat. Era uma vez, um desses servidores falhou ao inicializar iptables
service na inicialização porque systemd
estava iniciando ip6tables
simultaneamente. Esse erro específico está documentado aqui: link
Sugiro que você lide com a simultaneidade em seu script, por exemplo, usando flock
:
#!/bin/sh
/usr/bin/flock /run/.iptables-restore /sbin/iptables-restore < /etc/iptables.up.rules
Como alternativa, você pode verificar o valor real da variável ${IFACE}
antes de restaurar as regras iptables
(referência: man 5 interfaces ):
#!/bin/sh
if [ "${IFACE}" == ens16 ]; then
/sbin/iptables-restore < /etc/iptables.up.rules
fi
Além disso, se você quiser apenas carregar as regras iptables
no momento da inicialização, sugiro que use iptables-persistent
:
# apt-get install iptables-persistent netfilter-persistent
# mv -v /etc/iptables.up.rules /etc/iptables/rules.v4
# systemctl enable netfilter-persistent.service
# rm -v /etc/network/if-pre-up.d/iptables