如何通过iptables设置策略来有效防御DDoS攻击,确保网站稳定不受影响?

更新于
2026-08-22 05:00:41
6阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

为什么 DDoS 攻击会让你抓狂?——常见痛点

- 网站在高峰期突然崩溃。访问量骤降,业务直接中断。

- 监控告警频繁触发,却找不到具体的攻击来源。

如何通过iptables设置策略来有效防御DDoS攻击,确保网站稳定不受影响?

- 为了阻止攻击而盲目封禁 IP。导致正常使用者也被误封,投诉不断。

- 每次手动更新防火墙规则耗时长,且缺乏可视化的日志分析。

iptables 基础:你的第一道防线

iptables 是 Linux 内核自带的防火墙工具,能够基于 IP、端口、协议还有连接状态等多维度对流量进行精准过滤。通过合理配置规则,你可以在源头上拦截大部分恶意请求。从而降低 DDoS 攻击对业务的冲击。

主要概念速览

  • INPUT、OUTPUT、FORWARD 等,用于决定数据包的处理方向。
  • filter、nat、mangle等。
  • 匹配模块limit、connlimit、recent、conntrack 等,用于实现速率限制、并发连接数控制等高级策略。

一步到位的 DDoS 防御策略

1️⃣ 限制 SYN 包速率 – 抑制 SYN 洪水

# 每秒最多接受 1 个 SYN 包,突发最多 3 个
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# 超出限制直接丢弃
iptables -A INPUT -p tcp --syn -j DROP

2️⃣ 控制单 IP 并发连接数 – 防止资源耗尽

# 单 IP 同时最多建立 15 条新连接。超过则丢弃
iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP

3️⃣ 使用 recent 模块追踪异常行为 – 动态封禁高频 IP

# 将每次访问记录到 recent 列表
iptables -A INPUT -p tcp --dport 80 -m recent --name badguy --set
# 如果同一 IP 在 60 秒内超过 20 次访问,则拒绝后续请求
iptables -A INPUT -p tcp --dport 80 -m recent --name badguy \
--update --seconds 60 --hitcount 20 -j DROP

4️⃣ 丢弃无效或可疑的数据包 – 减少噪声流量

# 丢弃非状态的 NEW 包
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# 丢弃未完成三次握手的半开连接
iptables -A INPUT -p tcp!--syn -m conntrack --ctstate NEW -j DROP

5️⃣ 白名单 + 黑名单双层防护 – 确保合法流量不受影响

# 放行内部网段
iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT
# 屏蔽已知恶意 IP 或 IP 段
iptables -A INPUT -s 203.0.113.45/32 -j DROP
iptables -A INPUT -m iprange --src-range 198.51.100.0-198.51.100.255 -j DROP

至于自动化脚本。一分钟内检测并封禁高频访问 IP

以下 Bash 脚本会每分钟读取 /var/log/httpd/access_log统计同一 IP 在 1 分钟内访问次数超过 100 次 的记录,并将其加入 iptables 黑名单。此脚本仅作示例,请根据实际日志方法和阈值自行调整。

 '"$THRESHOLD"' {print $2}' |
while read ip;do
# 检查是否已经封禁过避免重复添加规则
iptables‑save | grep –q "$ip"
if;n
echo "Blocking $ip due to high request rate"
iptables ‑I INPUT ‑s $ip ‑j DROP
fi
done
sleep 60 # 每分钟执行一次检测循环
done

与 Fail2Ban 联动,实现更智能的动态封禁

能够实时监控日志并自动生成 iptables 封禁规则。下面给出最简配置示例:

如何通过iptables设置策略来有效防御DDoS攻击,确保网站稳定不受影响?
# 安装 Fail2Ban
sudo apt‑get update && sudo apt‑get install fail2ban
# 创建自定义 jail.local
enabled = true
filter = http-get-dos
action = iptables
logpath = /var/log/httpd/access_log*
maxretry = 100 # 一分钟内超过100次请求即触发封禁
findtime = 60 # 时间窗口为60秒
# 开启服务并设置开机自启
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

