手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

iptables 防火墙工作原理及知识点图文详解

[日期:2018-08-18] 来源:Linux社区  作者:Linux [字体: ]

防火墙相关概念

  • iptables相关概念以及工作原理

  • iptables中四表五链的原理及规则

  • iptables中的基本命令详解

 

------------------防火墙相关概念----------------------

 LINUX防火墙:隔离内部网络和外部网络的隔离技术。

                                                介于3-4层的传输  ——管理控制 服务的提供。

系统安全:

1.第三方监控杀毒软件

2.系统策略

3.文件权限

4.防火墙规则 :原地址 目标地址 端口 协议 mac 数据包中的标志

类似ACL访问控制列表: 过滤

从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。

主机防火墙针对于单个主机进行防护。

网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。
                          网络防火和主机防火墙并不中突,可以理解为,网络防火墙主外(集体),主机防火墙主内(个人)。
                          从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。如:思科ASA 华为防火墙  天融信防火墙 等。
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。如:iptables firewall(CentOS7独有的)等。

iptables相关概念

iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过 iptables这个代理,将用户的安全设定执行到对应的安全框架中,这个安全框架”才是直正的防火墙,这个框架的名字叫 netfilter。

netfilter才是防火墙真正的安全框架( framework), netfilter位于内核空间。

iptables其实是个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

netfilter/ iptables(下文中简称为 iptables)组成 Linux平台下的包过滤防火墙,与大多数的 Linux软件一样,这个包过滤防火墙是兔费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

Netfilter是 Linux操作系统核心层内部的—一个数据包处理模块,它具有如下功能:

网络地址转换( Network Address Translate)

数据包内容修改以及数据包过滤的防火墙功能。所以说,虽然我们使用 service iptables start启动 iptables"服务",但是其实准确的来说, iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。

iptables基础工作原理

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

这样说可能并不容易理解,我们来换个容易理解的角度,从头说起
          当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务
中,而此时,客户端报文的目标终点为web服务所监听的套接字(P:Por)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时
候,web服务所监听的P与端囗反而变成了原点,我们说过, netfilter 才是真正的防火墙,它是内核的部分,所以,如果我们想要防火墙能够达到"防火"的目的,则需要在内
核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和 output关卡,而这些
关卡在 iptables中不被称为关卡"而被称为链"。

其实我们上面描述的场景并不完善,因为客户端发来的报文访问的目标地址可能并不是本机,而是其他服务器,当本机的内核支持 IP FORWARD时,我们可以将报文转发给其
他服务器,所以,这个时候,我们就会提到 iptables中的其他”关卡,也就是其他链”,他们就是"路由前”、“转发”、"路由后”,他们的英文名是
PREROUTING、 FORWARD、 POSTROUTING
也就是说,当我们启用了防火墙功能时,报文需要经过如下关卡,也就是说,根据实际情况的不同,报文经过链可能不同。如果报文需要转发,那么报文则不会经过 Input链
发往用户空间,而是直接在内核空间中经过 forward链和 postrouting链转发出去的。

所以,根据上图,我们能够想象出某些常用场景中,报文的流向
到本机某进程的报文: PREROUTING->|NPUT
由本机转发的报文: PREROUTING-> FORWARD-> POSTROUTING
由本机的某进程发出报文(通常为响应报文): OUTPUT-> POSTROUTING

1. 规则表

表的概念
我们再想想另外一个问题,我们对每个"链”上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对ip或者端囗的过滤,B类规则是修改报文,那么这个时候,我
们是不是能把实现相同功能的规则放在一起呢,必须能的
我们把具有相同功能的规则的集合叫做表”,所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功
能,而我们定义的规则也都逃脫不了这4种功能的范围,所以,学习 iptables之前,我们必须先搞明白每种表的作用。

