关于防火墙那些你不得不知道的知识!防火墙基础知识!linux下的防火墙!什么是三表五链!一文全都告诉你!
Posted Tuki_a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于防火墙那些你不得不知道的知识!防火墙基础知识!linux下的防火墙!什么是三表五链!一文全都告诉你!相关的知识,希望对你有一定的参考价值。
防火墙
什么是防火墙?
防火墙是一种特殊编程的路由器,安装在一个网点和网络的其余部分之间,目的是实施访问控制策略。
防火墙就是通过定义一些有顺序的规则,并管理进入到网络内的主机数据数据包的一种机制。
更广义的来说,只要能够分析与过滤进出我们管理的网络的数据包的数据,就可以称为防火墙。
防火墙位于互联网和内部网络之间。
互联网这边是防火墙的外面,而内部网络这边是防火墙的里面。
一般都把防火墙里面的网络称为“可信的网络”(trusted network)",
而把防火墙外面的网络称为“不可信的网络”(untrusted network)。
为什么需要防火墙
防火墙是整个数据包要进人主机前的第一道关卡。
防火墙(frewall)作为一种访问控制技术,通过严格控制进出网络边界的分组,
禁止任何不必要的通信,从而减少潜在入侵的发生,尽可能降低这类安全威胁所带来的安全风险。
防火墙最大的功能就是帮助你限制某些服务的访问来源。
主要任务可以描述为以下3个:
切割被信任(如子域)与不被信任(如Internet)的网段。
划分出可提供Internet的服务与必须受保护的服务。
分析出可接受与不可接受的数据包状态。
防火墙的分类
防火墙技术一般分为以下两类:
(1)分组过滤路由器:
一种具有分组过滤功能的路由器,它根据过滤规则对进出内部网络的分组执行转发或者丢弃(即过滤)。
过滤规则是基于分组的网络层或运输层首部的信息,
例如:源/目的IP地址、源/目的端口、协议类型(TCP或UDP),等等。
分组过滤可以是无状态的,即独立地处理每一个分组。
也可以是有状态的,即要跟踪每个连接或会话的通信状态,并根据这些状态信息来决定是否转发分组。
分组过滤路由器的优点是简单高效,且对于用户是透明的,但不能对高层数据进行过滤。
例如,不能禁止某个用户对某个特定应用进行某个特定的操作,不能支持应用层用户鉴别等。
这些功能需要使用应用网关技术来实现。
(2)应用网关/代理服务器(proxyserver):
它在应用层通信中扮演报文中继的角色。
一种网络应用需要一个应用网关,
在应用网关中,可以实现基于应用层数据的过滤和高层用户鉴别。
所有进出网络的应用程序报文都必须通过应用网关。
当某应用客户进程向服务器发送一份请求报文时,先发送给应用网关,应用网关在应用层打开该报文,查看该请求是否合法。合法转发,不合法丢弃。
应用网关也有一些缺点。
首先,每种应用都需要一个不同的应用网关(可以运行在同一台主机上)。
其次,在应用层转发和处理报文,处理负担较重。
另外,对应用程序不透明,需要在应用程序客户端配置应用网关地址。
通常可将这两种技术结合使用。
它包括两个分组过滤路由器和一个应用网关,它们通过两个局域网连接在一起。
linux下的防火墙
将防火墙区分为网络型与单一主机型的管理。
单一主机型:主要是数据包过滤型的Netfilter与依据服务软件程序作为分析的TCP Wrappers两种。
区域型:由于此类防火墙都是充当路由器角色,因此防火墙类型主要有数据包过滤的Netfilter 与利用代理服务器(Proxy Server)进行访问代理的方式了。
1. Netfilter (数据包过滤机制)
linux系统在内核外加了层访问限制,这个访问限制就是 Netfilter数据包过滤机制。
数据包过滤:分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决定该连接为放行或抵挡的机制。
由于这种方式可以直接分析数据包头部数据,所以包括硬件地址(MAC)、软件地址 (IP) 、TCP、 UDP、ICMP等数据包的信息都可以进行过滤分析。
因此用途非常广泛(其实主要分析的是OSI七层协议的2、3、4层)。
在Linux上面我们使用内核内建了Netfilter 这个机制,Netfilter 利用一些数据包过滤的规则设置,来定义出什么数据可以接收,什么数据需要剔除,以达到保护主机的目的。
Netfilter 提供了iptables这个软件来作为防火墙数据包过滤的命令。通过iptables写入访问策略,而iptables又是通过表格和链管理这些策略的,写入表格可以用iptables或者firewalld软件。
由于Netilter是内核内建的功能,因此效率非常高,非常适合于一般小型环境的设置。
Linux的防火墙因为它本身就是由Linux内核所提供。直接通过内核来处理,因此性能非常好。
不过,不同内核版本所使用的防火墙软件是不一样的,因为内核支持的防火墙是不断演变的。
Version2.4及之后:主要是使用iptables这个防火墙机制。(uname -r可以查看内核版本)
当一个网络数据包要进入到主机之前,会先经过Netfilter进行检查,那就是iptables的规则。检查通过则接受(ACCEPT) 进入本机取得资源,如果检查不通过,则可能予以丢弃(DROP)。规则是有顺序的。从上到下,符合则执行,不符合再往下。
Netfilter可以做的与不可以做的
可以做到的:
拒绝让 Internet的数据包进入主机的某些端口
拒绝让某些来源 IP的数据包进入
拒绝让带有某些特殊标志 (flag) 的数据包进入
分析硬件地址(MAC)来决定连接与否
不可以做到的:
防火墙并不能有效阻挡病毒或木马程序
防火墙对于来自内部LAN的攻击无能为力
2. TCP Wrappers (程序管理)
另一种抵挡数据包进入的方法,是通过服务器程序的外挂(tcpd) 来处置的。
与数据包过滤不同,这种机制主要是分析谁对某程序进行访问,然后通过规则去分析该服务器程序谁能够连接、谁不能连接。
由于主要是通过分析服务器程序来管理,因此与启动的端口无关,只与程序的名称有关。
3.Proxy(代理服务器)
代理服务器是一种网络服务, 它可以代理用户的需求,代为前往服务器取得相关的资料。
Client 并没有直接连上Internet,所以在实线部分(步骤1,4),只要Proxy与Client连接就可以了。此时Client甚至不需要拥有Public IP。而当有人想要攻击Client端的主机时,除非他能够攻破Proxy Server,否则是无法与Client 连接的。
另外,一般Proxy主机通常仅开放port 80、21. 20等WWW与FTP的端口,而且通常Proxy就架设在路由器上面,因此可以完整地掌控局域网内的对外连接,让LAN变得更安全。
三表五链:
三表:
表名 | 作用 | 包含链 |
---|---|---|
Filter (过滤器) | 管理本机进出的数据包。主要是经过本机内核的数据。 | INPUT、OUTPUT、FORWARD |
NAT (地址转换) | 管理后端主机(防火墙内部的其他计算机),主要用来进行来源与目的地的IP或port的转换,与Linux本机无关,主要与Linux主机后的局域网内计算机相关。主要是不经过内核的数据。 | PREROUTING、POSTROUTING、OUTPUT |
Mangle (破坏者) | 主要是与特殊的数据包的路由标志有关(管理特殊标志的使用),早期仅PREROUTING及OUTPUT链,不过从kernel 2.4.18之后加入了INPUT及FORWARD链。当filter和nat表不够用时使用,对过滤方式进行补充说明。 | PREROUTING、OUTPUT、INPUT、FORWARD |
我们也可以自定义额外的链。
五链:
链名 | 作用 |
---|---|
INPUT | 主要与想要进入Linux本机的数据包有关。 |
OUTPUT | 主要与Linux本机所要送出的数据包有关。 |
FORWARD | 与Linux本机没有关系,它可以传递数据包到后端的计算机中,与NAT的table相关性较高。 |
PREROUTING | 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)。 |
POSTROUTING | 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)。 |
表链之间的工作机制,数据包的流向控制
假如Linux是作为www服务,那么要让开放客户端对www请求有响应,就需要处理Filter的INPUT链。
而如果Linux是作为局域网的路由器,那么就要分析NAT的各个链以及Fiter的FORWARD链。也就是说,其实各个表格的链之间是有相关性的。iPtables内建各表格与链的相关性如图所示(省略了mangle表格,因为较少使用)。
iptables 可以控制3种数据包的流向(结合上图):
■数据包进入Linux主机使用资源(路径A) :
在路由判断后确定是向Linux主机请求数据的数据包,主机就会通过Filter的INPUT链来进行控制。
■数据包通过 Linux主机的转递,没有使用主机资源,而是向后端主机流动(路径B) :
在路由判断之前进行数据包报头的修订后,发现数据包主要是要通过防火墙而去后端,此时数据包就会通过路径B来移动。也就是说,该数据包的目标并非Linux本机。主要经过的链是Filter的FORWARD以及NAT的POSTROUTING、PREROUTING。
■数据包由 Linux本机发送出去(路径C) :
例如响应客户端的要求,或者是Linux本机主动送出的数据包,都是通过路径C来进行的。先是通过路由判断,决定了输出的路径后,再通过Filter的OUTPUT链来传送。当然,最终还是会经过NAT的POSTROUTING链。
事实上与本机最有关的其实是Filter表格内的INPUT与OUTPUT这两条链,如果iptables只是用来保护Linux 主机本身的话,根本就不需要理NAT规则,直接设置为开放即可。
不过,如果防火墙是用来管理LAN内的其他主机的话,那么就必须要再针对Filter 的FORWARD这条链,还有NAT的PREROUTING、POSTROUTING以及OUTPUT进行额外的规则制订。
参考书籍:
计算机网络7 ----- 谢希仁
鸟哥Linux私房菜:服务器篇 ----- 鸟哥
以上是关于关于防火墙那些你不得不知道的知识!防火墙基础知识!linux下的防火墙!什么是三表五链!一文全都告诉你!的主要内容,如果未能解决你的问题,请参考以下文章
关于Nginx的一些你不得不知道的内容(HTTP协议基础知识),内容比较多建议收藏哦