监控与日志分析——及时发现潜在威胁

  • 实时流量监控:Sar、Netstat、iftop 等工具帮助你观察入口带宽占用情况。
  • 日志聚合网站:E.g.。ELK Stack 或 Graylog,可将 httpd、nginx 与 iptables 日志统一展示,快速定位异常 IP。
  • alert 警报:Kibana 设置阈值报警。一旦某 IP 突然出现异常请求,即刻触发邮件或 Slack 通知。

常用方法 & 常见坑点提醒

A. 防止误封正常使用者——规则顺序很关键

先放行可信任流量,再执行限制或丢弃操作。例如这方面,

# 放行本地回环和已建立连接
iptables ‑A INPUT ‑i lo ‑j ACCEPT
iptables ‑A INPUT ‑m conntrack ‑‑ctstate ESTABLISHED。RELATED ‑j ACCEPT
# 再放行必要端口
iptables ‑A INPUT ‑p tcp ‑‑dport 22 ‑j ACCEPT
iptables ‑A INPUT ‑p tcp ‑‑dport 80 ‑j ACCEPT
iptables ‑A INPUT ‑p tcp ‑‑dport 443 ‑j ACCEPT
# 最终才是速率限制或黑名单…

B. 测试再上线——避免“杀鸡用牛刀”

- 在测试环境先执行 -C 参数验证规则是否冲突。

- 使用 -L –v –n –x 查看命令计数,确认新规则生效且不会导致合法流量被大量丢弃。

C. 定期备份 & 恢复

# 导出当前规则集为备份文件
sudo iptables‑save> /etc/iptables/rules.v4.backup
# 如需恢复
sudo iptables‑restore 

从完整防御示例来看。从零到实战的一套脚本合集


把“防御成本”转化为“业务可靠性”

DDoS 攻击看似不可阻挡,但通过 iptables+脚本+Fail2Ban+日志监控** 的组合,你可以在攻击初期即快速识别并自动封禁高危 IP,同时确保正常使用者的访问体验不受影响。记得定期审计规则、做好备份,并结合上层 CDN/WAF 做层叠防护。这样才能真正把网站的稳定性提高到公司级水平。

.

标签:Linux

为什么 DDoS 攻击会让你抓狂?——常见痛点

- 网站在高峰期突然崩溃。访问量骤降,业务直接中断。

- 监控告警频繁触发,却找不到具体的攻击来源。

如何通过iptables设置策略来有效防御DDoS攻击,确保网站稳定不受影响?

- 为了阻止攻击而盲目封禁 IP。导致正常使用者也被误封,投诉不断。

- 每次手动更新防火墙规则耗时长,且缺乏可视化的日志分析。

iptables 基础:你的第一道防线

iptables 是 Linux 内核自带的防火墙工具,能够基于 IP、端口、协议还有连接状态等多维度对流量进行精准过滤。通过合理配置规则,你可以在源头上拦截大部分恶意请求。从而降低 DDoS 攻击对业务的冲击。

主要概念速览

  • INPUT、OUTPUT、FORWARD 等,用于决定数据包的处理方向。
  • filter、nat、mangle等。
  • 匹配模块limit、connlimit、recent、conntrack 等,用于实现速率限制、并发连接数控制等高级策略。

一步到位的 DDoS 防御策略

1️⃣ 限制 SYN 包速率 – 抑制 SYN 洪水

# 每秒最多接受 1 个 SYN 包,突发最多 3 个
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# 超出限制直接丢弃
iptables -A INPUT -p tcp --syn -j DROP

2️⃣ 控制单 IP 并发连接数 – 防止资源耗尽

# 单 IP 同时最多建立 15 条新连接。超过则丢弃
iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP

3️⃣ 使用 recent 模块追踪异常行为 – 动态封禁高频 IP

# 将每次访问记录到 recent 列表
iptables -A INPUT -p tcp --dport 80 -m recent --name badguy --set
# 如果同一 IP 在 60 秒内超过 20 次访问,则拒绝后续请求
iptables -A INPUT -p tcp --dport 80 -m recent --name badguy \
--update --seconds 60 --hitcount 20 -j DROP

