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 DROPSYN Cookies 是用于抵御 SYN Flood 攻击的技术,服务器内存不足时,它能拒绝多余连接请求,避免资源被耗尽。
# 启用 SYN Cookiesecho 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 --setiptables -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 攻击需要综合考虑多种方法,并根据实际情况进行调整。