目录
[1. IPTables](#1. IPTables)
[2. 调整防护策略](#2. 调整防护策略)
[3. 限速(Rate Limiting)](#3. 限速(Rate Limiting))
[4. 软件层防护](#4. 软件层防护)
[🌰 实际案例](#🌰 实际案例)
[1. 限制单个IP的HTTP请求速率](#1. 限制单个IP的HTTP请求速率)
[2. 限制并发连接数](#2. 限制并发连接数)
[3. 封禁异常User-Agent](#3. 封禁异常User-Agent)
[4. 拦截慢速攻击](#4. 拦截慢速攻击)
[5. 设置白名单](#5. 设置白名单)
[6. 定期清理旧规则](#6. 定期清理旧规则)
[7. 持久化保存配置](#7. 持久化保存配置)
[⚠️ 注意事项](#⚠️ 注意事项)
[1. 快速封禁攻击源IP段](#1. 快速封禁攻击源IP段)
[2. HTTP层精细化过滤](#2. HTTP层精细化过滤)
[3. 全局连接数管控](#3. 全局连接数管控)
[1. 实时监控规则命中情况](#1. 实时监控规则命中情况)
[2. 业务健康检查](#2. 业务健康检查)
[1. 规则持久化](#1. 规则持久化)
[2. 构建分层防御体系](#2. 构建分层防御体系)
[📊 案例效果数据](#📊 案例效果数据)
[⚠️ 关键注意事项](#⚠️ 关键注意事项)

Linux防火墙介绍
1. IPTables
-
是Linux系统自带的防火墙工具,用于配置网络数据包的过滤规则(允许/拒绝特定流量)。
-
功能示例:
-
封禁恶意IP地址
-
控制端口访问权限(如仅开放80/443端口)
-
实现网络地址转换(NAT)
-
2. 调整防护策略
指通过修改IPTables规则,动态应对攻击行为。例如:
# 封禁特定IP(如攻击源)
iptables -A INPUT -s [攻击IP] -j DROP
# 仅允许特定端口(如Web服务)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP # 拒绝其他所有流量
3. 限速(Rate Limiting)
通过限制连接频率防止资源耗尽攻击(如DDoS):
# 限制同一IP每秒最多10个新连接
iptables -A INPUT -p tcp --syn -m limit --limit 10/s -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
4. 软件层防护
-
特点: 在操作系统层面通过软件配置实现防护,灵活性高、成本低,但依赖服务器性能。
-
典型应用场景:
-
防御SYN Flood攻击
-
阻止端口扫描
-
缓解CC攻击(HTTP请求洪水)
-
🌰 实际案例
若服务器遭遇DDoS攻击,管理员可能通过以下步骤防御:
-
分析攻击特征(如高频来源IP/特定协议)
-
动态更新IPTables规则封禁攻击IP或限制速率
-
监控流量变化并调整规则策略
Linux防火墙基础防御策略
一、基础防护策略
1. 限制单个IP的HTTP请求速率
# 允许每秒最多20个新HTTP连接,超出则丢弃
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP
# 限制每个IP每秒最多10个HTTP请求(针对短连接攻击)
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 10/second --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j DROP
2. 限制并发连接数
# 每个IP最多保持50个HTTP并发连接
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT
二、高级过滤规则
3. 封禁异常User-Agent
常见攻击工具使用特殊UA标识(如"X-attacker"):
# 封禁含特定关键词的请求
iptables -A INPUT -p tcp --dport 80 -m string --string "User-Agent: X-attacker" --algo bm -j DROP
4. 拦截慢速攻击
防御类似Slowloris的攻击(长时间保持不完整连接):
# 丢弃HTTP头传输时间超过60秒的连接
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
三、优化与维护
5. 设置白名单
避免误封合法IP(如搜索引擎或API客户端):
# 允许信任IP段(如192.168.1.0/24)无限制访问
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT
6. 定期清理旧规则
# 查看当前规则(确认无冲突)
iptables -L -n -v
# 删除旧测试规则(例如删除INPUT链第3条规则)
iptables -D INPUT 3
7. 持久化保存配置
# Debian/Ubuntu
iptables-save > /etc/iptables/rules.v4
# CentOS/RHEL
service iptables save
⚠️ 注意事项
若攻击规模极大(超过1Gbps),建议启用云服务商的流量清洗服务(如AWS Shield/AliCloud Anti-DDoS)。
-
性能影响:高频率规则匹配可能增加CPU负载,建议在攻击缓解后适当放宽限制
-
组合防御 :结合Web服务器层防护(如Nginx的
limit_req模块)效果更佳 -
监控调整 :实时观察日志
/var/log/iptables.log,动态更新封禁阈值
实际案例分析结合Iptable
一、攻击特征分析(前5分钟)
通过监控发现异常指标:
# 查看当前80端口连接数(发现5000+ ESTABLISHED连接)
netstat -ant | grep ':80 ' | wc -l
# 统计TOP10源IP(发现3个IP各占30%流量)
netstat -ant | grep ':80 ' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
攻击特征:
-
高频GET/POST请求(300+次/秒/IP)
-
User-Agent包含[Go-http-client/1.1]
-
请求路径集中在[/api/search]接口
二、紧急防御配置(8分钟)
1. 快速封禁攻击源IP段
# 封禁TOP3攻击IP(假设为101.203.74.0/24)
iptables -I INPUT -s 101.203.74.0/24 -j DROP
# 设置IP黑名单自动更新(每10分钟拉取最新攻击IP)
*/10 * * * * curl -s https://attacker-ip-list.com/ddos.txt | xargs -I {} iptables -A INPUT -s {} -j DROP
2. HTTP层精细化过滤
# 拦截特定User-Agent
iptables -A INPUT -p tcp --dport 80 -m string --string "Go-http-client/1.1" --algo bm -j DROP
# 限制/search接口访问频率(每秒5次)
iptables -A INPUT -p tcp --dport 80 -m string --string "/api/search" --algo bm \
-m hashlimit --hashlimit-name search_limit --hashlimit 5/second --hashlimit-burst 10 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m string --string "/api/search" --algo bm -j DROP
3. 全局连接数管控
# 限制单个IP最大并发连接数
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT
# 防御SYN Flood(半连接队列保护)
iptables -N SYN_FLOOD
iptables -A SYN_FLOOD -m limit --limit 1000/second --limit-burst 2000 -j RETURN
iptables -A SYN_FLOOD -j DROP
iptables -A INPUT -p tcp --syn -j SYN_FLOOD
三、攻击缓解验证(5分钟)
1. 实时监控规则命中情况
# 查看规则计数器(观察DROP规则增长速率)
iptables -L -n -v | grep DROP
# 流量统计(确认HTTP请求量下降70%+)
iftop -i eth0 -f 'port 80'
2. 业务健康检查
# 测试核心接口响应(返回200为正常)
curl -I -X GET http://localhost/api/product/123 -H "User-Agent: Mozilla/5.0"
四、事后加固措施(攻击停止后)
1. 规则持久化
# 保存当前生效规则(Debian系)
iptables-save > /etc/iptables/rules.v4
# 设置开机自动加载
echo "pre-up iptables-restore < /etc/iptables/rules.v4" >> /etc/network/interfaces
2. 构建分层防御体系
| 防御层 | 工具配置 |
|---|---|
| 网络层 | iptables + Cloudflare Spectrum |
| 应用层 | Nginx limit_req模块 + WAF规则更新 |
| 日志层 | 部署ELK收集iptables日志,设置自动告警阈值 |
📊 案例效果数据
| 指标 | 攻击发生时 | 防御生效后 | 降幅 |
|---|---|---|---|
| CPU使用率 | 98% | 45% | ▼54% |
| HTTP错误率 | 82% | 3% | ▼79% |
| API响应时间 | 12s | 230ms | ▲98% |
⚠️ 关键注意事项
-
规则顺序敏感
-I(插入)和-A(追加)的区别:紧急规则需插入到链首# 错误示例:封禁IP的规则被后续ACCEPT规则覆盖 iptables -A INPUT -s 1.2.3.4 -j DROP # 应改用-I -
性能陷阱 避免使用高消耗匹配模块(如
string),必要时改用Nginx层过滤 -
云环境适配 若服务器位于AWS/AliCloud,需同步配置安全组规则:
# AWS CLI批量封禁IP aws ec2 update-security-group-rule-descriptions --group-id sg-xxx \ --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "IpRanges": [{"CidrIp": "101.203.74.0/24", "Description": "DDoS Block"}]}]'