4️⃣ 丢弃无效或可疑的数据包 – 减少噪声流量

# 丢弃非状态的 NEW 包
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# 丢弃未完成三次握手的半开连接
iptables -A INPUT -p tcp!--syn -m conntrack --ctstate NEW -j DROP

5️⃣ 白名单 + 黑名单双层防护 – 确保合法流量不受影响

# 放行内部网段
iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT
# 屏蔽已知恶意 IP 或 IP 段
iptables -A INPUT -s 203.0.113.45/32 -j DROP
iptables -A INPUT -m iprange --src-range 198.51.100.0-198.51.100.255 -j DROP

至于自动化脚本。一分钟内检测并封禁高频访问 IP

以下 Bash 脚本会每分钟读取 /var/log/httpd/access_log统计同一 IP 在 1 分钟内访问次数超过 100 次 的记录,并将其加入 iptables 黑名单。此脚本仅作示例,请根据实际日志方法和阈值自行调整。

 '"$THRESHOLD"' {print $2}' |
while read ip;do
# 检查是否已经封禁过避免重复添加规则
iptables‑save | grep –q "$ip"
if;n
echo "Blocking $ip due to high request rate"
iptables ‑I INPUT ‑s $ip ‑j DROP
fi
done
sleep 60 # 每分钟执行一次检测循环
done

与 Fail2Ban 联动,实现更智能的动态封禁

能够实时监控日志并自动生成 iptables 封禁规则。下面给出最简配置示例:

如何通过iptables设置策略来有效防御DDoS攻击,确保网站稳定不受影响?
# 安装 Fail2Ban
sudo apt‑get update && sudo apt‑get install fail2ban
# 创建自定义 jail.local
enabled = true
filter = http-get-dos
action = iptables
logpath = /var/log/httpd/access_log*
maxretry = 100 # 一分钟内超过100次请求即触发封禁
findtime = 60 # 时间窗口为60秒
# 开启服务并设置开机自启
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

监控与日志分析——及时发现潜在威胁

  • 实时流量监控:Sar、Netstat、iftop 等工具帮助你观察入口带宽占用情况。
  • 日志聚合网站:E.g.。ELK Stack 或 Graylog,可将 httpd、nginx 与 iptables 日志统一展示,快速定位异常 IP。
  • alert 警报:Kibana 设置阈值报警。一旦某 IP 突然出现异常请求,即刻触发邮件或 Slack 通知。

常用方法 & 常见坑点提醒

A. 防止误封正常使用者——规则顺序很关键

先放行可信任流量,再执行限制或丢弃操作。例如这方面,

# 放行本地回环和已建立连接
iptables ‑A INPUT ‑i lo ‑j ACCEPT
iptables ‑A INPUT ‑m conntrack ‑‑ctstate ESTABLISHED。RELATED ‑j ACCEPT
# 再放行必要端口
iptables ‑A INPUT ‑p tcp ‑‑dport 22 ‑j ACCEPT
iptables ‑A INPUT ‑p tcp ‑‑dport 80 ‑j ACCEPT
iptables ‑A INPUT ‑p tcp ‑‑dport 443 ‑j ACCEPT
# 最终才是速率限制或黑名单…

B. 测试再上线——避免“杀鸡用牛刀”

- 在测试环境先执行 -C 参数验证规则是否冲突。

- 使用 -L –v –n –x 查看命令计数,确认新规则生效且不会导致合法流量被大量丢弃。

C. 定期备份 & 恢复

# 导出当前规则集为备份文件
sudo iptables‑save> /etc/iptables/rules.v4.backup
# 如需恢复
sudo iptables‑restore 

从完整防御示例来看。从零到实战的一套脚本合集


把“防御成本”转化为“业务可靠性”

DDoS 攻击看似不可阻挡,但通过 iptables+脚本+Fail2Ban+日志监控** 的组合,你可以在攻击初期即快速识别并自动封禁高危 IP,同时确保正常使用者的访问体验不受影响。记得定期审计规则、做好备份,并结合上层 CDN/WAF 做层叠防护。这样才能真正把网站的稳定性提高到公司级水平。

.

标签:Linux