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

相关推荐

  • sed工具 vim编辑器

    sed工具:    用法:           sed [option]… 'script' inputfile…      常用选项:           &nbs…

    Linux干货 2016-08-12
  • 3、常用命令介绍

    http://note.youdao.com/yws/public/redirect/share?id=4840e26ee1d2b2c928b6c26e2ba14661&type=false

    Linux干货 2016-08-08
  • centos7 root密码忘记怎么修改

           对于事务繁忙或者容易忘东忘西的朋友说,想要记着一些事情总感觉比登天还要难,特别是像密码之类的。可能要记忆的密码太多,总是不经意间就把密码忘记或者把密码混淆。总之这种站的比例还是有点分量的,例如我刚刚接触Linux时 ,第一把centos7装到电脑上没有多久,就把root密码忘记了,费了好时间,也请教了很多…

    Linux干货 2017-04-03
  • N22-第十一周作业

    第十一周作业 1、详细描述一次加密通讯的过程,结合图示最佳 (1)为了做到数据的安全,应该同时满足 保密性 完整性 可用性 (2)假设A,B通信,A是客户机,B是服务器 a、客户端向服务器端发送自己支持的加密方式,并且向服务器端请求其CA颁发给的证书 b、服务器选择共同支持的加密方式并发送自己的证书; c、客户端收到其证书,并验证证书,证书必须同时满足以下条…

    Linux干货 2016-12-06
  • Kernel——linux的核心

    Linux Kernel: CentOS 启动流程:POST –> BootLoader(BIOS,MBR) –>Kernel(initrd) –> rootfs –> switch_root –> /sbin/init     …

    Linux干货 2016-09-11
  • 运维监控大数据的提取与分析

    本文内容整理来自【敏捷运维大讲堂】蒋君伟老师的线上直播分享。分别从以下3个维度来分享:1、云时代监控分析的窘境;2、使用标签标记监控数据的维度;3、监控数据应用场景。 云时代监控分析的窘境 在虚拟化与容器技术广泛应用的情况下,运维对象大规模地增长,监控平台每天存储的指标都以亿计,所以监控数据如今已经成了大数据。传统的监控工具在这种场景下,对于数据的提取分析,…

    系统运维 2017-01-09