Como pode definir essas regras iptables para serem executadas na inicialização

19

Normalmente, executo minhas regras de iptables sempre que faço login. Do terminal eu digito;

sudo sh firewall.sh

Configurando o computador da minha irmã, eu quero dar a ela alguma proteção básica de firewall. Ela não vai estar logando como admin, apenas uma conta padrão. Como posso fazer um script de firewall ser executado toda vez que ela faz login sem precisar digitar nenhuma senha?

O script que escrevi para o computador da minha irmã contém;

#!/bin/sh

modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Coloquei em sua pasta pessoal como firewall.sh e configurei-a como executável (clique com o botão direito do mouse no arquivo e marque a opção "permitir executar arquivo como programa" na aba de permissões).

Executando este script do terminal como root funciona bem.

Depois de digitar;

sudo sh firewall.sh

Eu digitei no terminal

sudo iptables -L -v

e eu recebo

Chain INPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,ACK/SYN
    0     0 DROP       udp  --  any    any     anywhere             anywhere            
    0     0 DROP       icmp --  any    any     anywhere             anywhere            

Chain FORWARD (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:https
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp spts:32768:61000 dpt:domain
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:http
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere

Como posso fazer com que este script seja executado automaticamente no login ou, possivelmente, salvar essas regras permanentemente para o computador de minhas irmãs? Você poderia, por favor, fornecer algum código detalhado, já que minhas primeiras tentativas no método rc.local e no iptables-save não foram muito bem-sucedidas. Em cada reinicialização, todas as cadeias INPUT, OUTPUT e FORWARD são redefinidas para ACCEPT, sem nenhuma política listada quando digito sudo iptables -L -v

    
por Mikelane 21.03.2013 / 05:14

2 respostas

31

Você pode querer usar o pacote iptables-persistent em vez de mexer com seus scripts de inicialização. Primeiro, execute seu script para configurar as regras de firewall. Em segundo lugar, execute sudo apt-get install iptables-persistent e siga as instruções. Quando ele pede para salvar as regras atuais, clique em "Sim" em ambos os prompts. Agora, na reinicialização, suas regras do iptables serão restauradas.

NOTA: Se você alterar suas regras depois disso, você precisará fazer o seguinte comando (s) após as alterações:

Para salvar suas regras de iptables IPv4: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

Para salvar suas regras IPv6 ip6tables: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'

    
por Thomas Ward 21.03.2013 / 05:18
3

Supondo que você tenha as regras de firewall em:

/etc/iptables.up.rules

Talvez a resposta mais óbvia seja criar um arquivo chamado iptables em:

/etc/network/if-pre-up.d

com o conteúdo:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

e torná-lo executável usando

sudo chmod +x /etc/network/if-pre-up.d/iptables

Desta forma, antes que sua interface de rede seja ativada, suas regras serão carregadas.

    
por Antonio J. de Oliveira 13.12.2016 / 12:43