我得到我的服务器端口80 synfol,我无法阻止它。 首先我得到表格满,然后我禁用iptables找出它是一个synflood
netstat -n | grep :80 |wc -l #returns 1300 - 2000 netstat -n | grep :80 | grep SYN |wc -l #returns around 250
知识产权来自世界各地,所以我想它是欺骗性的。 当我放入不同的iptable规则它或者不做任何事情,或者只是丢弃所有的连接,即使是正常的
这是我的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
我能做什么? 我在1and1,我不认为他们会把我的TCP拦截,我听说是最好的解决scheme。 什么是最好的解决scheme?
检查数据包是否具有显着特征,例如,大小相同。
通常使用脚本SYN泛滥,他们发送一个“裸”数据包只有头和没有有效载荷。 它最终是一个40字节的数据包(如果我没记错的话)。
如果是这样的话,你可以简单地将所有这些都用iptables去掉,因为没有任何“正常”的数据包是这样的。
哦,准备好接受那些不太了解SYN洪水如何工作的人的大量无用build议。
你只需要启用syncookies,我已经看到你已经做到了:
sysctl -w net.ipv4.tcp_syncookies=1
然后,您可以调整您的操作系统TCP / IP堆栈,以便在未使用/closures的套接字上更快地释放系统资源。
我的设置:
# 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
您也可以调整您的Apache,特别是closuresKeepAlive并设置较低的Timeout值:
Timeout 5 KeepAlive Off
在处理大量的连接时,使用Web服务器la Nginx,Lighttpd …有助于他们启动一个进程,并为每个连接分配less量内存,Apache为每个连接分配一个进程。