第8章 配置iptables 防火墙基础

在centos7开始,系统自带防火墙为firewalld,也支持iptables

iptables概述

netfilter/iptables :IP信息包过滤系统,它实际上由两个组件 netfilter 和 iptables 组成。

netfilter 组件也称为内核空间(Kernelspace)是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables组件是一种工具,也称为用户空间(Userspace),它使插入,修改和去除信息包过滤表中的规则变得容易。

iptables编辑的netfilter中的规则,在内存中,是立即生效的,无需重启服务,但一旦关机,规则会消失。所以要想规则永久生效,需要把规则写入开机自动执行的脚本中,或写入iptables的配置文件中,iptables开机会自动读取配置文件中的规则。

iptables的4表5链

4表:

filter表:一般的过滤功能,负责过滤数据包,包括的规则链有,input,output,forward

nat表:用于nat功能(端口映射,地址映射等)涉及到网络地址转换,包括的规则链有prerouting,postrouting,output

mangle表:用于对特定数据包的修改,主要应用在修改数据包内容上,用来做流量整形,给数据包打个标识,默认的规则链有:input,output,forward,postrouting,prerouting

raw表:prerouting链,output链,用于处理异常,一般使用不到。设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

5链:

input链:匹配目标IP是本机的数据包,通过路由表后目的地为本机

output链:出口数据包,一般不在此链上做配置,由本机产生,向外转发

forward链:匹配流经本机的数据包,通过路由表后,目的地不为本机

prerouting链:数据包进入路由表之前,用来修改目的地址,用来做DNAT,目标地址转换。如:把内网中的80端口映射到路由器外网端口上,就是外网访问内网,访问路由器公网ip地址然后通过NAT,把路由器的公网ip地址,转换成内网的192的IP了。

postrouting链:发送到网卡接口之前。用来修改源地址,用来做SNAT,源地址转换。如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网,就是内网访问外网,内网是192的ip,然后通过SNAT,源地址转换,把192的内网ip转换成路由器的公网IP了

DNAT是destination networkaddress translation的缩写,即目标网络地址转换,典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip,互联网上的访问者使用公网ip来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上,这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换。

SNAT是source networkaddress translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了,所以叫做SNAT,基于源地址的地址转换。

防火墙运行流程

1. 数据包到达网络接口,比如 eth0。 
2. 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。 
3. 如果进行了连接跟踪,在此处理。 
4. 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。 
5. 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。 
6. 决定路由,看是交给本地主机还是转发给其它主机。 

到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过: 
7. 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。 
8. 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。 
9. 进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。 
10. 进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。 
11. 进入出去的网络接口。完毕。 

另一种情况是,数据包就是发给本地主机的,那么它会依次穿过: 
7. 进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。 
8. 进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。 
9. 交给本地主机的应用程序进行处理。 
10. 处理完毕后进行路由决定,看该往那里发出。 
11. 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。 
12. 连接跟踪对本地的数据包进行处理。 
13. 进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。 
14. 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。 
15. 再次进行路由决定。 
16. 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。 
17. 进入 mangle 表的 POSTROUTING 链,同上一种情况的第9步。注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。 
18. 进入 nat 表的 POSTROUTING 链,同上一种情况的第10步。 
19. 进入出去的网络接口。完毕。

iptables过滤封包流程,表->链->规则

整体数据包分为两类:发给防火墙本身的数据包,和需要经过防火墙的数据包

1.当一个数据包进入网卡时,它首先进入prerouting链,内核根据数据包目的ip判断是否需要转送出去

2.如果数据包就是进入本机的,它就会沿着图向下移动,到达input链。数据包到了input链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过output链,然后到达postrouting链输出。

3.如果数据包是要转发出去的,且内核允许转发ÿ

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值