简介

iptables是Linux系统中最重要的网络安全工具之一,它通过配置防火墙规则来控制网络流量,保护系统安全。本指南将帮助您深入理解iptables的工作原理和使用方法。

主要功能:
  • 数据包过滤
  • 网络地址转换(NAT)
  • 数据包修改
  • 连接跟踪
  • 日志记录

基本概念

表(Tables)

表名 用途
filter 默认表,负责数据包过滤
nat 网络地址转换
mangle 数据包修改
raw 连接跟踪配置

链(Chains)

预定义链:

  • INPUT:处理入站数据包
  • OUTPUT:处理出站数据包
  • FORWARD:处理转发数据包
  • PREROUTING:路由前处理
  • POSTROUTING:路由后处理

规则(Rules)

规则组成:
  • 匹配条件(Match)
  • 处理动作(Target)
  • 规则选项(Options)

规则管理

基本操作

查看规则:

iptables -L -n -v

添加规则:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

删除规则:

iptables -D INPUT 1

清空规则:

iptables -F

常用参数

参数 说明 示例
-A 添加规则到末尾 iptables -A INPUT
-I 插入规则到开头 iptables -I INPUT
-D 删除规则 iptables -D INPUT 1
-p 协议类型 iptables -A INPUT -p tcp
--dport 目标端口 iptables -A INPUT -p tcp --dport 80

NAT配置

SNAT配置

# 源地址转换
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.2.3.4

# 动态源地址转换
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

DNAT配置

# 端口转发
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080

# 地址转换
iptables -t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to-destination 192.168.1.100

常见场景

基本防护配置

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT

# 允许SSH访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许Web访问
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

# 默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

防止常见攻击

# 防止SYN洪水
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

# 防止端口扫描
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# 防止ICMP flood
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT

最佳实践

规则设计原则

  • 从严原则:默认拒绝,按需放行
  • 最小权限:只开放必要的端口和服务
  • 规则顺序:高频规则放前面
  • 注意备份:保存规则配置

规则持久化

保存规则:

iptables-save > /etc/iptables/rules.v4

恢复规则:

iptables-restore < /etc/iptables/rules.v4
安全提示:
  • 谨慎使用ACCEPT ALL规则
  • 定期审查防火墙规则
  • 记录重要的防火墙日志
  • 测试环境验证规则