Iptables(1)基本概念

简介

iptables 是一个用于 Linux 操作系统的包过滤防火墙工具,可帮助管理网络流量和实施安全策略。它允许用户配置规则集以控制数据包如何在计算机上移动和处理。通过定义规则来允许或拒绝特定类型的流量,iptables 可以提供有效的网络安全保护。

主要功能包括:

  1. 数据包过滤:基于规则集来决定是否接受、拒绝或转发数据包。
  2. 网络地址转换:支持网络地址转换 (NAT) 功能,允许隐藏内部网络结构并提供端口转发。
  3. 连接跟踪:跟踪网络连接状态,允许有状态的数据包过滤。
  4. 网络地址端口转发:允许在不同网络接口之间转发数据包。

可以使用 iptables 配置规则以满足其特定需求,例如限制特定端口的访问、阻止恶意流量或设置端口转发规则。尽管 iptables 非常强大和灵活,但也需要一定的了解和技能才能正确配置和管理。随着时间的推移,firewalld 和 nftables 等更现代的防火墙工具逐渐取代了 iptables,但 iptables 仍然被广泛使用,并对于熟悉 Linux 系统的管理员来说仍然是一个重要的工具。

实际上是一个用户空间的服务(user space service),用于配置和管理内核中的防火墙规则。它本身并不直接处理数据包过滤,而是通过与 Linux 内核通信来实现对网络数据包的过滤、转发和操作。

详细介绍如下:

  1. 内核功能:Linux 内核本身提供了网络数据包的处理和过滤功能。iptables 利用了 Linux 内核的网络包过滤机制 Netfilter,这允许用户定义一系列规则,控制数据包的流动。当一个数据包到达系统时,内核将根据预设的 iptables 规则集进行处理,决定数据包的命运:是放行还是丢弃。

  2. 用户空间服务:iptables 工具实际上是一个位于 Linux 用户空间的命令行工具,用于配置和管理内核中的防火墙规则。通过 iptables 命令,管理员可以创建、修改和删除规则,从而控制数据包的流向以及系统的网络安全策略。iptables 通过调用相应的系统调用,将管理员的配置写入内核中,实现对网络数据包的过滤和处理。

  3. 结合:iptables 可以看作是内核功能与用户空间服务之间的桥梁,它使管理员能够以更直观的方式配置内核中的防火墙规则。Linux 内核提供了 Netfilter 框架来处理数据包,而 iptables 则为管理员提供了一种简便有效的方式来与这个框架交互,通过定义规则来保护系统的网络安全。

包过滤型防火墙原理

        包过滤型防火墙主要依赖于 Linux 内核软件 netfilter,它是一个 Linux 内核“安全框架”,而 iptables 是内核软件 netfilter 的配置工具,工作于用户空间。iptables/netfilter 组合就是 Linux 平台下的过滤型防火墙,通过配置 iptables 规则以及对应的网路数据包处理逻辑,当网络数据包符合这样的规则(rules)时,就做执行预先定义好的相应处理逻辑。      

        规则其实就是预定义的条件,规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

         netfilter 是工作于内核空间当中的一系列网络协议栈的钩子(hook),为内核模块在网络协议栈中的不同位置注册回调函数。在数据包经过网络协议栈的不同位置时做相应的由 iptables 配置好的处理逻辑。 netfilter 中的五个钩子分别为PRE_ROUTING、INPUT、FORWARD、OUTPUT、POST_ROUTING,网络数据包的流向图如下图所示:

1.当主机/网络服务器网卡收到一个数据包之后进入内核空间的网络协议栈进行层层解封装
2.刚进入网络层的数据包通过 PRE_ROUTING 关卡时,要进行一次路由选择,当目标地址为本机地址时,数据进入 INPUT,非本地的目标地址进入 FORWARD(需要本机内核支持 IP_FORWARD),所以目标地址转换通常在这个关卡进行
3.INPUT 经过路由之后送往本地的数据包经过此关卡,所以过滤 INPUT 包在此点关卡进行
4.FORWARD 经过路由选择之后要转发的数据包经过此关卡,所以网络防火墙通常在此关卡配置
5.OUTPUT 由本地用户空间应用进程产生的数据包过此关卡,所以 OUTPUT 包过滤在此关卡进行
6.POST_ROUTING 刚刚通过 FORWARD 和 OUTPUT 关卡的数据包要通过一次路由选择由哪个接口送往网络中,经过路由之后的数据包要通过 POST_ROUTING 此关卡,源地址转换通常在此点进行。
简单总结:
到本机某进程的报文:PREROUTING –> INPUT
由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING
由本机的某进程发出报文:OUTPUT –> POSTROUTING
上面提到的这些处于网络协议栈的节点关卡,在 iptables 的术语里叫做“链(chain)”

