温馨提示×

centos防火墙如何防止DDoS

小樊
35
2025-12-31 03:24:34
栏目: 云计算

CentOS 防火墙防 DDoS 实操指南

一、先明确防护边界与原则

  • 防火墙(iptables/firewalld)主要能缓解网络层/传输层的洪泛与滥用(如 SYN Flood、UDP Flood、ICMP Flood),对**应用层 HTTP 洪水(CC)**效果有限,需结合 WAF/限流/验证码/业务策略共同防御。
  • 目标是“丢恶留善、限流保活”:优先放行已建立连接必要流量,对异常来源与异常速率进行限速、并发限制、黑白名单处置。
  • 大流量攻击应尽快启用上游清洗/CDN/运营商黑洞等边界手段,本机防火墙仅作“最后一道防线”。

二、iptables 基线加固与速率限制

  • 基线策略(按需精简,务必先确保业务可达,再逐步收紧):
    • 放行回环与已建立连接,限制新连接速率,丢弃异常包:
      # 允许回环
      iptables -A INPUT -i lo -j ACCEPT
      iptables -A OUTPUT -o lo -j ACCEPT
      
      # 放行已建立和相关连接
      iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
      
      # 按需放行业务端口(示例:SSH/HTTP/HTTPS)
      iptables -A INPUT -p tcp --dport 22   -m conntrack --ctstate NEW -j ACCEPT
      iptables -A INPUT -p tcp --dport 80   -m conntrack --ctstate NEW -j ACCEPT
      iptables -A INPUT -p tcp --dport 443  -m conntrack --ctstate NEW -j ACCEPT
      
      # 限制新 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
      
      # 限制 ICMP,避免 ICMP 洪水
      iptables -A INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
      iptables -A INPUT -p icmp -j DROP
      
      # 可选:限制 DNS UDP 53 端口速率(示例:每秒 5 个,突发 10 个)
      iptables -A INPUT -p udp --dport 53 -m limit --limit 5/s --limit-burst 10 -j ACCEPT
      iptables -A INPUT -p udp --dport 53 -j DROP
      
    • 说明:limit 模块用于“平均速率+突发”控制,先放行 burst 个包,再按平均速率放行,超出部分丢弃。
  • 每 IP 并发连接限制(防连接耗尽,示例对 80/443 限制每 IP 最多 10 个并发新连接):
    iptables -A INPUT -p tcp --syn --dport 80  -m connlimit --connlimit-above 10 -j REJECT
    iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 10 -j REJECT
    
  • 已知恶意来源快速封禁:
    iptables -A INPUT -s <攻击IP> -j DROP
    
  • 规则持久化(CentOS 7 常见做法):
    iptables-save > /etc/sysconfig/iptables
    systemctl enable --now iptables
    

以上做法分别利用了 iptables 的状态匹配、limit 限速、connlimit 并发限制黑白名单能力,适合在主机侧缓解常见洪泛与滥用。

三、firewalld 场景的等价配置

  • 启动与基础操作:
    systemctl start  firewalld
    systemctl enable firewalld
    firewall-cmd --reload
    firewall-cmd --list-all
    
  • 放行必要服务与端口(示例:HTTP/HTTPS/SSH):
    firewall-cmd --permanent --zone=public --add-service=http
    firewall-cmd --permanent --zone=public --add-service=https
    firewall-cmd --permanent --zone=public --add-port=22/tcp
    firewall-cmd --reload
    
  • 按源 IP 精细控制(白名单/黑名单):
    # 仅允许某 IP 访问 22
    firewall-cmd --permanent --zone=public \
      --add-rich-rule='rule family="ipv4" source address="1.2.3.4" port port="22" protocol="tcp" accept'
    
    # 将某网段直接丢弃(静默丢弃,不返回拒绝)
    firewall-cmd --permanent --zone=drop \
      --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" drop'
    firewall-cmd --reload
    
  • 说明:firewalld 支持区域(zone)富规则(rich-rule),便于对不同来源应用不同策略;对“每 IP 并发连接数”这类细粒度控制,通常仍建议用 iptables + connlimit 实现。

四、联动防护与检测

  • 自动封禁暴力来源(fail2ban):
    yum install -y fail2ban
    cat >/etc/fail2ban/jail.local <<'EOF'
    [DEFAULT]
    bantime  = 600
    findtime  = 600
    maxretry = 3
    
    [sshd]
    enabled  = true
    port     = ssh
    filter   = sshd
    logpath  = /var/log/secure
    maxretry = 3
    EOF
    systemctl enable --now fail2ban
    
  • 快速发现异常连接来源(便于临时处置或加入黑名单):
    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
    
  • 应急与观测:
    • 紧急止损(会中断当前会话,谨慎在远程环境使用):firewall-cmd --panic-on;恢复:firewall-cmd --panic-off
    • 观测规则命中:iptables -L -n -v --line-number;观测日志:tail -f /var/log/messages /var/log/secure
      以上工具与方法可联动实现“自动识别并封禁”与“快速定位异常来源”,与防火墙规则形成闭环。

五、按攻击类型的实用规则示例

攻击类型 主要特征 防火墙侧缓解要点
SYN Flood 海量 TCP SYN、半开连接堆积 限制每秒新 SYN 数(limit/–limit-burst),放行已建立连接,必要时缩短 TCP 半开等待或启用 syncookie(内核参数)
UDP Flood 大量 UDP 包冲击随机/特定端口 对高噪声端口(如 53)做速率限制,异常来源直接丢弃
ICMP Flood 大量 ping 包 全局限速或临时丢弃 ICMP,保留少量用于探测
HTTP 洪水(CC) 应用层高频合法形态请求耗尽后端 仅靠防火墙效果有限,建议叠加 WAF/验证码/人机识别/业务限流;Web 服务器(如 Tomcat)可下调 maxThreads、启用连接限制与反向代理/CDN 分担
以上规则与建议覆盖常见洪泛与滥用场景,应用层攻击需与WAF/业务策略协同处置。

0