O Debian 'ignora' /etc/network/if-pre-up.d/iptables

12

Quero que minhas regras do iptables sejam carregadas automaticamente na inicialização. De acordo com o wiki do Debian, isso pode ser feito colocando um script com o nome iptables em /etc/network/if-pre-up.d/ Então eu fiz, é assim que é:

cat /etc/network/if-pre-up.d/iptables 
#!/bin/sh
/sbin/iptables-restore < /etc/firewall/iptables.rules
/sbin/ip6tables-restore < /etc/firewall/ip6tables.rules

Este script funciona: se eu executá-lo como root, minhas regras de firewall são aplicadas. Mas, na reinicialização, não há regras de firewall. O que estou fazendo de errado?

A pedido: o / etc / network / interfaces (não toquei neste arquivo)

user@DebianVPS:~$ cat /etc/network/interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
Cheiron
fonte
Como você configura suas interfaces? Você pode adicionar o arquivo / etc / network / interfaces?
Bayindirh 27/05
Observe que /etc/network/if-pre-up.d/não funciona mais no Ubuntu 18.04, consulte serverfault.com/questions/914493/…
BurninLeo 02/02/19

Respostas:

6

Use o iptables-persistentpacote para esta tarefa.

Defina suas regras /etc/iptables/rules.4e /etc/iptables/rules.6e não se esqueça de ativar o serviço (usando update-rc.d, chkconfigou você ferramenta favorita.

dawud
fonte
Na instalação do pacote, o debconf pergunta se você deseja salvar as regras atuais. Portanto, se você já possui as regras definidas, pode simplesmente instalar o pacote. Se você quiser alterá-los mais tarde, apenas dpkg-reconfigure iptables-persistent.
Braiam 06/04
10

Esse problema pode estar relacionado aos bits de permissão do seu script. Qual é a saída desse comando? Inclui seu arquivo?

run-parts --test /etc/network/if-pre-up.d
eppesuig
fonte
run-parts --test /etc/network/if-pre-up.d fornece /etc/network/if-pre-up.d/iptables, qual parece a saída correta para mim?
Cheiron
1
ok, você provavelmente deve verificar quando seu script é executado. Adicione uma primeira linha como esta (date; set; echo) >> /tmp/iptables-cmd.log, para ver quando é chamada. Também sempre imprimo o ambiente para verificar se há algum argumento passado por lá. Você pode decidir executar o iptables somente após a última interface eth *, em vez de executá-lo toda vez que uma interface for adicionada.
eppesuig
3
Agora que você postou o seu interfaces, vejo que você não está usando o ifupdown, mas o gerenciador de rede. É por isso que seu script não é chamado. Verifique este documento: ubuntuforums.org/showthread.php?t=1084308
eppesuig
Bem, isso explica muito. Acho que agora estou apenas seguindo a resposta dawud, que parece funcionar de qualquer maneira.
Cheiron
3
run-parts é um pouco exigente quanto ao nome dos scripts e ter um ponto no nome do arquivo estava fazendo com que o script fosse ignorado na inicialização no meu caso.
alexm
0

Por que não fazer da maneira mais fácil?

1 - crie suas regras do iptables

2 - execute "sudo apt-get install iptables-persistent", ele perguntará se você deseja salvar as regras e restaurá-las após a inicialização.

3- Você está FEITO

alex
fonte
1
Duplicata de resposta aceita
Cheiron 14/10