一、概述:什么是iptables?

在Linux系统中,网络安全防护的核心工具之一便是iptables。它绝非一个简单的命令,而是一个功能强大的用户态工具,与Linux内核中的netfilter框架协同工作,共同构建了Linux的防火墙体系。理解iptables,意味着你获得了精细控制服务器网络流量的能力,是实现网络安全的基石。


二、核心架构:四表五链

要掌握iptables,必须首先理解其“四表五链”的规则组织结构。这好比一个高效的物流分拣中心

  • 规则(Rules):是具体的分拣指令(如“来自上海的包裹发往A区”)。
  • 链(Chains):是挂在不同节点的分拣流水线,负责在特定时机处理数据包。
  • 表(Tables):是规则链的集合,每种表专用于处理一类特定的网络任务。
1. 四张表(Tables):按功能划分
表名核心功能内置链
raw连接跟踪处理,用于决定是否对数据包进行状态跟踪PREROUTING, OUTPUT
mangle拆改数据包,可修改TOS、TTL等报文头信息PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
nat网络地址转换,实现SNAT(源地址转换)和DNAT(目标地址转换)PREROUTING, OUTPUT, POSTROUTING
filter最常用的表,负责过滤数据包,决定是否放行INPUT, FORWARD, OUTPUT

优先级顺序raw -> mangle -> nat -> filter

2. 五条链(Chains):按时机划分

数据包在网络栈中的不同处理节点被称为“链”:

  • INPUT:处理发往本机的数据包(入站)。
  • OUTPUT:处理本机发出的数据包(出站)。
  • FORWARD:处理经本机转发的数据包(网关)。
  • PREROUTING:在路由决策之前修改数据包(通常用于DNAT)。
  • POSTROUTING:在路由决策之后修改数据包(通常用于SNAT)。
3. 数据包处理流程

一个数据包的“一生”会经历以下路径,与链息息相关:

  1. 入站数据PREROUTING -> INPUT -> 本机进程
  2. 转发数据PREROUTING -> FORWARD -> POSTROUTING
  3. 出站数据本机进程 -> OUTPUT -> POSTROUTING

三、iptables语法与操作指南
1. 基本命令结构
iptables -t <表名> <管理选项> <链名> <匹配条件> -j <控制类型>
  • -t:指定操作的表,默认为filter
  • 管理选项:指定操作方式,如添加、删除、查看规则。
  • 链名:指定操作的链。
  • 匹配条件:指定要过滤的数据包特征。
  • -j:指定数据包的处理方式(控制类型)。
2. 常用管理选项
选项全称功能说明示例
-AAppend在链的末尾追加规则iptables -A INPUT ...
-IInsert在链的指定位置插入规则(默认为开头)iptables -I INPUT 2 ...
-DDelete删除指定的规则iptables -D INPUT 3
-LList查看规则列表iptables -L -n -v
-FFlush清空链中的所有规则iptables -F
-PPolicy设置链的默认策略iptables -P INPUT DROP
-nnumeric以数字形式显示地址和端口(常与-L联用)iptables -nL
--line-numbers显示规则的行号(便于删除)iptables -L --line-numbers
3. 常见控制类型(-j 参数)
控制类型作用
ACCEPT允许数据包通过
DROP丢弃数据包,不响应任何信息(更安全)
REJECT拒绝数据包,并向发送方返回拒绝信息(更友好)
LOG将匹配的数据包信息记录到日志(/var/log/messages),然后继续匹配下一条规则
SNAT源地址转换,用于内网机器共享公网IP上网
DNAT目标地址转换,用于将公网IP的请求映射到内网服务器

四、实战案例:常用规则配置
  1. 禁止任何主机ping本机

    iptables -t filter -A INPUT -p icmp -j REJECT
    # 更严格的设置(无响应)
    # iptables -t filter -A INPUT -p icmp -j DROP
    
  2. 禁止所有从ens33网卡进来的SSH连接请求

    iptables -A INPUT -i ens33 -p tcp --dport 22 -j DROP
    
  3. 查看并管理规则

    # 查看INPUT链的规则,并显示行号
    iptables -L INPUT --line-numbers
    
    # 删除INPUT链的第2条规则
    iptables -D INPUT 2
    
    # 清空INPUT链的所有规则
    iptables -F INPUT
    
  4. 设置默认策略(最后的安全防线)

    # 配置默认拒绝所有入站连接,然后单独开放所需端口(白名单策略,最安全)
    iptables -P INPUT DROP
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许HTTP
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允许HTTPS
    iptables -A INPUT -i lo -j ACCEPT # 允许本地回环通信
    

在这里插入图片描述
在这里插入图片描述


五、总结

iptables是Linux网络安全的基石,通过其高度灵活的“四表五链”结构,实现了对网络流量极其精细的控制。掌握它需要理解:

  1. 核心概念netfilteriptables的关系,以及四表五链的划分依据和工作流程。
  2. 语法精髓:规则的增删改查命令,特别是-A, -I, -D, -P, -j等关键选项。
  3. 最佳实践:采用白名单策略(默认拒绝,按需放行)是构建安全系统的黄金法则。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