iptables为我们提供了如下规则的分类,或者说, iptables为我们提供了如下"表”:
filter表:负责过滤功能,防火墙;内核模块: iptables_filter
nat 表: network address translation,网络地址转换功能;内核模块: iptables_nat
mangle表:拆解报文,做出修改,并重新封装的功能; iptables_mangle
raw表:关闭nat表上启用的连接追踪机制; iptables_raw

也就是说,我们自定义的所有规则,都是这四种分类中的规则,或者说,所有规则都存在于这4张表中。

 

  1. raw:高级功能,如:网址过滤。

  2. mangle:数据包修改(QOS),用于实现服务质量。

  3. nat:地址转换,用于网关路由器。Nat地址转换

  4. filter:包过滤,用于防火墙规则。过滤数据包,通还是不通

数据包经过防火墙的处理顺序

2. 规则链处理时机

链的概念
现在,我们想象一下,这些”关卡在 tables中为什么被称作"链呢?���们知道,防火墙的作用就在于对经过的报文匹配"规则”,然后执行对应的”动作“所以,当报文经过这些
关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了“链所以,我们
把每一个关卡"想象成如下图中的模样,这样来说,把他们称为链更为合适,每个经过这个关卡的报文,都要将这条链”上的所有规则匹配遍,如果有符合条件的规则,
则执行规则对应的动作。

INPUT:处理输入数据包。入站数据包处理

OUTPUT:处理输出数据包。出站数据包处理

PORWARD:处理转发数据包。

PREROUTING:用于目标地址转换(DNAT)进站进行的过滤。

POSTOUTING:用于源地址转换(SNAT)出站进行的过滤。

3.表链关系

首先
我们需要注意的是,某些“链中注定不会包含某类规则°,就像某些"关卡"天生就不具备某些功能一样,比如,A"关卡"只负责打击陆地敌人,没有防空能力,B"关卡“只负
责打击空中敌人,没有防御步兵的能力,C关卡"可能比较NB,既能防空,也能防御陆地敌人,D"关卡·最屌,海陆空都能防。
那让我们来看看,每个关卡都有哪些能力,或者说,让我们看看每个"链"上的规则都存在于哪些表"中。
我们还是以图为例,先看看 prerouting "链"上的规则都存在于哪些表中。
注意:下图只用于说明 prerouting 链上的规则存在于哪些表中,并没有描述表的顺序。

这幅图是什么意思呢?它的意思是说, prerouting链只拥有nat表、raw表和 mangle表所对应的功能,所以, prerouting中的规则只能存放于nat表、raw表和 mangle表中
那么,根据上述思路,我们来总结一下,每个关卡”都拥有什么功能,
或者说,每个”链中的规则都存在于哪些”表”中。

PREROUTING的规则可以存在于:raw表, mangle表,nat表
NPUT的规则可以存在于: mangle表, filter表,( centos7中还有nat表, centos6中没有)。
FORWARD的规则可以存在于: mangle表, filter表
OUTPUT的规则可以存在于:raw表 mangle表,nat表,filter表
POSTROUTING的规则可以存在于: mangle表,nat表。

但是,我们在实际的使用过程中,往往是通过”表作为操作入口,对规则进行定义的,之所以按照上述过程介绍 iptables,是因为从关卡的角度更容易从入门的角度理解,但
是为了以便在实际使用的时候,更加顺畅的理解它们,此处我们还要将各"表"与"链"的关系罗列出来,
表(功能)<->链(钩子)
raw表中的规则可以被哪些链使用: PREROUTING, OUTPUT
mangle表中的规则可以被哪些链使用: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
nat表中的规则可以被哪些链使用: PREROUTING, OUTPUT, POSTROUTING( centos7中还有NPUT, centos6中没有)
filter表中的规则可以被哪些链使用: INPUT, FORWARD, OUTPUT

其实我们还需要注意一点,因为数据包经过一个链的时候,会将当前链的所有规则都匹配遍,但是匹配时总归要有顺序,我们应该一条一条的去匹配,而且我们说过,相同
功能类型的规则会汇聚在一张”表中,那么,哪些“表"中的规则会放在链”的最前面执行呢,这时候就需要有一个优先级的问题,我们还拿 prerouting"链"做图示

