Linux基础服务 ·

防火墙简介

防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。

在网络中,所谓“防火墙”,是指一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种隔离技术。防火墙是在两个网络通讯时执行的一种访问控制尺度,它能允许你“同意”的人和数据进入你的网络,同时将你“不同意”的人和数据拒之门外,最大限度地阻止网络中的黑客来访问你的网络。换句话说,如果不通过防火墙,公司内部的人就无法访问Internet,Internet上的人也无法和公司内部的人进行通信。

Linux 系统上防火墙的主要类别

依据防火墙管理的范围,我们可以将防火墙区分为网段型与单一主机型的控管。在单一主机型的控管方面, 主要的防火墙有封包过滤型的 Netfilter 与依据服务软件程序作为分析的 TCP Wrappers 两种。若以区域型的防火墙而言, 由于此类防火墙都是当作路由器角色,因此防火墙类型主要则有封包过滤的 Netfilter 与利用代理服务器 (proxy server) 进行存取代理的方式了。

  • Netfilter (封包过滤机制)

所谓的封包过滤,即分析进入主机的网络封包,将封包的表头数据捉出来进行分析,以决定该联机为放行或抵挡的机制。 由于这种方式可以直接分析封包表头数据,所以包括硬件地址(MAC), 软件地址 (IP), TCP, UDP, ICMP 等封包的信息都可以进行过滤分析的功能,因此用途非常的广泛。(其实主要分析的是 OSI 七层协议的 2, 3, 4 层)。

在 Linux 上面我们使用核心内建的 Netfilter 这个机制,而 Netfilter 提供了 iptables 这个软件来作为防火墙封包过滤的指令。由于 Netfilter 是核心内建的功能,因此他的效率非常的高! 非常适合于一般小型环境的设定!Netfilter 利用一些封包过滤的规则设定,来定义出什么资料可以接收, 什么数据需要剔除,以达到保护主机的目的!

  • TCP Wrappers (程序控管)

另一种抵挡封包进入的方法,为通过服务器程序的外挂 (tcpd) 来处置的!与封包过滤不同的是, 这种机制主要是分析谁对某程序进行存取,然后通过规则去分析该服务器程序谁能够联机、谁不能联机。 由于主要是通过分析服务器程序来控管,因此与启动的端口无关,只与程序的名称有关。 举例来说,我们知道 FTP 可以启动在非正规的 port 21 进行监听,当你通过 Linux 内建的 TCP wrappers 限制 FTP 时, 那么你只要知道 FTP 的软件名称 (vsftpd) ,然后对他作限制,则不管 FTP 启动在哪个端口,都会被该规则管理的。

  • Proxy (代理服务器)

其实代理服务器是一种网络服务,它可以『代理』用户的需求,而代为前往服务器取得相关的资料。就有点像底下这个图示吧:

以上图为例,当 Client 端想要前往 Internet 取得 Google 的数据时,他取得数据的流程是这样的:

client 会向 proxy server 要求数据,请 proxy 帮忙处理;

proxy 可以分析使用者的 IP 来源是否合法?使用者想要去的 Google 服务器是否合法? 如果这个 client 的要求都合法的话,那么 proxy 就会主动的帮忙 client 前往 Google 取得资料;

Google 所回传的数据给 proxy server ,所以 Google 服务器上面看到的是 proxy server 的 IP ;最后 proxy 将 Google 回传的数据送给 client。

client 并没有直接连上 Internet ,所以在实线部分(步骤 1, 4)只要 Proxy 与 Client 可以联机就可以了!此时 client 甚至不需要拥有 public IP !而当有人想要攻击 client 端的主机时, 除非他能够攻破 Proxy server ,否则是无法与 client 联机的!

另外,一般 proxy 主机通常仅开放 port 80, 21, 20 等 WWW 与 FTP 的端口而已,而且通常 Proxy 就架设在路由器上面,因此可以完整的掌控局域网络内的对外联机!让你的 LAN 变的更安全!