表与链

        这些”关卡”在iptables中为什么被称作”链”呢?防火墙的作用就在于对经过的报文匹配”规则”,然后执行对应的”动作”,所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了”链”。每个经过这个”关卡”的报文,都要将这条”链”上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。

        我们对每个”链”上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文,那么这个时候我们把实现相同功能的规则放在一起,那么具有相同功能的规则的集合就叫做”表”。不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能。

  1. filter 表:负责过滤功能;与之对应的内核模块是 iptables_filter
  2. nat(Network Address Translation) 表:网络地址转换功能,典型的比如 SNAT、DNAT,与之对应的内核模块是 iptables_nat
  3. mangle 表:解包报文、修改并封包,与之对应的内核模块是 iptables_mangle
  4. raw 表:关闭 nat 表上启用的连接追踪机制;与之对应的内核模块是 iptables_raw

Linux所定义的所有 iptables “规则”都存在于这四张表中。

表与链的关系

        需要注意的是,并不是所有的“链”都具有所有类型的“规则”,也就是说,某个特定表中的“规则”注定不能应用到某些“链”中,比如,用作地址转换功能的 nat 表里面的“规则”据不能存在于 FORWARD “链”中。

PreRoutingraw, mangle, nat
Forwardmangle, filter,nat(Linux 内核版本 3.7 开始引入)
Inputmangle, filter, nat
Outputraw, mangle, filter, nat
PostRoutingmangle, nat

        在实际使用 iptables 配置规则时,我们往往是以“表”为入口制定“规则”,所以我们将“链表”关系转化成“表链”关系,之所以按照上述过程介绍iptables,是因为从”关卡”的角度更容易理解,但是为了以便在实际使用的时候,更加顺畅的理解它们,此处我们还要将各”表”与”链”的关系罗列出来:

表    
rawPREROUTING,OUTPUT
manglePREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
natPREROUTING,OUTPUT,POSTROUTING,INPUT
filterINPUT,FORWARD,OUTPUT

        数据包经过一个关卡的时候,会将“链”中所有的“规则”都按照顺序逐条匹配,为相同功能的“规则”属于同一个“表”。那么,哪些“表”中的规则会放到“链”的最前面执行呢?这时候就涉及一个优先级的问题。 iptables 为我们提供了四张“表”,当它们处于同一条“链”的时候,它们的执行优先级关系如下:

        raw -> mangle -> nat -> filter

        实际上,还可以使用 iptables 创建自定义的“链”,将针对某个应用层序所设置的规则放到这个自定义“链”中,但是自定义的“链”不能直接使用,只能被某个默认的“链”当作处理动作 action 去调用。可以这样说,自定义链是“短”链,这些“短”链并不能直接使用,而是需要和 iptables上 的内置链一起配合,被内置链“引用”。

数据包经过过滤型防火墙的流程

iptables规则

iptables 规则由两部分组成:报文的匹配条件和匹配到之后的处理动作。

        匹配条件:根据协议报文特征指定匹配条件,基本匹配条件和扩展匹配条件

        处理动作:内建处理机制由 iptables 自身提供的一些处理动作

同时,还可以使用 iptables 创建自定义的链,附加到 iptables 的内置的五个链。注意: 报文不会经过自定义链,只能在内置链上通过规则进行引用后生效,也就是说自定义链为规则的一个处理动作的集合。

设置 iptables 规则时需要注意:

  1. 根据要实现哪种功能,判断添加在哪张“表”上
  2. 根据报文流经的路径,判断添加在哪个“链”上
    1. 到本主机某进程的报文:PreRouting -> Input -> Process -> Output -> PostRouting
    2. 由本主机转发的报文:PreRouting -> Forward -> PostRouting

对于每一条“链”上其“规则”的匹配顺序,排列好检查顺序能有效的提高性能,因此隐含一定的法则:

  1. 同类规则(访问同一应用),匹配范围小的放上面
  2. 不同类规则(访问不同应用),匹配到报文频率大的放上面
  3. 将那些可由一条规则描述的多个规则合并为一个
  4. 设置默认策略

同时,也一定要注意,在远程连接主机配置防火墙时注意:

  1. 不要把“链”的默认策略修改为拒绝,因为有可能配置失败或者清除所有策略后无法登陆到服务器,而是尽量使用规则条目配置默认策略
  2. 为防止配置失误策略把自己也拒掉,可在配置策略时设置计划任务定时清除策略,当确定无误后,关闭该计划任务

匹配条件

        匹配条件分为基本匹配条件与扩展匹配条件

基本匹配条件:

        源地址Source IP,目标地址 Destination IP

上述内容都可以作为基本匹配条件。

扩展匹配条件:

        除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是netfilter中的一部分,只是以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。

        源端口Source Port, 目标端口Destination Port

        上述内容都可以作为扩展匹配条件

处理动作

        处理动作也可以分为基本动作和扩展动作。

        此处列出一些常用的动作:

        ACCEPT:允许数据包通过。

        DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

        REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

        SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

        MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。

        DNAT:目标地址转换。

        REDIRECT:在本机做端口映射。

        LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

  • 40
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值