iptables (iptables.fw)

Proteção contra DDoS com iptables - funcional

Categoria: Segurança

Software: iptables

[ Hits: 3.428 ]

Por: Alex Silva


Proteção definitiva contra DDoS - DDoS para web sites, regras com iptables, funcional, testes com ab (apache-utils).

Explicação:

- A regra "--update --seconds 60 --hitcount 4", bloqueia tentativas de login SSH no servidor no período de 1 minuto, apos 4 tentativas falhas.

- "--rcheck --seconds 10", regra para ser replicada, as demais que são acrescidas de "--name DEFAULT --rsource -j REJECT --reject-with icmp-port-unreachable", limitando N conexões a cada 10 segundos.

- "--connlimit-above 10", limitando a 10 conexões simultâneas a cada 10 segundos definidos acima, a partir desse valor, será dropado as conexões.

Resumo: Tenho um servidor de Apache, quando limito na opção de maxclientes, mesmo assim, as conexões abrem processo com o serviço, sobrecarregando o servidor, limitando com essa regra de iptables, você coloca o tempo que quiser e quantas conexões quiser, sendo assim, a partir de X conexões, o iptables dropa as demais conexões para a origem, está sendo limitado por rede, para limitar por IP, troca o /24 para /32 (apenas 1 IP).

Habilitei os logs das conexões na linha "DROP Firewall".

Tudo pronto:

# iptables-restore && iptable-save

Para ver os logs:

# tail -f /var/log/messages

Espero que resolva seus problemas.


# nano iptables.fw
*filter
:INPUT ACCEPT [181:58880]
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name DEFAULT --rsource -j DROP
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp -m recent --rcheck --seconds 10 --name DEFAULT --rsource -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 24 --connlimit-saddr -m recent --set --name DEFAULT --rsource -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 --connlimit-saddr -m recent --set --name DEFAULT --rsource -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 443 -m connlimit --connlimit-above 10 --connlimit-mask 24 --connlimit-saddr -m recent --set --name DEFAULT --rsource -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 3306 -m connlimit --connlimit-above 500 --connlimit-mask 24 --connlimit-saddr -m recent --set --name DEFAULT --rsource -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 10050:10051 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p udp -m state --state NEW -m udp --dport 161 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 67 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p udp -m state --state NEW -m udp --dport 68 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p udp -m state --state NEW -m udp --dport 137 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p udp -m state --state NEW -m udp --dport 138 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 123 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A INPUT -s 192.168.66.0/24 -p icmp -m icmp --icmp-type 0 -m limit --limit 1/sec -j RETURN
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.66.0/24 -j LOG --log-prefix "DROP Firewall"
COMMIT
  


Comentários
[1] Comentário enviado por fabio em 29/04/2015 - 13:00h


-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 --connlimit-saddr -m recent --set --name DEFAULT --rsource -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.66.0/24 -p tcp -m state --state NEW -m tcp --dport 443 -m connlimit --connlimit-above 10 --connlimit-mask 24 --connlimit-saddr -m recent --set --name DEFAULT --rsource -j REJECT --reject-with icmp-port-unreachable


Me tire uma dúvida. Bloqueando as portas 80 e 443 no iptables não daria problema? Por exemplo, a home do VOL tem mais de 60 arquivos. Uma única conexão de cliente gera mais de 60 conexões tcp/ip (uma pra cada download de arquivo). Neste caso qualquer visitante cairia na regra de connlimit, não?!?


[2] Comentário enviado por millinux em 29/04/2015 - 19:47h

Boa noite!

Na pratica, as regras bloquea a conexão se a mesma passar de 10, exemplo dados para a cada 10 segundos, no caso do home, o cliente caira na regra de drop, se passar de 10, isso se o mesmo fizer o acesso/download de dos 60 arquivos/links simultaneamente. Nesse caso, voce analisar quantos conexões é gerada por IP, como é um portal de bastante acesso, como o portal é de acesso a IP publicos, voce mudaria a regra -s 192.168.66.0/24 para -s 0/0, (qualquer rede), e aumenta --connlimit-above de 10 para ex: 100 ou o maior valor que voce ja pegou com com nestat.



Contribuir com comentário

  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts