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

相关推荐

  • LNMP安装过程中出现的问题及解决方法

    一、背景介绍    操作系统版本:centos6.8    nginx版本:nginx-1.10.2            mysql版本:mysql5.7.16    php版本:php5.6.28   由于mysql和php的…

    Linux干货 2016-11-23
  • cat命令了解

    1 查看文件在LINUX下一切皆文件,光看见文件名和目录名对我们来说,还远远不够。今天,就来介绍一下可以打开文件的命令cat。当然,二进制的可执行文件,不能用cat。在CentOS7下,以/etc/profile文件为例,如下: 首先,怎么打开这个文件呢?直接执行:cat /etc/passwd. 这么多行,能不能看见行号呢?cat -n /etc/pass…

    Linux干货 2017-04-03
  • 第四周-grep正则表达式简单应用

    复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp -r /etc/skel /home/tuser1 && chmod 700 -R /home/tuser1 编辑/etc/g…

    Linux干货 2016-08-02
  • linux发展史-

    前言: 人类文明的进步伴随着战争,战争留下的产物也是非常伟大的。 最初用于战争的通电钢铁,如今以进入人们生活。 而它的附带产物如今也是变得妙不可言。 本文简要说明操作系统的发展过程,以及该大树下一些分支。         简 述   Linux是诞生与UNIX下的一款操系统,有着安全稳定的文件系统,…

    Linux干货 2016-10-19
  • 马哥教育网络班22期+第九周课程练习

    1. 写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash#declare -a loginuserdeclare -i sum_login=0declare -i sum_nologin=0list=($(cat /et…

    Linux干货 2017-01-03
  • lvm的应用

    前言    lvm是logical volume manager(逻辑卷管理器)的简称,通过将若干个磁盘分区连接成一个整块的卷组(volumegroup),形成一个存储池,管理员可以在卷组上随意创建逻辑卷(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按…

    Linux干货 2016-05-23