如何配置Linux防火墙防止DDoS攻击
导读:Linux 防火墙防 DDoS 实操指南 一、目标与总体思路 在系统层面通过 内核参数 提升抗洪能力,在防火墙层面用 iptables/nftables 做速率限制、异常包丢弃与黑白名单治理,在应用前尽早过滤以减小内核与连接跟踪压力。 对...
Linux 防火墙防 DDoS 实操指南
一、目标与总体思路
- 在系统层面通过 内核参数 提升抗洪能力,在防火墙层面用 iptables/nftables 做速率限制、异常包丢弃与黑白名单治理,在应用前尽早过滤以减小内核与连接跟踪压力。
- 对于大规模或应用层(HTTP/HTTPS)攻击,仅靠本机防火墙难以完全抵御,建议叠加 CDN/WAF/上游清洗 等能力。
二、内核参数优化(sysctl)
- 启用 SYN Cookie、增大 SYN 队列、降低重试,缓解 SYN Flood:
- net.ipv4.tcp_syncookies = 1
- net.ipv4.tcp_max_syn_backlog = 16384
- net.ipv4.tcp_synack_retries = 1
- net.ipv4.tcp_syn_retries = 2
- 提升网络与连接处理能力,减少丢包与排队:
- net.core.netdev_max_backlog = 262144
- net.core.somaxconn = 65535
- net.core.rmem_default = 31457280;net.core.rmem_max = 67108864
- net.core.wmem_default = 31457280;net.core.wmem_max = 67108864
- net.ipv4.tcp_rmem = 4096 87380 33554432
- net.ipv4.tcp_wmem = 4096 87380 33554432
- 缩短 TIME_WAIT 回收,减轻端口与连接表压力:
- net.ipv4.tcp_max_tw_buckets = 1440000
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 10
- 连接跟踪与端口范围(按内存与业务评估,过大可能占用较多内存):
- net.netfilter.nf_conntrack_max = 10000000
- net.netfilter.nf_conntrack_tcp_timeout_established = 1800
- net.ipv4.ip_local_port_range = 1024 65000
- 应用与持久化:
- 将以上写入 /etc/sysctl.conf 或 /etc/sysctl.d/99-ddos.conf,执行
sysctl -p生效。
- 将以上写入 /etc/sysctl.conf 或 /etc/sysctl.d/99-ddos.conf,执行
三、iptables 规则模板(按“尽早丢弃、分层限速”的原则)
- 基础放行与安全加固(示例为 INPUT 链,按需调整):
- 允许回环与已建立连接:
- iptables -A INPUT -i lo -j ACCEPT
- iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- 丢弃无效包与异常 TCP(建议在 mangle/PREROUTING 尽早处理,性能更好):
- iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP
- iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
- 允许回环与已建立连接:
- 速率限制(示例阈值,需按业务压测微调):
- 全局限制新 SYN(每秒 1 个,突发 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
- 针对 Web 端口(80/443)限制新连接速率(每秒 10 个,突发 20 个):
- iptables -A INPUT -p tcp --dport 80,443 -m limit --limit 10/s --limit-burst 20 -j ACCEPT
- iptables -A INPUT -p tcp --dport 80,443 -j DROP
- 限制 ICMP(每秒 1 个,突发 3 个;如需完全禁 ping 可改为 DROP):
- iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 3 -j ACCEPT
- iptables -A INPUT -p icmp -j DROP
- 限制每个源 IP 的并发连接数(超过 5 个新连接即丢弃,缓解连接耗尽):
- iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 5 -j DROP
- 全局限制新 SYN(每秒 1 个,突发 3 个):
- 黑白名单与端口封禁(按需):
- 封禁单个 IP:iptables -A INPUT -s 1.2.3.4 -j DROP
- 封禁网段:iptables -A INPUT -s 203.0.113.0/24 -j DROP
- 封禁端口:iptables -A INPUT -p tcp --dport 23 -j DROP
- 说明:
- 上述规则顺序很重要,命中 ACCEPT 后不再继续匹配;对高包率场景,尽量把过滤规则放到 mangle/PREROUTING 以更早丢弃。
四、按发行版与场景的落地要点
- CentOS/RHEL(iptables 为主):
- 默认策略建议:INPUT/FORWARD DROP,OUTPUT ACCEPT;务必先放行 SSH 与已建立连接,再叠加限速与黑白名单。
- 规则持久化:
iptables-save > /etc/sysconfig/iptables或使用service iptables save(视系统而定)。
- Ubuntu/Debian(可用 ufw 简化管理):
- 启用与基础放行:
ufw enable、ufw allow **22/tcp**、ufw allow **80,443/tcp** - 对暴力登录限速:
ufw limit **ssh/tcp** - 封禁 IP:
ufw deny from **1.2.3.4** to any - 如需更细粒度控制,可在 ufw 之上用
iptables补充规则。
- 启用与基础放行:
- Web 服务叠加防护(Nginx 示例):
- 在 http {
}
定义限流区:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=**1r/s**; - 在 server {
}
应用:
limit_req zone=mylimit burst=**5** nodelay; - 与防火墙限速配合,可显著降低应用层压力。
- 在 http {
}
定义限流区:
五、监控、联动与边界防护
- 自动封禁与日志联动:
- 使用 fail2ban 监控服务日志并自动封禁恶意 IP(如 SSH、Nginx),配置
bantime、findtime、maxretry并结合防火墙规则持久化封禁。
- 使用 fail2ban 监控服务日志并自动封禁恶意 IP(如 SSH、Nginx),配置
- 连接数/来源分析(排查与取证):
- 统计连接数 Top IP:
netstat -ntu | awk '{ print $5} ' | cut -d: -f1 | sort | uniq -c | sort -nr | head - 观察异常连接:
netstat -an | grep ":80" | grep ESTABLISHED - 实时监控带宽与连接:
iftop、nload、ss -s。
- 统计连接数 Top IP:
- 边界与上游:
- 对于 UDP 放大/反射 等大流量攻击,本机防火墙效果有限,建议在 CDN/WAF/上游清洗 侧拦截与缓解,再回注干净流量。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何配置Linux防火墙防止DDoS攻击
本文地址: https://pptw.com/jishu/770966.html
