paulo1205
(usa Ubuntu)
Enviado em 25/12/2012 - 03:26h
Faz tempo que não mexo com firewall, mas já que o assunto veio à baila, permita-me dar uns pitacos (que podem até estar errados -- e, nesse caso, eventuais correções e sugestões serão bem-vindas).
Procure evitar esse conjunto de regras muito grandes e com teor semelhante, especialmente se, além dele, seu firewall contiver outras coisas. Quanto maior o arquivo de regras, mais CPU o kernel gasta processando cada pacote, e se o seu conjunto de regras for realmente grande, você vai começar a sentir em suas aplicações o atraso provocado por essa montoeira de regras, principalmente se a sua aplicação tiver o azar de acionar apenas uma das regras que estão no final da lista.
Já que você está ordenando origens e destinos, considere uma ordenação que leve em consideração a frequência de tráfego gerado, procurando deixar quem fala mais e quem é mais requisitado próximo do topo de sua respectiva lista. Isso fará com que, em média, seja menor o número de regras tem de consultar para descobrir o que fazer com cada pacote, otimizando o processamento no firewall e o tempo de resposta sentido pela aplicação.
Talvez não se aplique diretamente a você neste momento mas, em geral, aproveite o fato de que você pode criar suas próprias
chains com o iptables e use a técnica de dividir para conquistar, fazendo
match parcial de pacotes para acelerar o acesso a regras de outros protocolos. Por exemplo: digamos que a expansão dos seus arquivos produzisse 3000 regras distintas, e que depois dessas 3000 regras para HTTP você ainda tivesse de adicionar regras para FTP, SMTP, POP3, IMAP4 e outros protocolos menos comuns. Para não fazer os usuários desses serviços sofrerem com um desempenho ruim, você poderia fazer mais ou menos o seguinte: na
chain FORWARD, você coloca apenas uma regra (ou três, no seu caso) que pegue as artes do pacote que são comuns àquelas 3000, e faz com que elas desviem para uma segunda
chain , e coloca nesta
chain aquelas partes específicas de cada origem ou destino particular; desse modo, você divide por 3000 a quantidade de regras percorridas em FORWARD antes de chegar à parte dos demais protocolos, e possivelmente ainda reduz a quantidade de regras também na
chain secundária. Veja o exemplo abaixo.
# Regras para HTTP tratadas numa chain separada
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 80 -j my_fwd_chain
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 443 -j my_fwd_chain
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 8080 -j my_fwd_chain
# Regras para POP3
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 110 -j DROP
# Regras para SSH
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 22 -j ACCEPT
### Agora aquelas milhares de regras. Note que não é mais necessário
### testar a porta de destino, porque ela já foi verificada no momento
### em que se decidiu desviar o teste para esta chain.
iptables -A my_fwd_chain -p tcp -s 10.1.1.1 -d 192.0.45.56 -j DROP
iptables -A my_fwd_chain -p tcp -s 10.1.1.1 -d 146.164.10.2 -j DROP
iptables -A my_fwd_chain -p tcp -s 10.2.2.2 -d 192.0.45.56 -j DROP
iptables -A my_fwd_chain -p tcp -s 10.2.2.2 -d 146.164.10.2 -j DROP
# ...