实现防火墙最重要的一个理念就是对数据包进行过滤与分析了,因此又发展出了基于硬件实现数据包特征分析与过滤的硬件防火墙,与靠软件处理逻辑运行于通用硬件平台之上的防火墙了,而硬件的研发成本与运行效率相对于软件来说又会高很多,因此硬件防火墙的价格一般都是非常昂贵的。

而在数据包分析中,过滤的规则越详细,就意味着需要分析的数据会更多,在 Netfilter (封包过滤机制)中,一般分析的是 OSI 七层协议的 2, 3, 4 层,也就是说它主要是针对对 2 层的 MAC、3 层的 IP、4层的 端口 信息来实现过滤,显然越往上层走其效率就会越低了。

而在 TCP Wrappers (程序控管)机制中,其主要分析应用层的数据了,只有到了这一层次,才能在数据包中解析其主要的应用包头信息,这样才可以针对其进行过滤,不过其效率会更低。

在配置防火墙时,一定要遵循最小权限规则。

防火墙的一般网络布线示意

  • 单一网段,仅有一个路由器:

防火墙除了可以作为 Linux 本机的基本防护之外,他还可以架设在路由器上面以管控整个局域网络的封包进出。 因此,在这类的防火墙上头通常至少需要有两个接口,将可信任的内部与不可信任的 Internet 分开, 所以可以分别设定两块网络接口的防火墙规则!

由于防火墙是设定在所有网络封包都会经过的路由器上头, 因此这个防火墙可以很轻易的就掌控到局域网络内的所有封包, 而且你只要管理这部防火墙主机,就可以很轻易的将来自 Internet 的不良网络封包抵挡掉。 只要管理一部主机就能够造福整的 LAN 里面的 PC,比较方便。

如果想要将局域网络控管的更严格的话,甚至可以在这部 Linux 防火墙上面架设更严格的代理服务器, 让客户端仅能连上你所开放的 WWW 服务器而已,而且还可以通过代理服务器的登录文件分析功能, 明确的查出来那个使用者在某个时间点曾经连上哪些 WWW 服务器! 如果在这个防火墙上面再加装类似 MRTG 的流量监控软件,还能针对整个网段的流量进行监测。这样配置的优点是:

  1. 因为内外网段已经分开,所以安全维护在内部可以开放的权限较大!
  2. 安全机制的设定可以针对 Linux 防火墙主机来维护即可!
  3. 对外只看的到 Linux 防火墙主机,所以对于内部可以达到有效的安全防护!

  • 内部网络包含安全性更高的子网,需内部防火墙切开子网:

一般来说,我们的防火墙对于 LAN 的防备都不会设定的很严格!所以是信任网段之一!不过,最常听到的入侵方法也是使用这样的一个信任漏洞! 因为你不能保证所有使用企业内部计算机的用户都是公司的员工,也无法保证你的员工不会『搞破坏!』 更多时候是由于某些外来访客利用移动式装置 (笔记本电脑) 连接到公司内部的无线网络来加以窃取企业内部的重要信息。

所以,如果你有特别重要的部门需要更安全的保护网络环境,那么将 LAN 里面再加设一个防火墙,将安全等级分类,那么将会让你的重要数据获得更佳的保护!整个架构有点像下图所示。


  • 在防火墙的后面架设网络服务器主机:

还有一种设定是将提供网络服务的服务器放在防火墙后面,这有什么好处呢? 如下图所示,Web, Mail 与 FTP 都是通过防火墙连到 Internet 上面去,所以, 底下这四部主机在 Internet 上面的 Public IP 都是一样的! 只是通过防火墙的封包分析后,将 WWW 的要求封包转送到 Web 主机,将 Mail 送给 Mail Server 去处理而已(通过 port 的不同来转递)。

