linux防火墙 iptables和其他防火墙的总结--20250809

发布于:2025-08-10 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、 什么是 iptables

iptables 主要工作在网络层,可以通过规则控制数据包的进出方向、源/ 目的地址、源/目的端口等信息,来实现对包的过滤、转发、重定向等操作。 由软件包 iptables 提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往 netfilter ,告诉内核如何去处理信息包。

二、 iptables 的组成有哪些以及作用

1.Chain(链)

链是 iptables 规则的容器,用于存放一组规则。Linux 内核中预定义了五个链:INPUT、FORWARD、OUTPUT、PREROUTING 和 POSTROUTING。具体功能如下:
链(Chain) 功能描述
INPUT 匹配进入本机,并且目标 IP 是本机地址的数据包
FORWARD 匹配由本机进行转发的数据包
OUTPUT 匹配由本机发出的数据包
PREROUTING 匹配刚到达本机的所有数据包,可用于修改目的地址,通常用于实现 DNAT 功能
POSTROUTING 匹配即将离开本机的数据包,可用于修改源地址,通常用于实现 SNAT 功能
自定义链
用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有 Hook 钩子调用 自定义链时,才会生效。

2. Rule(规则)

规则定义了对数据包进行处理的具体动作,由匹配条件和动作两部分组成。匹配条件可以是数据包的源地址、目的地址、端口等信息,动作可以是 ACCEPT(允许通过)、DROP(丢弃数据包)、REJECT(拒绝) 等。配置规则时需要指定所属的表和链,如果不指定表则默认为 filter 表。

3. Table(表)

