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
下一篇 2016-12-27

相关推荐

  • raid5创建

    创建分区并改类型 创建raid5   创建把文件系统 生成配置文件    

    2017-12-17
  • AOP面向方面编程

    1.引言         软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创建和管理的模块。于是出现了以系统模块化特性的面向对象程序设计技术。模块化的面向对象编程极度极地提高了软件系统的可读性、复用性和可扩展性。向对象方法的焦点在于选择对象作为模块的主要单元,并将对象与系统的…

    Linux干货 2015-04-07
  • N22-妙手-第七周博客作业第四题:RAID各级别的特性

    什么是RAID RAID的全称是Redundant Array of Independent Disks – 独立磁盘冗余阵列。基本思想是将多个相对便宜的硬盘组合成为一个硬盘阵列,使其在性能上达到或超过一块价格昂贵、容量巨大的硬盘。RAID通常被用在服务器上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统会把其当做一块硬盘。RAID分为不同的等…

    Linux干货 2016-09-27
  • 推荐-Linux Namespace的一点理解

        下文的原文来自: http://blog.csdn.net/preterhuman_peak/article/details/40857117    原文写的非常好,下文中大部分文字描述来自原文,我仅做了一点理解性的插图和实验部分。    &…

    Linux干货 2016-03-28
  • First Day

    learning

    2018-03-26
  • EXT4文件系统的初步使用

    文件系统的类型多种多样,我们接触得比较多的当属Windows系统上的FAT32和NTFS。 而EXT文件系统(Extended filesystem)则是linux上常见的文件系统类型。 目前最新的版本是ext4,常见于CentOS6之中。 1.查看当前系统中有没有挂载使用中的EXT4文件系统,可以使用mount命令: 2.如何创建一个EXT4的文件系统(f…

    系统运维 2016-02-14