Eu confio no meu serviço específico para carregar regras de iptables na inicialização da minha instalação debian, este serviço chama
iptables-restore my_rules.v4
ip6tables-restore my_rules.v6
e fazer alguns outros scripts
porém percebi que há um pequeno delta de tempo onde as regras padrão são aplicadas entre a habilitação das interfaces e a aplicação das regras de fw, isso pode expor a máquina a alguns riscos.
Ativei o serviço iptables-persistent, mas não tenho certeza se ele foi carregado antes do início da parte de rede.
Qual é a melhor maneira de carregar meu script antes que a rede esteja online e disponível?
Ouvi falar de pré-up em interfaces, mas tenho muitas interfaces, então não tenho certeza de qual interface será instalada primeiro, e usar o pré-up em todas as interfaces faria com que o script fosse executado muitas vezes em vez de apenas uma.
No Debian 12,
iptables
é por padrão um wrapper para o novonftables
subsistema. Oiptables-persistent
pacote depende de packagenetfilter-persistent
, que cria um serviço chamadonetfilter-persistent.service
com alias deiptables.service
eip6tables.service
.O
netfilter-persistent.service
é definido assim:Observe
DefaultDependencies=no
,Wants=network-pre.target
eBefore=network-pre.target
. Isso já garante que as regras iptables/nftables sejam restauradas antes que qualquer interface de rede seja configurada, assumindo que você use qualquer uma das formas esperadas para configurar interfaces de rede.Portanto, a resposta é sim,
iptables-persistent
é carregado antes de qualquer interface de rede ser iniciada.Se você deseja criar seu próprio serviço personalizado para suas regras de iptables/nftables, você deve definir as dependências desse serviço da mesma forma
netfilter-persistent.service
.Veja a documentação
network-pre.target
nasystemd.special(7)
página de manual (ênfase minha):Depende da sua distribuição, por exemplo, o Fedora Linux faz isso para você. É estranho que sua distribuição não o faça - essa é uma vulnerabilidade de segurança que vale a pena relatar e corrigir. O Systemd possui dependências para carregar unidades, você precisa fazer com que a rede dependa da sua unidade de firewall. Se você estiver usando um sistema init diferente, consulte-o.