linux系统的Linux iptables 规则详解

iptables 是 Linux 系统的防火墙工具,它通过定义规则来控制网络数据包的流动。理解 iptables 需要掌握几个核心概念:

一、核心概念

  1. 表(Tables)

    • filter:默认表,用于包过滤(允许/拒绝)

    • nat:网络地址转换(端口转发、IP伪装)

    • mangle:修改包内容(TTL、TOS等)

    • raw:连接跟踪前处理

    • security:SELinux相关安全规则

  2. 链(Chains)

    • INPUT:处理进入本机的数据包

    • OUTPUT:处理本机发出的数据包

    • FORWARD:处理经过本机转发的数据包

    • PREROUTING:路由前处理(DNAT)

    • POSTROUTING:路由后处理(SNAT)

  3. 目标(Targets)

    • ACCEPT:允许数据包通过

    • DROP:丢弃数据包(无响应)

    • REJECT:拒绝数据包(发送拒绝响应)

    • LOG:记录日志

    • SNAT:源地址转换

    • DNAT:目的地址转换

二、规则语法格式

iptables [-t 表名] <命令> <链名> [规则号] [匹配条件] -j <目标>

三、常用命令选项

选项说明
-A在链尾添加规则
-I在指定位置插入规则
-D删除规则
-L列出规则
-F清空规则
-P设置链的默认策略
-N创建新链
-X删除自定义链

四、常用匹配条件

匹配条件说明示例
-p协议-p tcp-p udp-p icmp
-s源地址-s 192.168.1.0/24
-d目的地址-d 10.0.0.1
-i输入接口-i eth0
-o输出接口-o wlan0
--sport源端口--sport 80
--dport目的端口--dport 22
-m扩展模块-m state --state RELATED,ESTABLISHED

五、规则编写示例

1. 基础过滤规则
# 允许SSH访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 阻止特定IP
iptables -A INPUT -s 192.168.1.100 -j DROP

# 允许已建立连接的数据包
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 默认策略(放在最后)
iptables -P INPUT DROP
2. NAT 规则
# 源地址转换(SNAT)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 目的地址转换(DNAT)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080

# 端口转发
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-port 22
3. 高级规则
# 限制连接速率
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

# 记录并丢弃非法包
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "INVALID: "
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# 创建自定义链
iptables -N WEBSERVER
iptables -A WEBSERVER -p tcp --dport 80 -j ACCEPT
iptables -A WEBSERVER -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j WEBSERVER

六、规则理解技巧

  1. 处理顺序

    数据包 -> PREROUTING -> 路由决策 -> FORWARD -> POSTROUTING
                    ↓
                 INPUT -> 本地进程 -> OUTPUT
  2. 匹配原则

    • 规则按顺序匹配,第一条匹配的规则生效

    • 没有匹配规则时,使用链的默认策略

    • -j LOG 会继续匹配后续规则

    • -j REJECT/DROP 会终止匹配

  3. 连接跟踪

    # 查看连接跟踪状态
    cat /proc/net/nf_conntrack
    
    # 状态类型:
    # NEW:新连接
    # ESTABLISHED:已建立连接
    # RELATED:相关连接(如FTP数据连接)
    # INVALID:无效包

七、调试与维护

  1. 规则查看

    iptables -L -n -v  # 查看所有规则(数字格式)
    iptables -t nat -L # 查看NAT表规则
  2. 规则保存与恢复

    # 保存规则
    iptables-save > /etc/iptables/rules.v4
    
    # 恢复规则
    iptables-restore < /etc/iptables/rules.v4
  3. 日志监控

    tail -f /var/log/kern.log | grep 'IN='

八、最佳实践

  1. 安全策略

    # 设置默认拒绝策略
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    
    # 允许回环接口
    iptables -A INPUT -i lo -j ACCEPT
    
    # 允许已建立连接
    iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    
    # 按需开放端口
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # SSH
  2. 性能优化

    # 将常用规则放在前面
    # 使用ipset管理大IP列表
    # 避免复杂规则链嵌套
  3. 防御攻击

    # 防SYN洪水攻击
    iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
    
    # 防端口扫描
    iptables -N PORTSCAN
    iptables -A PORTSCAN -m limit --limit 1/s -j LOG --log-prefix "Portscan: "
    iptables -A PORTSCAN -j DROP
    iptables -A INPUT -m recent --name portscan --rcheck --seconds 60 -j PORTSCAN

九、学习资源

  1. 可视化工具

    • iptables-apply:测试规则安全

    • shorewall:高级防火墙配置工具

  2. 调试命令

    # 跟踪数据包处理路径
    iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE
    dmesg -w

掌握 iptables 需要实践,建议在测试环境中练习规则编写。理解网络协议和连接状态跟踪机制是成为 iptables 高手的关键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值