Um firewall robusto no iptables!

Um firewall stateful oferece um maior controle acerca das conexões que trafegam pelo nosso firewall, ele permite por exemplo que aplicações possam iniciar conexões de dentro para fora da rede em qualquer porta e que a resposta a essa conexão volte para a aplicação que iniciou a conexão sem precisar de uma regra específica para a o ip de destino ou portas envolvidas (que podem ser aleatórias).

Aqui descrevo uma atualização ao meu antigo script de firewall básico, com alguns comentários:

#!/bin/bash
it="/usr/sbin/iptables" #comando do iptables

# permite conexões locais e vindos da rede local
$it -A INPUT -i lo -j ACCEPT
$it -A INPUT -i eth0 -j ACCEPT

# permite conexões no servidor de dns
$it -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
$it -A INPUT -p udp -m udp --dport 53 -j ACCEPT

# permite apenas ips brasileiros a conectarem por ssh, pop3, imap e smtp
$it -A INPUT -s 177.0.0.0/8 -p tcp -m multiport --dports 22,110,143,587 -j ACCEPT
$it -A INPUT -s 186.0.0.0/7 -p tcp -m multiport --dports 22,110,143,587 -j ACCEPT
$it -A INPUT -s 189.0.0.0/8 -p tcp -m multiport --dports 22,110,143,587 -j ACCEPT
$it -A INPUT -s 200.0.0.0/7 -p tcp -m multiport --dports 22,110,143,587 -j ACCEPT

# bloqueia esses mesmos acessos de todos os outros ips
$it -A INPUT -p tcp -m multiport --dports 22,110,143,587 -j closed

# permite receber emails na porta 25 e acesso web na porta 80
$it -A INPUT -p tcp -m multiport --dports 25,80 -j ACCEPT

# permite o protocolo de informações de rede: icmp
$it -A INPUT -p icmp -j ACCEPT

# permite conexões já iniciadas pelo servidor (permitidas pelas regras output)
$it -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# bloqueia todas as outras conexões não autorizadas anteriormente.
$it -A INPUT -j closed

Para complementar o firewall podemos fazer NAT (popularmente conhecido como compartilhamento da internet), utilizando o SNAT e ip_foward:

#!/bin/bash
 
# interface da conexão de internet
if="eth1"
# ip da conexão de internet
ip="200.0.0.1"

iptables -t nat -A POSTROUTING -o $if -j SNAT --to-source $ip
sysctl -w net.ipv4.ip_forward 1

💡

Escreva seu comentário: