当我的服务器速度很慢时,我被告知运行此命令并检查是否有人发出 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) 或 IPs (DDOS) 进行攻击的确切数字是多少?如果 IP 是 SYN_RECV 状态的连接,这是否意味着他正在进行 SYN 洪水攻击?可以是假旗吗?
2) SYN_RECV 是 DDOS 攻击者使用的唯一监听状态吗?那么 ESTABLISHED 状态呢?我很困惑,因为其他文章说如果某些外国IP以ESTABLISHED状态连接,那么我的服务器正在受到攻击。什么样的攻击
3) 我问这个问题是因为我想制作一个简单的 bash 脚本,它可以手动报告 IP 是否是攻击者,并且我被告知使用 SYN_RECV 状态来评估攻击者。这是我们唯一可以使用的状态吗?可以认为是安全的 SYN_RECV 值的最小值是多少(不是 DOS 攻击者)?
希望我的问题很清楚。请问我是否有不清楚的地方。
谢谢你,我希望有人能回答这个噩梦。
当 ip 地址(攻击者)向您的服务器发送大量 SYN 数据包,然后您的服务器设置为响应每个数据包并保持端口打开(准备接收响应)时,就会发生拒绝服务。您的服务器需要有 ACK 数据包才能使用 ACK 数据包正确关闭响应,但 ACK 数据包永远不会从攻击者那里到达,他会继续发送更多的 SYN 数据包,这些数据包会在一定时间内打开更多的新端口连接并最终填满所有降低服务器速度的可用端口。因此,带有 SYN_RECV 请求的 IP 意味着他正在向您的服务器发送错误的数据包,所以是的,这是一个 DOS 攻击,但是对于那个数字 4,它被认为是一个微小的 DOS 攻击,它可能对拥有大量资源的服务器没有负面影响。
为此,实际上有多种类型的 DOS 或 DDOS 攻击,SYN_FLOOD 只是流行的 SYN FLOOD 攻击的名称。
在生产服务器中进行手动 DDOS 缓解并不好。您可以为此使用其他一些内置的自动化解决方案,例如
Suricata
cloudflare。SYN FLOOD DDOS 攻击 - 云闪现