图文并茂详解iptables 防火墙工做原理及知识点

  • 防火墙相关概念linux

  • iptables相关概念以及工做原理
    web

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

  • iptables中的基本命令详解centos



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

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

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


系统安全:app

1.第三方监控杀毒软件框架

2.系统策略tcp

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中不被称为关卡"而被称为链"。

1


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


2


因此,根据上图,咱们可以想象出某些经常使用场景中,报文的流向
到本机某进程的报文: 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张表中。


timg

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

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

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

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

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



2. 规则链 处理时机

链的概念
如今,咱们想象一下,这些”关卡在 tables中为何被称做"链呢?咱们知道,防火墙的做用就在于对通过的报文匹配"规则”,而后执行对应的”动做“因此,当报文通过这些
关卡的时候,则必须匹配这个关卡上的规则,可是,这个关卡上可能不止有一条规则,而是有不少条规则,当咱们把这些规则串到一个链条上的时候,就造成了“链因此,咱们
把每个关卡"想象成以下图中的模样,这样来讲,把他们称为链更为合适,每一个通过这个关卡的报文,都要将这条链”上的全部规则匹配遍,若是有符合条件的规则,
则执行规则对应的动做。

3


clip_image006

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

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

PORWARD:处理转发数据包。

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

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



3.表链关系

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

4


这幅图是什么意思呢?它的意思是说, 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"链"作图示

5


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


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


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


------------------数据通过防火墙的流程-----------------

综上所述,咱们能够将数据包经过防火墙的流程总结为下图:


6


咱们在写 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中的状况就再也不标明。

7



--------------规则的概念-----------------


规则:根据指定的匹配条件来尝试匹配每一个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动做进行处理
那么咱们来通俗的解释一下什么是 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.拓扑实验环境

8

搭建以上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 重启下网卡


9


2.实验思路

在iptables防火墙上配置

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

· 清空防火墙 nat规则

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

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

· 开始进行iptables的规则设置


3.操做步骤

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

10.1

10

11


清除iptables防火墙中原有的规则(由于是实验因此删除全部iptables规则,现实中按实际状况操做)

12


2)SNAT source : 源地址转换

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

命令是:

[ root@yangruoheng  ~]#  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地址

QQ截图20180816113852


3)DNAT destination : 目标地址转换

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

命令是:

[ root@yangruoheng  ~]# 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服务

14

相关文章
相关标签/搜索