Em uma máquina, preparei um firewall.service
serviço systemd que funciona bem naquela máquina rodando o Debian 9.5.
Agora estou configurando outra máquina, também executando o Debian 9.5, usando exatamente o mesmo script, mas se recusa a executar na inicialização e não consigo encontrar nenhuma indicação do motivo.
Imediatamente após a inicialização, aqui está uma saída, indicando apenas que o systemd nunca tentou iniciar o serviço em primeiro lugar:
[root@bigbrother ~]# journalctl -u firewall
-- No entries --
[root@bigbrother ~]# systemctl status firewall
● firewall.service - Firewall setup via /etc/iptables.rules
Loaded: loaded (/etc/systemd/system/firewall.service; enabled; vendor preset: enabled)
Active: inactive (dead)
O serviço de firewall está em /etc/systemd/system/firewall.service
ambas as máquinas e se parece com isso:
[Unit]
Description=Firewall setup via /etc/iptables.rules
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables.rules
[Install]
WantedBy=network-online.target
Como você pode ver, ele apenas executa um iptables-restore command
, e é isso. Eu costumava usar isso /etc/rc.local
antes, mas acho que é preciso acompanhar a moda e usar systemd
para essas coisas (o que é bom, quando funciona).
O serviço está realmente ativado:
[root@bigbrother ~]# systemctl disable firewall
Removed /etc/systemd/system/network-online.target.wants/firewall.service.
[root@bigbrother ~]# systemctl enable firewall
Created symlink /etc/systemd/system/network-online.target.wants/firewall.service → /etc/systemd/system/firewall.service.
E funciona bem quando executado manualmente:
[root@bigbrother ~]# systemctl start firewall
[root@bigbrother ~]# systemctl status firewall
● firewall.service - Firewall setup via /etc/iptables.rules
Loaded: loaded (/etc/systemd/system/firewall.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Sep 09 17:10:52 bigbrother systemd[1]: Starting Firewall setup via /etc/iptables.rules...
Sep 09 17:10:53 bigbrother systemd[1]: Started Firewall setup via /etc/iptables.rules.
o que estou perdendo?
Eu dei uma olhada em algumas perguntas semelhantes aqui, mas a que me deu mais promessa foi na verdade um erro de digitação, então estou totalmente perdido no momento. É a mesma versão do Debian que estou executando em um servidor diferente, então acho difícil acreditar que isso tenha algo a ver com a ordem dos serviços. Mesmo assim, terei prazer em aceitar sugestões sobre isso.
WantedBy=network-online.target
não faz parte da cadeia de dependências por padrão e você não deve usá-lo assim.Se você realmente precisa iniciar esse script depois que a rede estiver ativa, sugiro que você faça:
https://www.freedesktop.org/software/systemd/man/systemd.special.html#network.target https://www.freedesktop.org/software/systemd/man/systemd.special.html#network-online .alvo
Talvez esteja rodando muito cedo. Este documento explica como
network.target
o objetivo principal do programa é ordenar as coisas corretamente no desligamento .network-pre.target
O objetivo principal do Instead é o uso com serviços de firewall . Os serviços que desejam ser executados antes da configuração da rede devem usarIsso é o que vejo na
firewalld.service
Unit do Fedora 24, por exemplo, que acredito ser um front-end paraiptables
.