iptables命令详解
目录
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网卡出口的数据包进行源地址伪装,用于实现网络地址转换。
更多推荐
所有评论(0)