【iptables】简介、命令参数、示例

定义

       iptables 是一个用于配置 Linux 内核中的网络包过滤规则的用户空间工具。它是 Linux 操作系统中实现防火墙功能的主要工具之一,基于 Netfilter 框架(Linux包过滤组件)工作。通过 iptables,系统管理员可以定义规则来控制网络流量的进出。
       包过滤防火墙的原理:检测数据包的 IP 五元组字段信息,然后根据规则执行允许/拒绝/丢弃等动作。

主要功能

  1. 包过滤:iptables 可以根据源 IP 地址、目的 IP 地址、端口号、协议类型等条件过滤网络数据包。
  2. 网络地址转换(NAT):iptables 支持网络地址转换功能,包括源地址转换(SNAT)和目的地址转换(DNAT),用于实现网络地址的重写。
  3. 状态检测:iptables 支持状态检测(Stateful Inspection),可以根据连接状态(如新建连接、已建立连接等)来过滤数据包。
  4. 日志记录:iptables 可以记录匹配特定规则的数据包日志,便于系统管理员进行网络监控和故障排查。

基本概念

表(Table)链(Chain)

       iptables 中有多个表,表就像是容器,每个表包含多个链,链是规则的集合。常见的表和链包括:
1、filter:默认表,用于数据包过滤:

  • INPUT:处理进入本地系统(iptalbes的当前计算机)的数据包。
  • OUTPUT:处理从本地系统发出的数据包。
  • FORWARD:处理转发的数据包。

2、nat:用于网络地址(源/目的)转换:

  • OUTPUT
  • PREROUTING:在数据包路由前处理。
  • POSTROUTING:在数据包路由后处理。

3、mangle:用于修改数据包(包重构),如修改 ttl 值等。

  • PREROUTING
  • POSTROUTING
  • INPUT
  • OUTPUT
  • FORWARD

4、raw:用于配置数据包的处理方式(数据跟踪),符合raw表所对应规则的数据包将会跳过一些检查,用以提高效率。

  • PREROUTING
  • OUTPUT

规则(Rule)

每个链包含多个规则,每条规则定义了匹配条件和相应的动作。常见的动作包括:

  1. ACCEPT:允许数据包通过。
  2. DROP:丢弃数据包。
  3. REJECT:拒绝数据包并发送 ICMP 错误消息。
  4. LOG:记录数据包日志。

Filter 表详解

Filter 表是最常用的规则表,下面参考它的数据处理流程图:
在这里插入图片描述

命令操作

基本语法:iptables (选项) (参数)

选项集合

-t, --table table 对指定的表 table 进行操作。如果不指定此选项,默认的是 filter 表。

通用匹配:源地址目标地址的匹配:

-p:指定要匹配的数据包协议类型;
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。

-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。

-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。

-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。


查看管理命令:

-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。

规则管理命令:

-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。

-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。

-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num:Replays替换/修改第几条规则


链管理命令(这都是立即生效的):
-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。

-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。

-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。

-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。

-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。

-h:显示帮助信息;

参数集合

参数作用
-P设置默认策略:iptables -P INPUT (DROP
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-Inum 在规则链的头部加入新规则
-Dnum 删除某一条规则
-s匹配来源地址IP/MASK,加叹号"!"表示除这个IP外
-d匹配目标地址
-i网卡名称 匹配从这块网卡流入的数据
-o网卡名称 匹配从这块网卡流出的数据
-p匹配协议,如tcp,udp,icmp
–dport num匹配目标端口号
–sport num匹配来源端口号

配置示例

没有指定表(-t [table]),默认就是 filter 表。

配置白名单:
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT  # 允许机房内网机器可以访问
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT  # 允许机房内网机器可以访问
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口
开启相应端口服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来

iptables 和 firewalld 的一点区别

设计理念

iptables:
  1. iptables 是一个基于命令行的工具,直接与 Netfilter 框架交互。
  2. 规则是静态的,需要手动添加、删除和修改。
  3. 配置文件通常是脚本文件,规则的更改需要重新加载整个规则集。
firewalld:

firewalld 是一个动态防火墙管理工具,提供了更高级别的抽象和更灵活的配置方式。使用 D-Bus 接口进行配置,支持动态更改规则而无需重新加载整个规则集。
提供了区域(zone)和服务(service)的概念,简化了复杂网络环境下的防火墙配置。

区域和服务

iptables:
  1. 没有区域和服务的概念,所有规则都是全局的。
  2. 需要手动管理和分类规则,可能会导致配置复杂性增加。
firewalld:
  1. 引入了区域(zone)的概念,每个区域可以有不同的规则集,适用于不同的网络环境(如家庭、工作、公共等)。
  2. 支持服务(service)的概念,可以通过服务名称来管理规则,而不是直接使用端口号和协议。
  3. 提供了预定义的区域和服务,简化了防火墙配置。
  • 23
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值