iptables学习
背景
很多地方都要用到iptables。深入学习一下
例子
在已知链末尾添加规则(举例,拒绝某个ip的访问)
|
|
-A
表示Append,其后紧跟的是链的名称,表示该条规则要被添加到哪个链中。 -s
表示包的来源ip即source。除了指定固定的ip外,我们还可以指定ip范围,比如59.45.175.0/24
-j
表示jump 也即是我们最终的动作,这里的动作是拒绝
介绍
iptables 是一个用于 Linux 操作系统的强大的防火墙工具,它用于配置和管理网络规则,以控制数据包在计算机网络上的流动。
iptables 允许系统管理员定义哪些数据包可以进入系统、离开系统或者在系统内部传递。它可以用于实现网络安全策略、端口转发、网络地址转换(NAT)、数据包过滤等多种网络任务。
结构
。iptables 的主要组成结构包括:
- 表格(Tables):iptables 规则被组织成不同的表格,每个表格用于不同类型的操作。常见的表格有三个:
- filter 表格:用于数据包过滤,控制哪些数据包可以通过系统,哪些需要被丢弃或拒绝。
- nat 表格:用于配置网络地址转换(NAT)规则,允许将内部网络的地址映射到外部网络。
- mangle 表格:用于修改数据包的头部信息,如修改 TTL(Time To Live)等。
- raw:这里面的链条,规则,能基于数据包的状态进行规则设定
- 链(Chains):每个表格包含多个链,链是规则集合的容器,用于分类不同类型的规则。常见的链包括:
- INPUT 链:处理传入系统的数据包。
- OUTPUT 链:处理由系统生成的数据包,即从系统出发的数据包。
- FORWARD 链:处理经过系统的数据包,即既不是传入也不是输出的数据包。
- 其他自定义链:可以根据需要创建自定义链,以实现特定的功能或策略。
具体的表与链的结构如下
mangle表中的链有:
|
|
注意,虽然不同的表中有同名的链,但他们并不是同一个链,并且一个链只能引用同一个表中的链,不能跨表引用。
总之无外乎两种走向
- 本机发出的包:本机进程 -> OUTPUT 链 -> 路由选择 -> POSTROUTING 链 -> 出口网卡
- 本机收到的包:入口网卡 -> PREROUTING 链 -> 路由选择 -> 此时有两种可能的情况:
- 目的地址为本机:INPUT 链 -> 本机进程
- 目的地址不为本机:FORWARD 链 -> POSTROUTING 链 -> 网卡出口(内核允许网卡转发的情况下)
- 规则(Rules):规则是具体定义了数据包匹配条件和操作的部分。每个规则由若干匹配条件和一个或多个操作组成。匹配条件用于决定哪些数据包适用于这条规则,而操作则指定了对匹配的数据包应该执行什么操作。
例如,一条规则可以指定匹配来自特定源 IP 地址的数据包,并要求将这些数据包丢弃或重定向到另一个端口。
- 目标(Target):目标是规则的一部分,它指定了当数据包匹配规则时应该采取的操作。常见的目标包括:
- ACCEPT:允许数据包通过。
- DROP:丢弃数据包,不响应。
- REJECT:拒绝数据包,并向发送端发送拒绝消息。
- DNAT:目标地址转换,用于端口转发和 NAT 操作。
- SNAT:源地址转换,也用于 NAT 操作。
iptables 规则的执行顺序非常重要,通常规则会按照添加的顺序逐一匹配,当匹配到第一条规则后,就会执行该规则对应的操作,不再继续匹配后续规则。
网络流量原理
规则表之间的优先顺序:
Raw——mangle——nat——filter
规则链之间的优先顺序(分三种情况):
第一种情况:入站数据流向
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
第二冲情况:转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,**如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(**是否修改数据包的地 址等)进行处理。
第三种情况:出站数据流向
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。