Muitas conexões e iptables não estão funcionando para limitar conexões por ip

0

Eu tenho um servidor dedicado com 32 GB de RAM. Tudo funciona bem até que alguns apostadores vieram ao ddos meu servidor. Eu tinha um uso muito alto de largura de banda de uplink (acima de 150Mbps). Eu olhei para o netstat com o seguinte comando:

netstat -an | grep tcp | awk '{print $5}' | cut -f 1 -d : | sort | uniq -c | sort -n

Ele mostra milhares de conexões para vários IPs: usei regras de iptable para limitar as conexões por IP:

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 32 -j REJECT --reject-with tcp-reset 

iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 150/second --limit-burst 160 -j ACCEPT

Guardei estas regras e estas regras estão no topo da lista no iptables. Eu reiniciei o sistema para fechar todas as conexões e restaurar as regras de iptable. Coloque o servidor online. O servidor estava quase morto e havia milhares de conexões novamente. Eu tenho o UFW instalado e apenas algumas portas estão abertas.

O que posso fazer para parar? Como pode matar conexões estabelecidas por ip? BTW. todos os ips são mascarados e falsos.

Editar:

netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
      1 CLOSING
      1 established)
      1 Foreign
      2 SYN_SENT
      7 FIN_WAIT2
     16 LISTEN
     21 CLOSE_WAIT
     48 LAST_ACK
    209 SYN_RECV
    284 FIN_WAIT1
    772 ESTABLISHED
  35426 TIME_WAIT
    
por user3404047 15.08.2015 / 23:49

1 resposta

0

Tente isto:

/sbin/iptables -I INPUT -p tcp --dport 80 -i eth? -m state --state NEW -m recent --set
/sbin/iptables -I INPUT -p tcp --dport 80 -i eth? -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

A primeira linha irá ver o IP se conectando à sua interface eth.

A segunda linha irá verificar se a conexão é nova nos últimos 60 segundos e se o fluxo do pacote é maior do que dez e, se for o caso, a conexão será eliminada.

Para bloquear o endereço IP, você deve digitar:

/sbin/iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Se você quiser apenas bloquear o acesso a uma porta de um ip, você deve digitar:

/sbin/iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --destination-port 25 -j DROP

A regra acima eliminará todos os pacotes vindos do IP xxx.xxx.xxx.xxx para a porta 25.

    
por kyodake 16.08.2015 / 01:43