Maneira segura de atualizar o iptables sem vazamento de tráfego

1

Eu tenho um arquivo iptables que se parece com isso mais ou menos:

iptables -F
iptables -A INPUT -s 192.168.56.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.56.0/24 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -d 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -s $(dig +short somedomain.com) -j ACCEPT
iptables -A OUTPUT -d $(dig +short somedomain.com) -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

Eu tenho um cron configurado para rodar isso a cada hora. O que me preocupa é a probabilidade entre o iptables -F e o final do script para que alguns pacotes vazem. Existe outra maneira de executar isso sem ter que executar o iptables -F no início?

    
por Michael 07.05.2018 / 22:22

2 respostas

1

Seguindo a sugestão de usar o ipset, que parece a melhor solução, vamos primeiro preparar o conjunto:

ipset create netset hash:net
ipset add netset 192.168.56.0/24
ipset add netset 10.0.0.0/8
ipset add netset 127.0.0.1
ipset add netset somedomain.com

Você pode verificar o que é o conjunto resultante com

ipset save netset

Agora as tabelas:

iptables -F
iptables -A INPUT -m set --match-set netset src -j ACCEPT
iptables -A OUTPUT -m set --match-set netset dst -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

Agora a atualização:

ipset create newnetset hash:net
ipset add newnetset 192.168.56.0/24
ipset add newnetset 10.0.0.0/8
ipset add newnetset 127.0.0.1
ipset add newnetset somedomain.com
ipset swap newnetset netset
ipset destroy newnetset

Por favor, note que confiar em DNS nas regras de firewall geralmente não é considerado a coisa mais segura a se fazer. Eu acho que você está tentando permitir a comunicação com o host que está na conexão residencial à Internet e você está tentando confiar em algum tipo de DNS dinâmico para manter as regras atualizadas com a alteração do endereço IP. Usando VPN no evento, algum tipo de batida de porta pode ser uma solução melhor.

    
por 10.05.2018 / 22:12
2

What worries me is the probability between iptables -F and the end of the script to have some packets leak.

Bem, agora você está DROP todos os pacotes através de uma regra. Se você definir a política de suas cadeias de entrada / saída para DROP, essa política não será redefinida por um flush .

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP

Embora usar um ipset ou uma cadeia para suas regras dinâmicas, em vez de liberar a tabela inteira, provavelmente seria uma solução melhor.

    
por 08.05.2018 / 01:28

Tags