dmesg SYN flood em 80 sysctl -p

3

Estou recebendo um synflood na minha porta do servidor 80 e não consigo pará-lo. primeiro eu tenho tabelas cheias, então eu desativado iptables para descobrir que é um synflood

netstat -n | grep :80 |wc -l
#returns 1300 - 2000 
netstat -n | grep :80 | grep SYN |wc -l
#returns around 250

os IPs estão vindo de todos os lugares, então suponho que seja falso. quando eu coloco em regras de iptable diferentes, ele não faz nada ou apenas descarta todas as conexões, mesmo as normais

este é o meu sysctl -p

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

o que posso fazer? Eu estou em 1and1 e eu não acho que eles vão colocar interceptação TCP para mim que eu ouvi é a melhor solução. qual é realmente a melhor solução?

    
por Kyle Brandt 27.10.2009 / 19:41

2 respostas

1

Verifique se os pacotes possuem um recurso distintivo, por exemplo, sendo todos do mesmo tamanho.

Normalmente, com inundações SYN com script, eles enviam um pacote "simples" apenas com o cabeçalho e sem carga útil. Ele acaba sendo um pacote de 40 bytes (se bem me lembro).

Se for esse o caso, você pode simplesmente remover todos os que estão com iptables, já que nenhum pacote "normal" se parece com isso.

Ah, prepare-se para uma enxurrada de conselhos inúteis de pessoas que realmente não entendem como as inundações por SYN realmente funcionam.

    
por 27.10.2009 / 20:08
1

Você só precisa ativar syncookies, e eu vi que você já fez isso:

sysctl -w net.ipv4.tcp_syncookies=1

Em seguida, você pode ajustar a pilha do sistema operacional TCP / IP para liberar recursos do sistema mais rapidamente em soquetes não utilizados / fechados.

Minhas configurações:

# tunning tcp stack
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_keepalive_time=1800
sysctl -w net.ipv4.tcp_window_scaling=0
sysctl -w net.ipv4.tcp_sack=0
sysctl -w net.ipv4.tcp_timestamps=0

sysctl -w net.ipv4.ip_conntrack_max=524288
sysctl -w net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

# buffering
sysctl -w net.core.wmem_default=229376
sysctl -w net.core.wmem_max=229376

Você também pode ajustar seu Apache, especialmente desativar o KeepAlive e definir um valor de Tempo limite menor:

Timeout 5
KeepAlive Off

Quando lidamos com muitas conexões, é útil usar um servidor web la Nginx, Lighttpd, ... eles iniciam um único processo e alocam apenas uma pequena quantidade de memória para cada conexão, o Apache está alocando um processo para cada conexão.

    
por 28.10.2009 / 14:23