iptables 配置
教学目标
- 掌握 iptables 的基本概念和工作原理
- 熟悉 iptables 的命令语法和规则结构
- 学会配置和管理 iptables 规则
- 能够应用 iptables 解决实际网络安全问题
- 了解 iptables 的常见故障排除方法
主要知识点
1. iptables 基本概念
- iptables:Linux 系统内置的防火墙工具,基于 Netfilter 框架
- 表(Tables):iptables 包含多个表,每个表负责不同的功能
filter表:默认表,用于过滤数据包nat表:用于网络地址转换mangle表:用于修改数据包raw表:用于处理原始数据包security表:用于 SELinux 相关功能
- 链(Chains):每个表包含多个链,链是规则的集合
INPUT链:处理进入本机的数据包OUTPUT链:处理从本机发出的数据包FORWARD链:处理转发的数据包PREROUTING链:在路由前处理数据包POSTROUTING链:在路由后处理数据包
2. iptables 命令语法
# 基本语法
iptables [-t 表名] 命令 [链名] [匹配条件] [-j 目标动作]
# 常用命令选项
-A, --append:向链中添加规则
-I, --insert:在链中插入规则
-D, --delete:删除链中的规则
-R, --replace:替换链中的规则
-L, --list:列出链中的规则
-F, --flush:清空链中的规则
-Z, --zero:清空链的计数器
-N, --new-chain:创建新链
-X, --delete-chain:删除空链
-P, --policy:设置链的默认策略
# 常用匹配条件
-s, --source:指定源 IP 地址
-d, --destination:指定目标 IP 地址
-p, --protocol:指定协议(tcp, udp, icmp 等)
--sport:指定源端口
--dport:指定目标端口
-i, --in-interface:指定入站接口
-o, --out-interface:指定出站接口
# 常用目标动作
ACCEPT:接受数据包
DROP:丢弃数据包
REJECT:拒绝数据包并返回错误信息
LOG:记录日志
REDIRECT:重定向数据包
SNAT:源地址转换
DNAT:目标地址转换3. iptables 规则管理
查看规则:
iptables -L -n -v # 以数字形式显示,显示详细信息 iptables -t nat -L # 查看 nat 表的规则添加规则:
# 允许 SSH 连接 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 HTTP 和 HTTPS 连接 iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT # 允许 ICMP 数据包(ping) iptables -A INPUT -p icmp -j ACCEPT删除规则:
# 通过规则编号删除 iptables -D INPUT 1 # 通过完整规则删除 iptables -D INPUT -p tcp --dport 22 -j ACCEPT设置默认策略:
# 设置 INPUT 链默认拒绝 iptables -P INPUT DROP # 设置 FORWARD 链默认拒绝 iptables -P FORWARD DROP # 设置 OUTPUT 链默认接受 iptables -P OUTPUT ACCEPT保存和恢复规则:
# 保存规则(CentOS/RHEL) service iptables save # 保存规则(Debian/Ubuntu) iptables-save > /etc/iptables/rules.v4 # 恢复规则 iptables-restore < /etc/iptables/rules.v4
4. iptables 应用场景
- 基本防火墙设置:保护服务器免受未授权访问
- 端口转发:将外部请求转发到内部服务器
- 网络地址转换:实现多台设备共享一个公网 IP
- 流量过滤:根据源 IP、目标 IP、端口等过滤流量
- 速率限制:防止 DDoS 攻击
5. iptables 安全最佳实践
- 遵循最小权限原则:只允许必要的流量
- 定期备份 iptables 规则
- 使用默认拒绝策略,只允许明确授权的流量
- 定期审查和更新 iptables 规则
- 结合其他安全措施,如入侵检测系统
实用案例分析
案例 1:基本防火墙配置
场景:配置一个基本的防火墙,只允许 SSH、HTTP 和 HTTPS 连接。
配置步骤:
# 清空现有规则
iptables -F
iptables -X
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许回环接口
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许 SSH 连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP 和 HTTPS 连接
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# 允许 ICMP 数据包(可选)
iptables -A INPUT -p icmp -j ACCEPT
# 查看配置结果
iptables -L -n -v
# 保存规则
iptables-save > /etc/iptables/rules.v4案例 2:端口转发配置
场景:将外部访问服务器 8080 端口的流量转发到内部 192.168.1.100 的 80 端口。
配置步骤:
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 配置端口转发
# PREROUTING 链:修改目标地址
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
# POSTROUTING 链:修改源地址(确保返回流量正确)
iptables -t nat -A POSTROUTING -d 192.168.1.100 -p tcp --dport 80 -j SNAT --to-source 192.168.1.1
# 允许转发流量
iptables -A FORWARD -d 192.168.1.100 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.1.100 -p tcp --sport 80 -j ACCEPT案例 3:速率限制配置
场景:限制来自同一 IP 的 SSH 连接请求速率,防止暴力破解。
配置步骤:
# 创建一个新链用于速率限制
iptables -N SSH_RATE_LIMIT
# 配置速率限制规则(每分钟最多 6 个新连接)
iptables -A SSH_RATE_LIMIT -m recent --name ssh --rcheck --seconds 60 --hitcount 6 -j DROP
iptables -A SSH_RATE_LIMIT -m recent --name ssh --set -j ACCEPT
# 应用速率限制规则到 SSH 连接
iptables -A INPUT -p tcp --dport 22 -j SSH_RATE_LIMIT课后练习
基本防火墙配置:
- 配置一个基本的防火墙,只允许 SSH(22)、HTTP(80)、HTTPS(443)和 MySQL(3306)端口的连接
- 设置默认策略为拒绝所有未明确允许的流量
- 验证配置是否生效
端口转发练习:
- 将外部访问服务器 3389 端口的流量转发到内部 192.168.1.200 的 3389 端口(远程桌面)
- 测试转发是否正常工作
速率限制练习:
- 配置对 HTTP 服务的速率限制,防止 DoS 攻击
- 测试速率限制是否生效
规则管理练习:
- 备份当前的 iptables 规则
- 修改规则,添加对 FTP 服务(21)的支持
- 恢复之前备份的规则
故障排除练习:
- 模拟一个场景:配置完 iptables 后,SSH 无法连接
- 分析并解决这个问题
总结
本章节详细介绍了 Linux 系统中 iptables 防火墙的配置方法,包括:
- iptables 的基本概念和工作原理
- iptables 的命令语法和规则结构
- 常见的 iptables 规则配置方法
- 实际应用场景的解决方案
- 安全最佳实践和故障排除技巧
通过学习本章节,您应该能够熟练使用 iptables 配置和管理 Linux 系统的防火墙,保护服务器和网络的安全。在实际应用中,建议根据具体的网络环境和安全需求,制定合适的防火墙策略,并定期审查和更新规则,以应对不断变化的安全威胁。
扩展阅读
- iptables 官方文档:详细的 iptables 官方文档
- Linux 防火墙教程:DigitalOcean 的 iptables 教程
- 网络安全最佳实践:CIS Linux 安全基准
- iptables 规则生成器:在线 iptables 规则生成工具