表是存放链的容器,每个表包含若干个链。iptables 中有四个预定义的表: filter 、nat、mangle 和 raw,其中 filter 和 nat 表是被使用最多的,分别用于数据包过滤和网络地址转换功能。默认filter表
表名 备注说明
filter 过滤规则表,根据预定义规则过滤符合条件数据包,为 iptables 默认表
nat 全称 Network Address Translation,用于实现网络地址转换(如 SNAT、DNAT )
mangle 修改数据标记位规则表,可修改数据报文的标记、头部等信息
raw 关闭连接跟踪机制,加快数据包穿越防火墙速度,常用于高性能场景
security 用于强制访问控制(MAC )网络规则,依托 Linux 安全模块(如 SELinux ),实际较少使用
表的优先级(从高到低) :security -- > raw -- > mangle -- > nat -- > filter    
链和表的对应关系( 不是每个链都能支持五个表 确认每个表所支持的链,可以通过此命令来定位:  iptables - t 表名  - vnL 
表名 可支持的链
raw PREROUTING,OUTPUT
mangle PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
nat PREROUTING,POSTROUTING,INPUT,OUTPUT
filter INPUT,FORWARD,OUTPUT

三、iptables 的使用方法

强烈注意: iptables 命令,仅能用 root 命令操作 , 但是不影响查看帮

1. 显示规则

要查看当前的 iptables 规则,可以使用命令:iptables -L   
这将显示所有规则,包括输入、输出和转发规则。通过观察规则列表,您可以了解当前网络流量的策略。其中iptables -vnL是查看iptables 规则的常用命令。后面加上--line-number 会显示数字对应的规则。

  • -v:verbose(详细模式),显示更详细的规则信息,包括数据包计数器(匹配的数据包数量、字节数)、规则选项的完整参数等。
  • -n:numeric(数字模式),直接显示 IP 地址和端口号的数字形式,不进行 DNS 反向解析或服务名转换(如显示 80 而非 http,显示 192.168.1.1 而非主机名),加快命令执行速度。
  • -L:list(列表模式),列出指定链(或所有链)的规则。若不指定链名,默认显示当前表中所有链的规则(默认表为 filter 表)。

输出字段说明:

  • pkts:该规则匹配到的数据包数量。
  • bytes:匹配到的数据包总字节数。
  • target:规则匹配后执行的动作(如 ACCEPTDROP)。
  • prot:匹配的协议(如 tcpudpall)。
  • opt:可选的匹配选项。
  • in/out:匹配的入站 / 出站网络接口(* 表示所有接口)。
  • source/destination:匹配的源 / 目的 IP 地址(0.0.0.0/0 表示所有地址)

2. 添加规则和永久保存

要添加一个规则,可以使用命令:iptables -A <chain> <rule> 
其中,<chain>指定要添加规则的链,例如 INPUT 、OUTPUT 或 FORWARD。<rule>是规则本身,可以是允许或拒绝特定类型的流量。

 

例如,如果您想允许 SSH 连接 (TCP 端口 22),可以使用以下命令:

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

这表示在 INPUT 链中添加一个规则,允许 TCP 端口 22 的流量通过。

上面命令行的方式是临时生效的,如果想要永久生效需要在配置文件里面进行添加

  1. CentOS/RHEL 6/7 系统

    # 保存规则到 /etc/sysconfig/iptables 文件
    service iptables save
    
  2. Debian/Ubuntu 系统(需安装 iptables-persistent

    # 安装工具
    apt-get install iptables-persistent
    
    # 保存规则(会写入 /etc/iptables/rules.v4 和 rules.v6)
    netfilter-persistent save
    
  3. 通用方法(手动导出到文件,重启时恢复):

    # 导出规则到文件
    iptables-save > /etc/iptables.rules
    
    # 编辑开机启动脚本(如 /etc/rc.local),添加恢复命令
    iptables-restore < /etc/iptables.rules
 

3. 删除规则

要删除一个规则,可以使用以下命令:
iptables -D <chain> <rule>

   其中,<chain><rule>是要删除的规则的链和规则本身。例如,如果您要删除前面添加的 SSH 规则,可以使用以下命令:

  iptables -D INPUT -p tcp --dport 22 -j ACCEPT

这将删除输入链中允许 TCP 端口 22 的流量通过的规则。

4. 修改规则

要修改一个规则,可以先删除旧规则,再添加新规则,或者使用以下命令修改规则:

 iptables -R <chain> <rule_number> <new_rule>

其中,<chain>是要修改的规则的链,<rule_number>是要修改的规则的编号(可以在 iptables -L 命令的输出中找到),<new_rule>是要添加的新规则。

 

例如,如果您要将输入链中允许 SSH 连接的规则更改为允许 HTTP 连接 (TCP 端口 80),可以使用右边的命令:iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT

    

这将输入链中编号为 1 的规则更改为允许 TCP 端口 80 的流量通过。

iptables 是一个功能非常强大的工具,以上只是几个最简单的使用示例,还有很多高级选项和用法。限于文章篇幅,此处不做介绍,感兴趣的读者可自行查阅相关文档资料。

5. 命令规则

防火墙的命令规则其实就是: iptables - 子命令 < > < 规则策略 > [ 选项 ]    不加-t 表名默认是filter表
iptables - 子命令   <链>  <规则策略> [选项]
iptables - A  INPUT   <-p icmp --icmp-type 8  -j DROP
iptables - A  INPUT   -s 10.0.0.12  -j DROP
iptables - L   -n
扩展动作
   
man iptables-extensions TARGET EXTENSIONS 部分信息看到,扩展动作多达 41 个,而
常见的扩展动作有:
   ●SNAT 修改数据包的源地址,仅在 nat 表中有效,涉及到的链有 POSTROUTING INPUT 。       ● REDIRECT 用于数据包的重定向动作,仅在 nat 表中有效,涉及到的链有 POSTROUTING
OUTPUT
   ●REJECT 终止数据包匹配并返回错误数据包,涉及到的链有 INPUT FORWARD OUTPUT
   ●MASQUERADE 用于动态分配数据包的 ip 地址 -- 即地址伪装,仅在 nat 表中有效,涉及到的链有
POSTROUTING
   ●DNAT 修改数据包的目标地址,仅在 nat 表中有效,涉及到的链有 PREROUTING OUTPUT

6. 顺序规则

范围小的,需要精确匹配的,要往前放,
范围大的,往后放,
负责兜底的,放在最后。


例如在10.0.0.0网段的主机系统中添加下面的规则,得到的结果能够连接10.0.0.13主机。
iptables -t filter -A INPUT -s 10.0.0.12 -j DROP # 丢弃10.0.0.12数据包
iptables -t filter -A INPUT -s 10.0.0.0/24 -j REJECT # 拒绝10.0.0.0网段访问
iptables -t filter -A INPUT -s 10.0.0.1 -j ACCEPT <


网站公告

今日签到

点亮在社区的每一天
去签到