我经营着一家受欢迎的科技网站,几周来我的网站一直受到 DDOS 攻击。攻击发生的时间很随机,通常每天大约 10 次。通常攻击只持续几分钟,然后就停止了。
当我的网站受到攻击时,它变得无法访问。服务器的负载没有上升,MySQL、Nginx 和 FPM 等服务不受影响。这似乎是 SYN 攻击或类似的东西。
我在一台功能强大的机器上运行 CentOS 5.6(64 位)。我已经尝试过强化 SYSCTL,我的设置如下。此外,我还设置了 iptables 来阻止除我需要的端口之外的所有端口。该脚本也可以在下面找到。
我知道这个问题之前已经被人们问过很多次了,但是有人能给我提供更多提示来抵御这些攻击吗?这真的变得非常烦人。
我愿意尝试任何事情。
SYSCTL 设置
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 1
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
IPTABLES 设置
*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 22 --syn -m limit --limit 1/m --limit-burst 3 -j ACCEPT
-A INPUT -p tcp --dport 22 --syn -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
过去 24 小时的 MRTG 图表。峰值表示攻击,此时服务器变得无法访问。
答案1
“这似乎是一次 SYN 攻击”——您根据什么证据得出这一结论?您的 conntrack 表是否已填满,或者您的 netstat 输出中是否有大量不完整的条目?鉴于 SYN cookies 通常非常有效,我更倾向于认为这是一种简单的管道填充攻击,唯一的解决方案是获得更大的管道,让您的提供商阻止上游的滥用流量(如果是简单的流量,如 DNS 反射攻击)或获取管道清理服务(如果是更复杂的流量),无论是从您的上游提供商还是第三方(如 Arbor 网络)——因为您机器上的防火墙位于受限网络连接的错误一侧。
根据有关图表性质的附加信息,我认为您很可能正遭受流量淹没(“管道填充”) - 您的提供商提供的流量核算图表应该能够证实这一点,通过显示您的流量速率在您向提供商支付的链路容量级别上保持平稳。