防火墙相关概念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是按照规则来办事的,咱们就来讲说规则( 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张表中。
raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
nat:地址转换,用于网关路由器。Nat地址转换
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@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地址
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服务