prerouting链中的规则存放于三张表中,而这三张表中的规则执行的优先级如下
raw --> mangle—> nat

但是我们知道, iptables为我们定义了4张长"表"当他们处于同一条"链"时,执行的优先级如下
优先级次序(由高而低):
raw -- mangle --> nat—> filter
但是我们前面说过,某些链天生就不能使用某些表中的规则,所以,4张长表中的规则处于同一条链的目前只有 output链,它就是传说中海陆空都能防守的关卡。

为了更方便的管理,我们还可以在某个表里面创建自定义链,将针对某个应用程序所设置的规则放置在这个自定义链中,但是自定义链接不能直接使用,只能被某个默认的链当
做动作去调用才能起作用,我们可以这样想象,自定义链就是一段比较"短"的链子,这条短”链子上的规则都是针对某个应用程序制定的,但是这条短的链子并不能直接使用
而是需要焊接在 Iptables默认定义链子上,才能被 iptables使用,这就是为什么默认定义的链需要把自定义链当做动作去引用的原因。这是后话,后面再聊,在实际使用
时我们即可更加的明白。

数据经过防火墙的流程

综上所述,我们可以将数据包通过防火墙的流程总结为下图:

我们在写 Iptables规则的时候,可以时刻牢记这张路由次序图,灵活配置规则。

我们将经常用到的对应关系重新写在此处,方便对应图例查看。

链的规则存放于哪些表中(从链到表的对应关系)
· REROUTING的规则可以存在于:raw表, mangle表,nat表。
·NPUT的规则可以存在于: mangle表, filter表,( centos7中还有nat表, centos6中没有)。
·FORWARD的规则可以存在于: mangle表, filter表。
·OUTPUT的规则可以存在于:raw表 mangle表,nat表, filter表。
·POSTROUTING的规则可以存在于: mangle表,nat表。

