Linux防火墙之基本原理

本系列文章主要讲述Linux防火墙的基本原理和基础使用方法:

1.什么是防火墙:

当我们把计算机连入互联网与其他计算机进行通信时,这无疑也将自己的信息暴露了,那就意味着可能会有一些心怀不轨的人会利用这些信息来攻击自己的主机,尤其是作为一台服务器向互联网用户提供服务时,就迫切需要一种隔离和保护机制,来隔离外部网络,达到保护自我的目的。而这种隔离机制就叫做防火墙。那显而易见,既然要达到隔离机制,那就要工作在边缘地带,根据其所处的位置,我们可以将其分为网络防火墙(工作在网络入口位置)和主机防火墙(工作于主机之上)。

2.Linux之上的防火墙:

在Linux之上,为了达到隔离机制,同样需要防火墙,Linux之上的实现方式是工作于内核空间的netfilter,以及工作于用户空间提供给用户定义防火墙策略的iptables,那他们基本的工作原理是什么呢?

对一个数据包的基本处理过程是:

 主机通过物理网卡接收数据包,通过解分装数据包,查看数据包的ip首部信息判断是否是发送给本机的,如果是则数据包从内核空间转交给监听在某个对应端口号上的应用程序,从而完成通信。

 当本机要向某主机发送数据时,从tcp/ip协议栈的上层通过层层分装之后,通过向内核发起系统调用,从而将数据包交给物理网卡,由物理网卡向外发送数据包。

 当解分装数据包查看ip首部信息后,发现该数据包是要通过本机进行转发,那么本机通过查看路由表,从而进行对数据包的转发。

正是基于对数据包的处理机制,Linux防火墙正是在这些数据包必经之处对其进行检查,然后根据用户定义的规则进行相应的处理。linux上通过五个钩子函数prerouting,iuput,output,forward,postrouting对应五条定义规则的链prerouting,input,output,forward,postrouting从而实现对数据包进行处理,之所以叫做钩子函数是因为当一个数据包到达时,这几个函数像钩子一样将其勾住,从上而下对其进行检查,从而决定对数据包的处理动作。如下图所示,在linux内核之中,对数据包的处理要经过prerouting,路由选择,从而判断数据是进入本机,或者是通过本机转发,对于本机发送的数据则是从用户空间进入内核空间,经过postrouting之后流出本机。而linux之中的防火墙netfilter不仅提供fileter(数据包过滤)功能,还有其他三个功能,分别是raw(与连接追踪机制有关),mangle(修改数据包的首部信息),nat(地址转换),这四个功能对应四个表。于是总结来说就是:linux的netfilter功能提供四个表对应四个功能,通过往每个功能上的链来指定规则,从而达到对数据包实现不同的处理。

iptables-routing.jpg

(该图取自互联网)

根据上图我们可以清晰的看到:

数据报文的流向:

 . 流入本机:PREROUTING –> INPUT 

 . 由本机流出:OUTPUT –> POSTROUTING

 . 转发:PREROUTING –> FORWARD –> POSTROUTING

路由功能发生的时刻:

 . 报文进入本机后:判断目标主机是本机或其他主机

 . 报文离开本机之前:判断经由哪个接口送往下一站

每个表上所能对应的链,需要强调的是每个位置能实现的表(功能)在图中从上而下代表处理的优先级是递减的,总结为:

 . raw:prerouting,output

 . mangle:prerouting,forward,postrouting,input,output

 . nat:prerouting,postrouting,output

 . filter:input,output,forward

以上就是netfilter的基本工作原理,而要想通过netfilter来实现安全策略,重点就是选择数据包经过的不同位置上基于端口号,目的地址,源地址等来实现过滤以保证主机的安全。

原创文章,作者:zhangbao,如若转载,请注明出处:http://www.178linux.com/54775

(0)
zhangbaozhangbao
上一篇 2016-12-27 12:01
下一篇 2016-12-27 12:53

相关推荐

  • N25第五周博客作业

    第五周博客作业   1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;   2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;   3、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行; &nbs…

    Linux干货 2016-12-28
  • M25初尝试部署RAID磁盘阵列组

    在学习了linux系统管理硬盘设备的基础后,现在尝试部署RAID10硬盘组技术,在部署前我们先了解一下什么叫“RAID”磁盘冗余阵列(Redundant Array of Independent Disks)。 RAID技术就是把多块硬盘设备组合成一个容量更大、更安全的硬盘组,可以把数据切割成多个区段后分别存在各个不同物理硬盘设备上,然后利用分散读写需求赖提…

    2017-07-12
  • Linux 基础(7)——文本处理工具

    cat  tac  rev  more  less           head  tail cut  paste  wc               &nbs…

    2017-07-29
  • IO模型——进程工作的方式

    I/O模型 模型:阻塞型、非阻塞型、复用型、信号驱动型、异步 同步/异步: 关注消息通知机制      消息通知:          同步:等待对方返回消息       &nbsp…

    Linux干货 2016-10-25
  • 磁盘管理和文件系统

    磁盘结构 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信 一切皆文件:open(), read(), write(), close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位“字符”,键盘 设备号码: 主设备号:major number, 标识设备类型 次设备号:minor number, 标…

    Linux干货 2017-04-23