因为四部主机在 Internet 上面看到的 IP 都相同,但是事实上却是四部不同的主机, 而当有攻击者想要入侵你的 FTP 主机时,他使用各种分析方法去进攻的主机,其实是『防火墙』那一部, 攻击者想要攻击你内部的主机,除非他能够成功的搞定你的防火墙,否则就很难入侵你的内部主机!

而且,由于主机放置在两部防火墙中间,内部网络如果发生状况时 (例如某些使用者不良操作导致中毒、 被社交工程攻陷导致内部主机被绑架等等的) ,是不会影响到网络服务器的正常运作的。 这种方式适用在比较大型的企业当中,因为对这些企业来说,网络主机能否提供正常稳定的服务是很重要的!

不过,这种架构下所进行的设定就得包含 port 的转递,而且要有很强的网络逻辑概念, 可以厘清封包双向沟通时的流动方式。对于新手来说,设定上有一定的难度, 不太建议新手这么做!

防火墙的使用限制

从前面的分析中,我们已经知道过封包滤式防火墙主要在分析 OSI 七层协议当中的 2, 3, 4 层,既然如此的话, Linux 的 Netfilter 机制到底可以做些什么事情呢?其实可以进行的分析工作主要有:

  • 拒绝让 Internet 的封包进入主机的某些端口
    例如你的 port 21 这个 FTP 相关的端口,若只想要开放给内部网络的话,那么当 Internet 来的封包想要进入你的 port 21 时,就可以将该数据封包丢掉!因为我们可以分析的到该封包表头的端口号码!
  • 拒绝让某些来源 IP 的封包进入
    例如你已经发现某个 IP 主要都是来自攻击行为的主机,那么只要来自该 IP 的资料封包,就将他丢弃!这样也可以达到基础的安全!
  • 拒绝让带有某些特殊旗标 (flag) 的封包进入
    最常拒绝的就是带有 SYN 的主动联机的旗标了!只要一经发现,你就可以将该封包丢弃!
  • 分析硬件地址 (MAC) 来决定联机与否
    如果你的局域网络里面有比较捣蛋的但是又具有比较高强的网络功力的高手时,如果你使用 IP 来抵挡他使用网络的权限,而他却懂得反正换一个 IP 就好了! 那我们可以死锁他的网络卡硬件地址!因为 MAC 是焊在网络卡上面的,所以你只要分析到该使用者所使用的 MAC 之后,可以利用防火墙将该 MAC 锁住。

虽然 Netfilter 防火墙已经可以做到这么多的事情,不过,还是有很多事情没有办法通过 Netfilter 来完成! 什么?设定防火墙之后还不安全!

  • 防火墙并不能很有效的抵挡病毒或木马程序
    假设你已经开放了 WWW 的服务,那么你的 WWW 主机上面,防火墙一定得要将 WWW 服务的 port 开放给 Client 端登入才行!否则你的 WWW 主机设定了等于没有用对吧!也就是说,只要进入你的主机的封包是要求 WWW 数据的,就可以通过你的防火墙。那好了,『万一你的 WWW 服务器软件有漏洞,或者本身向你要求 WWW 服务的该封包就是病毒在侦测你的系统』时,你的防火墙可是一点办法也没有! 因为本来设定的规则就是会让他通过。
  • 防火墙对于来自内部 LAN 的攻击较无承受力
    一般来说,我们对于 LAN 里面的主机都没有什么防火墙的设定,因为是我们自己的 LAN ,所以当然就设定为信任网段了!不过, LAN 里面总是可能有些网络小白,虽然他们不是故意要搞破坏, 但是他们就是不懂!所以就乱用网络了。这个时候就很糟糕,因为防火墙对于内部的规则设定通常比较少, 所以就容易造成内部员工对于网络误用或滥用的情况。

所以啦,在你的 Linux 主机实地上网之前,还是得先:

  • 关闭几个不安全的服务;
  • 升级几个可能有问题的套件;
  • 架设好最起码的安全防护--防火墙--

参与评论