当我的服务器很慢时,我被告知运行此命令并检查是否有人发出 SYN_RECV 请求来减慢我的服务器速度:
netstat -npt | grep SYN_RECV | awk '{print $5}' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head | tee -a $REPORT_FILE
输出示例:
Single attack IP - DOS:
262 187.7.214.146
1 95.90.250.96
1 83.215.15.150
1 203.160.112.239
1 124.197.39.213
Multiple attack IPs - DDOS:
316 187.7.214.146
94 187.7.214.96
44 187.7.214.150
90 203.160.112.239
22 203.160.112.222
我读到过一篇文章,说如果某个 IP 的 SYN_RECV 请求数超过 4,则考虑发起 SYN 洪水攻击 (DOS)。我有几个问题:
1) 使用此 netstat 命令时,我们可以声明 IP(DOS)或 IP(DDOS)发起攻击的确切数字是多少? 如果 IP 以 SYN_RECV 状态连接,是否意味着他正在进行 SYN 洪水攻击? 这可能是假象吗?
2)SYN_RECV 是 DDOS 攻击者使用的唯一监听状态吗?ESTABLISHED 状态呢?我很困惑,因为其他文章说如果一些外国 IP 以 ESTABLISHED 状态连接,那么我的服务器就受到攻击了。什么样的攻击
3) 我问这个问题是因为我想制作一个简单的 bash 脚本,可以手动报告 IP 是否是攻击者,并且我被告知使用 SYN_RECV 状态来评估攻击者。这是我们唯一可以使用的状态吗?可以被视为安全(不是 DOS 攻击者)的 SYN_RECV 值的最小值是多少?
希望我的问题清楚。如果有不清楚的地方,请问我。
谢谢你,我希望有人能解答这个噩梦。
答案1
当某个 IP 地址(攻击者)向您的服务器发送大量 SYN 数据包时,就会发生拒绝服务,然后您的服务器设置为响应每个数据包并保持端口开放(准备接收响应)。您的服务器需要 ACK 数据包才能正确关闭响应,但攻击者从未发送 ACK 数据包,他会继续发送更多的 SYN 数据包,这些数据包会在一定时间内打开更多的新端口连接,最终填满所有可用端口,从而降低您的服务器速度。因此,带有 SYN_RECV 请求的 IP 意味着他正在向您的服务器发送坏数据包,所以是的,这是一次 DOS 攻击,但是对于数字 4,它被认为是一次微小的 DOS 攻击,可能不会对拥有大量资源的服务器产生负面影响。
对此,实际上存在多种类型的 DOS 或 DDOS 攻击,SYN_FLOOD 只是一种流行的 SYN FLOOD 攻击的名称。
在生产服务器中手动进行 DDOS 缓解并不好。您可以使用其他内置自动化解决方案(如
Suricata
或 cloudflare)来实现这一点。