iptables 是 Linux 系统中用于配置内核防火墙的一个命令行工具。要使用 iptables 防止 SYN 攻击,可以采用以下几种方法:
使用 iptables 的 limit 模块来限制单位时间内接收到的 SYN 包的数量。这可以有效防止 SYN Flood 攻击。
# 限制每秒最多接收 10 个新的 SYN 请求
iptables -A INPUT -p tcp --syn -m limit --limit 10/s -j ACCEPT
# 超过限制的 SYN 请求将被丢弃
iptables -A INPUT -p tcp --syn -j DROP
SYN Cookies 是一种防御 SYN Flood 攻击的技术,它可以在服务器内存不足时拒绝多余的连接请求,而不会耗尽资源。
# 启用 SYN Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
为了使这个设置在系统重启后仍然有效,可以在 /etc/sysctl.conf 文件中添加以下行:
net.ipv4.tcp_syncookies = 1
然后运行 sysctl -p 命令使设置生效。
iptables 的 recent 模块recent 模块可以跟踪连接请求,并在检测到可疑行为时采取行动。
# 创建一个新的链来处理可疑的连接请求
iptables -N CHECK_SYN
# 将所有新的 SYN 请求跳转到 CHECK_SYN 链
iptables -A INPUT -p tcp --syn -j CHECK_SYN
# 在 CHECK_SYN 链中,如果连接请求在最近 1 秒内已经出现过,则丢弃该请求
iptables -A CHECK_SYN -m recent --name SYN_ATTACK --set
iptables -A CHECK_SYN -m recent --name SYN_ATTACK --update --seconds 1 --hitcount 2 -j DROP
# 如果连接请求是新的,则接受它
iptables -A CHECK_SYN -j ACCEPT
调整一些 TCP 参数也可以帮助防御 SYN 攻击,例如增加 net.ipv4.tcp_max_syn_backlog 和 net.core.somaxconn 的值。
# 增加半连接队列的大小
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
# 增加系统允许的最大连接数
sysctl -w net.core.somaxconn=2048
同样,为了使这些设置在系统重启后仍然有效,可以在 /etc/sysctl.conf 文件中添加相应的行。
iptables 规则。总之,使用 iptables 防止 SYN 攻击需要综合考虑多种方法,并根据实际情况进行调整。