Post atualizado em 20/12/2011!
Um firewall stateful controla o nível das conexões ip, podendo permitir o fluxo de conexões já efetuadas e limitar a criação de novas conexões.
Você precisa de vários módulos do netfilter habilitados no kernel, principalmente:
[*] Network packet filtering framework (Netfilter) --->
<*> Netfilter Xtables support (required for ip_tables)
<*> "limit" match support
<*> "state" match support
<*> Multiple port match support
Depois de acrescentar as novas opções, recompilando o kernel ou carregando os módulos, basta utilizar as regras conforme exemplificadas nas linhas a seguir (os comandos podem ser inseridos na shell e ou salvos em um script de inicialização):
# Permitir o tráfego local e da rede local em eth0 iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth0 -j ACCEPT # Definir o firewall como fechado por padrão # (Tornando necessário definir o que será aceito) iptables -t filter -P INPUT DROP # Firewall Stateful # Permitir conexões que já foram iniciadas, permitidas por outras regras a seguir. iptables -t filter -N KEEP_STATE iptables -t filter -A KEEP_STATE -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t filter -A KEEP_STATE -j RETURN iptables -t nat -N KEEP_STATE iptables -t nat -A KEEP_STATE -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A KEEP_STATE -j RETURN iptables -t nat -A PREROUTING -j KEEP_STATE iptables -t nat -A POSTROUTING -j KEEP_STATE iptables -t nat -A OUTPUT -j KEEP_STATE iptables -t filter -A INPUT -j KEEP_STATE iptables -t filter -A FORWARD -j KEEP_STATE iptables -t filter -A OUTPUT -j KEEP_STATE # Limites de conexões (proteção contra DDoS) # para remover o limite, basta suprimir: -m limit --limit n/s # Limita a resposta de ping para 1 pacote por segundo iptables -t filter -A INPUT -p icmp --icmp-type echo-request -m limit \ --limit 1/s -j ACCEPT # Aceitando conexões nas portas 21 22 e de 4000 até 4050, # com limite de 1 conexao por segundo e # só para ips brasileiros (189.x.x.x e 200.x.x.x e 201.x.x.x) # obs, é preciso confirmar a rede de ip das operadoras 3G (Nextel wap usa 216.x.x.x) iptables -A INPUT -p tcp -m multiport --dports 21,22,4000:4050 \ -m limit --limit 1/s
-s 189/8 -j ACCEPT iptables -A INPUT -p tcp -m multiport --dports 21,22,4000:4050 \ -m limit --limit 1/s -s 200/7 -j ACCEPT # Aceitando conexões nas portas 25 e 80 com limite de 3 conexões por segundo iptables -A INPUT -p tcp -m multiport --dport 25,80 -m limit --limit 3/s -j ACCEPT # Aceitando conexões na porta de DNS externo com limite de 2 conexões por segundo # (útil se você hospeda algum domínio) iptables -A INPUT -p udp --dport 53 -m limit --limit 2/s -j ACCEPT iptables -A INPUT -p tcp --dport 53 -m limit --limit 2/s -j ACCEPT
É só aperfeiçoar esse script simples afim de obter um bom firewall robusto com o seu linux!
Pingback: Um firewall robusto no iptables! | Blog do Eduardo Nunes