admin管理员组

文章数量:1635823

目录

    • 1、iptables
      • 1.1、iptables与Netfilter的关系
    • 2、iptables命令及参数详解
      • 2.1、基本概念
      • 2.2、常用命令和参数
      • 2.3、nat表中的`--to-destination`、`--to-source`、`--to-ports`
    • 3、iptables规则查看、清除和修改
      • 3.1、查看iptables已有规则
      • 3.2、清除iptables规则
      • 3.3、iptables规则修改和替换
    • 4、实际命令使用案例
      • 4.1设置默认策略
      • 4.2、允许特定IP访问SSH服务
      • 4.3、开启网络地址转换(NAT)

1、iptables

  在Linux环境下,iptables就是一款强大而灵活的防火墙工具,它为系统管理员提供了广泛的配置选项,能够有效地控制数据包的流动,实现网络访问的控制和安全性增强。

  iptables最初是由Rusty Russell在2000年开发的,它是基于netfilter框架的一部分,用于对Linux内核进行数据包过滤和操作。Netfilter是Linux内核中的一个模块化框架,它允许核心网络功能被扩展和修改,从而实现了包括NAT(网络地址转换)、数据包过滤等在内的网络功能。

1.1、iptables与Netfilter的关系

  iptables实际上是Netfilter的用户空间工具之一,它通过调用Netfilter提供的内核空间功能来实现数据包的处理和过滤。Netfilter框架在Linux内核中通过一系列的钩子(hooks)实现数据包处理的不同阶段,iptables就可以通过这些钩子来插入自定义的规则,从而实现对数据包的控制。

2、iptables命令及参数详解

//语法规则
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
//例如下列两条
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

基于此命令了解iptables命令的相关参数

2.1、基本概念

  • 表(Tables):iptables规则按照功能被划分到不同的表中,常见的表包括filter、nat和mangle等。
  • 在命令中,使用 -t 参数来指定表。 filter表:用于过滤数据包,常用于设置防火墙规则。
    nat表:用于网络地址转换,常用于实现端口转发和SNAT/DNAT等功能。
    mangle表:用于修改数据包的头部信息,常用于设置QoS(服务质量)和网络流量控制。
  • 链(Chains):每个表包含一系列的链,用于决定如何处理数据包。常见的链包括INPUT、OUTPUT、FORWARD等。

常见的链包括:
INPUT:处理输入数据包。
OUTPUT:处理输出数据包。
FORWARD:处理转发数据包。
PREROUTING:在路由决策之前处理数据包,主要用于DNAT。
POSTROUTING:在路由决策之后处理数据包,主要用于SNAT。

  • 规则(Rules):规则定义了数据包的匹配条件以及对匹配数据包的操作。

2.2、常用命令和参数

- **iptables**:用于配置iptables规则的主要命令。
-A, --append:向指定链末尾添加一条规则。
-I, --insert:向指定链的指定位置插入一条规则。
-D, --delete:删除指定链中的一条规则。
-P, --policy:设置指定链的默认策略。
-s, --source:指定源IP地址或地址段。
-d, --destination:指定目标IP地址或地址段。
-i, --in-interface:指定数据包的输入接口。
-o, --out-interface:指定数据包的输出接口。
-p, --protocol:指定数据包所使用的协议。

2.3、nat表中的--to-destination--to-source--to-ports

  --to--to-destination 都是iptables中的选项,用于指定数据包转发的目标地址。它们的主要区别在于作用对象和具体用法:

  1. - -to-destination:这个选项用于目标地址的转换。当你使用 --to-destination 时,你需要指定具体的目标IP地址和端口号(可省略端口)。这通常用于目标地址的改变,比如端口映射或者转发到另一个内部主机的不同端口上。

示例:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

这个命令将目标端口为8080的TCP数据包转发到内部主机192.168.1.100的80端口。

  2. - -to:这个选项用于更一般化的目标地址转换。它可以用于改变数据包的目标地址,源地址,目标端口或源端口。

示例:

iptables -t nat -A POSTROUTING -p tcp --dport 80 -j SNAT --to 192.168.1.200

   这个命令将通过本机出口的TCP数据包的目标端口为80的流量转发到192.168.1.200,而不改变目标端口。

  总之,--to-destination 是专门用于目标地址转换的选项,而 --to 则更通用,可以用于各种类型的地址转换,需要指定具体的转换行为。

  3. - -to-ports:选项用于指定目标端口的转发范围,通常用于端口映射或重定向的场景。

  以下是一个示例,假设你希望将来自外部网络的TCP流量转发到内部网络的不同端口范围:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-ports 8080-8090

  这个命令将目标端口为80的TCP数据包转发到内部网络的8080至8090端口范围内的随机端口上。

  要注意的是,--to-ports 选项后面需要跟一个端口范围,用 “-” 分隔起始端口和结束端口。这样,iptables就会将流量转发到指定范围内的端口上,实现端口的动态映射或负载均衡等功能。

3、iptables规则查看、清除和修改

3.1、查看iptables已有规则

iptables -nL
iptables -t nat -nvL --line //查看nat详细信息,并显示行号
iptables [-t tables] [-L] [-nv]
    -t:后面接table,例如nat或filter,若省略则使用filter
    -L:列出目前的table的规则
    -n:不进行IP与HOSTNAME的反查,这样显示速度快
    -v:列出更多的信息(数据包的位数、相关的网络接口)
    
iptables-save 会列出完整的防火墙规则

3.2、清除iptables规则

iptables [-t tables] [-FXZ]
    -F:清除所有已定制的规则
    -X:除掉所有用户"自定义"的chain
    -Z:将所有的chain的计数与流量统计都归零

3.3、iptables规则修改和替换

iptables -R INPUT 5 -s 192.168.1.0/24 -j DROP

这个命令将替换 INPUT 链中编号为 5 的规则,将其改为拒绝来自 192.168.1.0/24 网段的流量。

注意:使用 -R 选项时需要确保指定的规则号存在,否则会报错。

4、实际命令使用案例

4.1设置默认策略

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

上述命令将INPUT和FORWARD链的默认策略设置为DROP,即拒绝所有未匹配规则的数据包;而将OUTPUT链的默认策略设置为ACCEPT,即允许所有输出流量。

4.2、允许特定IP访问SSH服务

iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

该命令允许来自192.168.1.0/24网段的主机访问SSH服务(使用TCP协议,目标端口为22)。

4.3、开启网络地址转换(NAT)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

该命令将对通过eth0网卡出口的数据包进行源地址伪装,用于实现网络地址转换。

本文标签: 详解命令iptables