表中的规则可以被哪些链使用(从表到链的对应关系):
·raw表中的规则可以被哪些链使用: PREROUTING, OUTPUT
·mangle表中的规则可以被哪些链使用: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
·nat表中的规则可以被哪些链使用: PREROUTING, OUTPUT, POSTROUTING( centos7中还有|NPUT, centos6中没有
·filter表中的规则可以被哪些链使用: INPUT, FORWARD, OUTPUT

下图中nat表在 centos7中的情况就不再标明。

规则的概念

规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理
那么我们来通俗的解释一下什么是 Iptables的规则,之前打过一个比方,每条链都是一个"关卡,每个通过这个"关卡”的报文都要匹配这个关卡上的规则,如果配,则对报
文进行对应的处理,比如说,你我二人此刻就好像两个报文”,你我二人此刻都要入关,可是城主有命,只有器宇轩昂的人才能入关,不符合此条件的人不能入关,于是守关将
土按照城主制定的规则”,开始打量你我二人,最终,你顺利入关了,而我已被拒之门外,因为你符合器宇轩昂的标准,所以把你放行"了,而我不符合标谁,所以没有被放
行,其实,“宇轩昂就是种匹配条件”,“放行就是种动作,"匹配条件”与”动作“组成了规则

了解了规则的概念,那我们来聊聊规则的组成部分此处只是大概的将规则的结构列出,后面的文章中会单独对规则时进行总结。
规则由匹配条件和处理动作组成

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

基本匹配条件
源地址 Source IP,目标地址 Destination|P
上述内容都可以作为基本匹配条件

扩展匹配条件
除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是 netfilter中的部分,只是以模块的形式存在,如果想要
使用这些条件,则需要依赖对应的扩展模块
源端口 Source port,目标端口 Destination Port
上述内容都可以作为扩展匹配条件

  • ACCEPPT:接受数据包。

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

  • REDIRECT:重定向、映射、透明代理。

  • SNAT:源地址转换。

  • DNAT:目标地址转换。

  • MASQUERADE:IP伪装(NAT),用于ADSL。是SNAT的一种特殊形式,适用于动态的,临时会变的IP上。

  • LOG:日志记录。在/var/log/messages文件中记录日志信息。除了记录对数据包不做任何动作。

基础命令

-t<表>:   指定要操纵的表

-A:  向规则链末尾中添加,追加条目;(append)

-D:  从规则链中删除条目;(delete)

-I:  向规则链的开头(或者指定序号)中插入条目,未指定规则序号时,默认作为第一规则;(insert)

-R:  替换规则链中的条目;

-L:  显示规则链中已有的条目;(list)

-F:  清除规则链中已有的条目,若位置定规则序号,则默认清空所有;(flush)

-v:    查看规则列表时显示详细信息(verbose)

-Z:  清空规则链中的数据包计算器和字节计数器;

-N:  创建新的用户自定义规则链;

-P:  定义规则链中的默认目标;(police)

-h:  显示帮助信息;

-p:  指定要匹配的数据包协议类型;

-s:  指定要匹配的数据包源ip地址;

-j<目标>:指定要跳转的目标;

-i<网络接口>:指定数据包进入本机的网络接口;

-o<网络接口>:指定数据包要离开本机所使用的网络接口。

iptables命令选项输入顺序:

iptables  -t 表名 <-A/I/D/R>  规则链名  [规则号]  <-i/o 网卡名>  -p  协议名  <-s  源IP/源子网>  -- sport  源端口  <-d 目标IP/目标子网>  -- dport  目标端口  -j  动作

PS:

LUNIX7 上面独有的firewall 区域划分  public 默认区域信任区域 非信任区域

systemctl start firewalld.service LINUX7上面独有的防火墙firewall

NAT表基础拓扑实验

NAT

NAT 地址转换

SNAT source 源地址 转换  作用场景:内部网络访问广域网

DNAT destnation 目标地址转换  作用场景:广域网主机访问内部网络服务器

1.拓扑实验环境

搭建以上iptables规则。

一共开三个虚拟机 全部网络适配器设置为仅主机模式

web1:一台centos6.5  作为内部网络内的客户端,设置ip地址为192.168.100.101

web2:一台centos7 作为外部网络,设置ip地址12.0.0.12

一台centos6.5 作为iptables防火墙(要有双网卡)一个网卡设置为内部网的网卡192.168.100.1,一个设置为外部网的网卡12.0.0.1,service network restart 重启下网卡

2.实验思路

在iptables防火墙上配置

· 清空防火墙的规则filter 默认规则

· 清空防火墙 nat规则

· vim /etc/sysctl.conf——net.ipv4.ip_forward = 1            #永久开启路由功能

· sysctl –p                    #重新加载配置文件

· 开始进行iptables的规则设置

3.操作步骤

1)iptables防火墙 :修改配置文件,开启路由功能

清除iptables防火墙中原有的规则(因为是实验所以删除所有iptables规则,现实中按实际情况操作)

2)SNAT source : 源地址转换

POSTOUTING:用于源地址转换(SNAT)出站进行的过滤。

命令是:

[ root@linuxidc  ~]#  iptables –t nat –A POSTROUTING –s 192.168.100.0/24 –o eth0 –j SNAT --to-source 12.0.0.1

#使192.168.100.0网段的内网web服务数据包出站转换成12.0.0.1的IP地址

3)DNAT destination : 目标地址转换

PREROUTING:用于目标地址转换(DNAT)进站进行的过滤。

命令是:

[ root@linuxidc  ~]# iptables –t nat –A PREROUTING –d 12.0.0.1 –p tcp --dport 80 –i eth1  –j DNAT -- to-destination 192.168.100.101

#使通过12.0.0.1网卡的数据包发送的ip地址指向为192.168.100.101的内网web服务

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2018-08/153567.htm

linux
相关资讯       IpTables  Iptables防火墙 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款