Linux笔记 No.25---(netfilter/iptables防火墙)

一、概述

iptables并不是真正意义上的防火墙,我们可以理解为一个客户端工具,用户通过ipatbles这个客户端,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架就是Netfilter

防火墙是工作在内核中的,即防火墙应该是内核中所实现的功能. netfilter才是防火墙真正的安全框架,netfilter位于内核空间;iptables是一个命令行工具,位于用户空间,通过这个命令行工具来操作netfilter

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

iptables 组件是一种工具,它使插入、修改和除去信息包过滤表中的规则变得容易。通过使用用户空间,可以构建自己的定制规则,将这些规则存储在内核空间的信息包过滤表中

netfilter/iptables 信息包过滤系统(防火墙)是一种功能强大的工具,可用于添加、编辑和除去规则,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在所谓的 链(chain)中。

防火墙分类

从逻辑上分类:

分类 说明
主机防火墙 针对单个主机进行防护
网络防火墙 处于网络入口或者边缘,针对网络入口进行防护,服务于防火墙背后的本地局域网

从物理上分类:

分类 说明
硬件防火墙 在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高
软件防火墙 应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低

二、四表五链

防火墙是基于规则来进行工作

规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。

规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。

配置防火墙的主要工作就是添加、修改和删除这些规则

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

除过这两个关卡以外,还有其他关卡(链),比如: “路由前”、“转发”、“路由后”,对应英文表示为PREROUTING、FORWARD、POSTROUTING

在这里插入图片描述

对于收到的每个数据包,都从“A”点进来,经过路由判决,如果是发送给本机的就经过“B”点,然后往协议栈的上层继续传递;否则,如果该数据包的目的地不是本机,那么就经过“C”点,然后顺着“E”点将该包转发出去。

对于本机发送的每个数据包,首先也有一个路由判决,以确定该包是从哪个接口出去,然后经过“D”点,最后也是顺着“E”点将该包发送出去。

协议栈这五个关键点A,B,C,D和E就是我们Netfilter中的链:PREOUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

(一)5个内置的链

在这里插入图片描述

在内核中的TCP/IP协议栈上选择了5个关卡(又称为“链”),这5个关卡是报文一定会流经的位置,并配置5个钩子函数(hook_function);当有报文经过时,被钩子函数钩起,对规则进行检查,并按照一定的机制(又可称为“功能”)完成处理

  • PREROUTING

    报文刚刚到达本机后是发往本机内部还是经由本机转发的,需要作出判断,可以根据目标地址检查路由表来判断,这也就意味着接下来有一个路由功能要实现,即有一个路由选择的过程。而这个位置在路由选择发生之前就要完成,所以称为PREROUTING。

  • INPUT

  • FORWARD

    一旦PREROUTING结束了,报文就有两个走向,第一,要么是到本机内部,第二要么是经过本机转发。这两种情形,到本机内部有一个专门的钩子叫INPUT,经由本机转发称为FORWARD。

  • OUTPUT

    而对于一个网卡来讲,若将其当作是报文流出的接口,那报文要通过这个网卡流出时的来源有两种可能,第一种是转发而后出去的,第二种是由本机内部发出的。而本机内部发出的称为OUTPUT。

  • POSTROUTING

    无论是由本地转发的还是经由本机内部发出的,将来它在离开本机之前需要再做一次路由选择,那就意味着路由选择发生以后要走哪条路就确定了。那第二次路由决策发生以后我们要对其做一些即将离开本机之前最后那一关再给它做一些处理,这就叫POSTROUTING,这是第二次路由决策发生以后用于做出处理的。

在这里插入图片描述
报文的流向:

  • 到本机某进程的报文:PREROUTING --> INPUT
  • 由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
  • 由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING

其实不管是PREROUTING也好,还是POSTROUTING也罢,其实它们与网卡无关,从哪个网卡进来在路由发生之前都叫PREROUTING,无论即将通过哪个网卡离开,在路由决策发生以后都叫POSTROUTING。所以它们跟网卡是没有什么关系的,它们只是TCP/IP协议栈上的功能,可以从任意一个网卡离开,从任意一个网卡进来

除了五条内置链,用户还可以对链进行自定义

(二)四表

如果说在这个FORWARD上,它既然是转发的,那么在这里添加规则的目的是什么呢?定义哪些可以转发,哪些不可以转发,那为什么转发时要做限制呢?

这其实就是网络防火墙的意义了,iptables也可以用来扮演网络防火墙的角色,怎么扮演呢?把它的规则定义在FORWARD上,如果这个时候公司里只有一个主机或一根网线能够跟外部网络通信,然后把这个网线接到Linux主机上。内网所有主机都把这个Linux主机的内网网卡当网关,那就意味着所有的报文只要跟非本地网络的通信都要经过它,那我们就可以在它上面的访问列表上做好规则,比如能访问或者不能访问QQ等等这一系列规则都可以在上面进行定义,而且我们对应哪些允许通过的主机都给它放行,哪些不允许通过的统统拒绝掉,那就能实现所谓的网络防火墙的功能了。

因此iptables可以扮演本地主机防火墙利用INPUT链、OUTPUT链即可,而又能扮演网络防火墙利用FORWARD链即可

把具有相同功能的规则的集合叫做“表”,不同的规则放置于不同的表中工作,在iptables中定义了四种表
每种表对应不同的功能。

  • filter:过滤;最根本的功能,这是被称为防火墙的赖以生存的根本。
  • nat:network address translation,网络地址转换;如果工作在网络地址转换这种模式的话,从这个角度讲,iptables这个主机更像是一个nat服务器。(nat是用来改源IP、源端口、目标IP、目标端口的)
  • mangle:拆解报文,做出修改,封装报文;把一个报文拆开后,除了地址转换外,其它可转换的部分都可以拿来做修改。
  • raw:关闭nat表上启用的连接追踪机制;是nat功能的一种补充;要想完成nat功能需要启动连接追踪功能才能进行做nat地址转换,而如果关闭了nat追踪机制的话,接下来可能在有些地方就会产生一些问题,所以raw功能用的并不是特别的多。

各表所对应的链:

filter INPUTFORWARDOUTPUT
nat PREROUTING(DNAT,目标地址转换)、OUTPUT(SNAT,源地址转换)、POSTROUTING(SNAT,源地址转换)、INPUT(centos7中有而centos6中没有)
mangle PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
raw PREROUTINGOUTPUT

其实我们还需要注意一点,因为数据包经过一个"链"的时候,会将当前链的所有规则都匹配一遍,但是匹配时总归要有顺序,我们应该一条一条的去匹配,而且我们说过,相同功能类型的规则会汇聚在一张"表"中,那么,哪些&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值