carregando regras explícitas do iptables na inicialização ou na interface

2

Eu gostaria de carregar as regras do iptables na inicialização ou na interface do Ubuntu. Fiz uma pesquisa no StackExchange e em outros lugares e parece que a abordagem mais comumente aceita é usar iptables-save / iptables-restore ou iptables-persistent package. Eu prefiro (pode ser devido a minha natureza Linux ainda não amadurecida) para manter as regras do iptables em forma "explícita" (por exemplo, iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT ) em vez de ter todas as regras diferentes despejadas no mesmo arquivo persistente onde, sem comentários e alguma estrutura , pode ser difícil encontrar uma regra específica e alterá-la.

O que eu fiz até agora - adicionei a seguinte linha ao /etc/network/interfaces

post-up         sh -c "/etc/iptables/eth0.post-up.sh"

em que eth0.post-up.sh é um arquivo no qual iptables são explicitamente definidos (por exemplo, iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT ). Tudo seria bom, as regras são aplicadas, mas a razão pela qual estou escrevendo aqui é que, se eu tentar executar iptables -L FORWARD , não vejo as regras carregadas, embora tenha certeza de que elas são aplicadas (é um encaminhamento de sub-rede). regras e vejo que o ping passa quando a regra é executada e não quando a regra não é executada. Aqui está a saída:

# iptables -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt source               destination
ufw-before-logging-forward  all  --  anywhere             anywhere
ufw-before-forward  all  --  anywhere             anywhere
ufw-after-forward  all  --  anywhere             anywhere
ufw-after-logging-forward  all  --  anywhere             anywhere
ufw-reject-forward  all  --  anywhere             anywhere
ufw-track-forward  all  --  anywhere             anywhere

Se eu comentar o post-up acima ... no arquivo /etc/network/interfaces (certificando-se de que as regras não são aplicadas) e depois executar as regras manualmente, recebo a saída:

# iptables -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt source               destination
ufw-before-logging-forward  all  --  anywhere             anywhere
ufw-before-forward  all  --  anywhere             anywhere
ufw-after-forward  all  --  anywhere             anywhere
ufw-after-logging-forward  all  --  anywhere             anywhere
ufw-reject-forward  all  --  anywhere             anywhere
ufw-track-forward  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED 

Assim, as regras são aplicadas em ambos os casos, mas no primeiro caso, iptables -L não mostra as regras e, mais tarde, o faz.

Em última análise, funciona, mas eu gostaria de entender qual é a ressalva aqui, porque parece que eu sou o único em torno de quem está tentando usar essa abordagem, e por que iptables -L não me dá a saída esperada.

ATUALIZAÇÃO: tenho que me corrigir, nem todas as regras do iptables no arquivo eth0.post-up.sh são executadas, de 3 comandos abaixo:

/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

somente o último (com POSTROUTING) é executado, o que é necessário para o envio do ping, enquanto os dois primeiros não possuem nenhum rastreio no iptables -Lnv FORWARD nem o resultado da conexão é estabelecido (por exemplo, wget google.com ) de outro computador que usa esta caixa como um roteador. Mas se eu executar este arquivo manualmente após a inicialização - então tudo é executado corretamente, o ping e o wget do computador remoto funcionam como esperado.

    
por Yury Spiridonov 27.01.2015 / 21:02

1 resposta

0

Eu uso softether vpn no meu pi. Eu uso este gist para configurá-lo.

Softether (ou pelo menos este script) coloca regras de iptable em /etc/rc.local

Como exemplo, isso é meu

 # Start VPN Settings

 for vpn in /proc/sys/net/ipv4/conf/*; do echo 0         > $vpn/accept_redirects; echo 0 > $vpn/      send_redirects; done
 iptables -A FORWARD -i br0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
 iptables -A FORWARD -i br0 -o br0 -j ACCEPT

 # End VPN Settings

 exit 0

Isso deve executar seus comandos iptable na inicialização. Pode ser um caminho mais apropriado, mas isso parece funcionar para mim (pelo menos, tanto quanto vpn em causa, nunca tive problemas)

Apenas certifique-se de colocar as tabelas antes

 exit 0
    
por geoffmcc 27.01.2015 / 22:50