首页 > 技术文章 > 浅谈iptables

zhangcz 2021-07-27 15:32 原文

iptables

  • Linux 防火墙工具 iptables 其实也是 Netfilter 框架中的一个组件
  • iptables 其实是多个表(table)的容器,每个表里包含不同的链(chain),链里边定义了不同的规则(policy),我们通过定义不同的规则,来控制数据包在防火墙的进出。

Netfilter数据包过滤框架

  • Netfilter 框架的整体组件图
    image
  • Netfilter概述
    Netfilter 是 Linux 内核中进行数据包过滤,连接跟踪(Connect Track),网络地址转换(NAT)等功能的主要实现框架;该框架在网络协议栈处理数据包的关键流程中定义了一系列钩子点(Hook 点),并在这些钩子点中注册一系列函数对数据包进行处理。这些注册在钩子点的函数即为设置在网络协议栈内的数据包通行策略,也就意味着,这些函数可以决定内核是接受还是丢弃某个数据包,换句话说,这些函数的处理结果决定了这些网络数据包的“命运”。
    iptables过滤的规则顺序是由上至下,若出现相同的匹配规则则遵循由上至下的顺序。

四表五链

表的处理优先级:

raw > mangle > nat > filter。
image

四表五链的作用:

nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
raw表:将数据包一些标记信息进行拆解(不常用)
mangle表:对数据包信息进行标记(不常用)
·······················································································
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包

1.详述iptables工作流程以及规则过滤顺序?

iptables是采用数据包过滤机制工作的,所以他会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则来匹配进行相关操作。
当防火墙收到数据包时:
1.防火墙是一层一层的过滤的,规则顺序从上到下,从前到后进行归路
2.如果匹配上规则(ACCEPT,DROP)就不会再向下匹配了。
3.如果匹配规则没有明确表明是阻止或者是通过这个数据包,也就是没有匹配上规则,就会继续向下执行下一跳规则。
4.如果以上所有规则都不能匹配上,最后会执行默认规则。

2.实现把访问10.0.0.3:80的请求转到172.16.1.17:80

在10.0.0.3主机上做IP映射,具体命令:

iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80

数据包还是从设备的外网接口收到,收到之后,收到之后立马修改目的地址吗?立马就要修改,为什么?SNAT就不是立马修改,如果DNAT的报文不立马修改的话,就直接通过PRE-ROUTING通过路由之后直接进行INPUT里面了,所以立马就要修改,修改之后再路由,路由之后到达FORWARD,最后通过POST-ROUTING扔出去。

3.实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。

在124.32.54.26的主机上配置NAT表的POSTROUTING链

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26

SNAT只能POST-ROUTING链上做,因为只有在报文出去的时候才能修改源地址,如果在PRE-ROUTING上修改了之后是没有意义的,也就是说SNAT是在报文出去的时候做
当你在一台路由器或防火墙做了端口映射意味着什么呢?其实就意味着设备打开了一个端口而已,那么这个端口可以使用吗?并不可以,这是最近的新发现,而且我特意找了一台LINUX做实验,假如你把INPUT的默认策略设置为DROP,然后仅仅放行80端口,但不安装任何应用侦听80端口,那么在另一台主机telnet这个地址80端口会不会通?不会,不会,不会,为什么?这个端口打开了是不假,打开之后还要有应用侦听这个端口。这里面值得注意,有时候,有些端口是打开不成功的,如果打开不成功,建议多换几个端口试试。内核在收到这个报文之后要进行转发,要转发到被映射的主机上,如果这个被映射主机的端口不能访问的话,在外网还是telnet不通的。

推荐阅读