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

课后练习

  1. 基本防火墙配置

    • 配置一个基本的防火墙,只允许 SSH(22)、HTTP(80)、HTTPS(443)和 MySQL(3306)端口的连接
    • 设置默认策略为拒绝所有未明确允许的流量
    • 验证配置是否生效
  2. 端口转发练习

    • 将外部访问服务器 3389 端口的流量转发到内部 192.168.1.200 的 3389 端口(远程桌面)
    • 测试转发是否正常工作
  3. 速率限制练习

    • 配置对 HTTP 服务的速率限制,防止 DoS 攻击
    • 测试速率限制是否生效
  4. 规则管理练习

    • 备份当前的 iptables 规则
    • 修改规则,添加对 FTP 服务(21)的支持
    • 恢复之前备份的规则
  5. 故障排除练习

    • 模拟一个场景:配置完 iptables 后,SSH 无法连接
    • 分析并解决这个问题

总结

本章节详细介绍了 Linux 系统中 iptables 防火墙的配置方法,包括:

  • iptables 的基本概念和工作原理
  • iptables 的命令语法和规则结构
  • 常见的 iptables 规则配置方法
  • 实际应用场景的解决方案
  • 安全最佳实践和故障排除技巧

通过学习本章节,您应该能够熟练使用 iptables 配置和管理 Linux 系统的防火墙,保护服务器和网络的安全。在实际应用中,建议根据具体的网络环境和安全需求,制定合适的防火墙策略,并定期审查和更新规则,以应对不断变化的安全威胁。

扩展阅读

« 上一篇 防火墙基础 下一篇 » firewalld 配置