隐含模块:
1:端口 (一个)
2:ICMP类型
request:8
reply 0
不可达:3
iptables -A INPUT -p tcp -m multiport --dport 80,25 -j ACCEPT{-m multiport 可以匹配多个端口}
显示匹配
-m 指定匹配模块
1:多端口
2:IP范围
3:mac
4:状态匹配:iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
这个 iptables 命令是用于配置 Linux 系统上的防火墙规则的。具体来说,这条命令是在 INPUT 链(即处理进入系统的数据包的链)中插入(-I 表示插入)一条新的规则。
下面是这条命令的详细解释:
- iptables: 这是 Linux 系统中用于配置 IPv4 数据包过滤规则的命令行工具。
- -I INPUT: 这表示在 INPUT 链的开头插入一条新的规则。注意,如果不指定规则编号,它会在链的开头插入,而不是在末尾追加。
- -p tcp: 这表示该规则仅适用于 TCP 协议的数据包。
- -m state: 这表示这条规则将使用 state 模块,该模块允许基于数据包的状态(如 NEW、ESTABLISHED、RELATED 等)来过滤数据包。
- --state ESTABLISHED: 这指定了该规则的条件是数据包的状态必须是 ESTABLISHED。在 TCP 的上下文中,一个 ESTABLISHED 状态的数据包是指一个与已经存在的连接(即之前已经通过三次握手建立的连接)相关的数据包。
- -j ACCEPT: 这表示如果数据包满足上述所有条件(即它是一个 TCP 数据包,其状态是 ESTABLISHED,并且它是在 INPUT 链上被处理的),那么应该接受这个数据包,允许它进入系统。
综上所述,这条 iptables 命令的意思是:允许所有已建立的 TCP 连接上的进入数据包进入系统。这通常是防火墙配置中的常见做法,因为它允许已经建立的连接上的双向通信,同时阻止未经授权的新的连接尝试。
-A 和 -i的区别:
在iptables中,-A和-i是两个不同的选项,它们分别具有不同的功能和用途。以下是这两个选项的详细解释和区别:
- -A (Append)
-
- 功能:用于在规则链的末尾附加一条新的规则。
- 位置:该选项指定了新规则在规则链中的位置,即添加到现有规则的后面。
- 匹配顺序和优先级:当防火墙进行包匹配时,它会按照规则链中规则的顺序,从上到下依次检查每一条规则。因此,使用-A添加的规则会位于现有规则之后,这意味着它只会影响那些没有在其他规则中匹配到的数据包。
- 示例:iptables -A INPUT -s 192.168.228.0/24 -p tcp --dport 22 -j ACCEPT 这条命令会在INPUT链的末尾添加一条规则,允许来自192.168.228.0/24网段的TCP数据包(目标端口为22)通过。
- -i (Interface)
-
- 功能:用于指定数据包进入本机的网络接口。它并不是用来添加规则的,而是用来定义规则中数据包进入的网络接口条件。
- 位置:这个选项通常与规则的其他部分一起使用,以定义数据包的条件。
- 示例:iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT 这条命令会在INPUT链的末尾添加一条规则,但只针对从eth0接口进入、来自192.168.1.0/24网段的TCP数据包(目标端口为22)进行匹配。
总结:
- -A 用于在规则链的末尾添加新规则,影响匹配的顺序和优先级。
- -i 用于指定数据包进入的网络接口,是定义规则条件的一部分。
在iptables命令中,这两个选项通常与其他选项一起使用,以定义完整的防火墙规则。例如,-A 可以与 -i 一起使用,以在特定网络接口的规则链末尾添加规则。但需要注意的是,-A 和 -i 本身在功能和用途上是不同的。
清空表中所有规则:
iptables -L 清空所有
iptables -t (需要清空的表)-L 清空指定表的所有
显示创建的链
iptables -L INPUT --line-number 命令用于列出 INPUT 链中的所有规则,并显示每条规则的行号。
iptables中的链(Chains)是用于处理数据包的不同阶段或方向的规则集合。以下是对iptables中各个链的详细解释,包括它们的使用场合和目的:
- INPUT链:
-
- 使用场合:当数据包从网络接口进入主机时,会经过INPUT链。
- 目的:控制进入主机的数据包。例如,你可以设置规则来允许或拒绝特定的IP地址、端口或协议的数据包进入。
- OUTPUT链:
-
- 使用场合:当数据包从主机通过网络接口发送出去时,会经过OUTPUT链。
- 目的:控制从主机发出的数据包。例如,你可以设置规则来限制哪些应用程序或服务可以发送数据包,或者修改数据包的内容。
- FORWARD链:
-
- 使用场合:当数据包在主机上被路由,从一个网络接口转发到另一个网络接口时,会经过FORWARD链。这通常发生在主机作为路由器或网关时。
- 目的:控制数据包在主机上的转发。例如,你可以设置规则来决定哪些数据包应该被转发,哪些应该被丢弃。
- PREROUTING链:
-
- 使用场合:在路由决策之前,数据包会首先经过PREROUTING链。这意味着在数据包被确定目的地之前,你可以对其进行处理。
- 目的:在路由之前修改数据包。例如,你可以使用PREROUTING链来实施DNAT(目标地址转换),将数据包的目标地址更改为其他地址。
- POSTROUTING链:
-
- 使用场合:在数据包通过路由决策并确定输出网络接口后,但在数据包被发送出去之前,会经过POSTROUTING链。
- 目的:在数据包离开主机之前对其进行修改。例如,你可以使用POSTROUTING链来实施SNAT(源地址转换),修改数据包的源地址。
归纳:
- INPUT 和 OUTPUT 链主要用于控制进入和离开主机的数据包。
- FORWARD 链用于控制主机上的数据包转发。
- PREROUTING 和 POSTROUTING 链则用于在路由决策之前和之后修改数据包。
iptables的这些链允许你实现精细的网络流量控制,从简单的允许/拒绝规则到复杂的地址转换和数据包修改。通过结合使用这些链和iptables的其他功能,你可以创建出适应各种网络环境和需求的防火墙规则集。