防火墙

引用:http://www.oschina.net/translate/introduction-to-firewalls

在建筑行业,“防火墙”是指一种专门设计用来阻止火在建筑的不同部分蔓延的墙,后来这个术语传播到了类似汽车制造业等其他行业,并在20世纪80年代末进入计算机领域。在防火墙的一侧是热闹且混乱的互联网,在另一侧是你强大但易受攻击的Web服务器。

实际上防火墙更像是一扇有时不得不让某些东西正常通过的防火门,它们监视着所有进出互联网的电子交通,并根据一系列严格的规则来判断那些是可以通过,那些是不可以通过的。

这篇文章详细地解释了它们的工作原理,有效防火墙的不同类型,以及它们所擅长和不太擅长的工作,并且详细说明了如何通过配置防火墙来保护一般的Web服务器。


 

协议和端口

一台电脑就像是一个大的住宅区.每个在Internet上的电脑都拥有一个数字地址——即我们平时所说的IP地址.在每个地址我们有两个非常大的公寓楼,每个公寓楼包含65,535个独立的公寓。这些公寓中大部分是空的,但其中少数部分特别是号码较低的住着经常沟通的居民,所有的沟通都通过邮件。

A computer is like two big blocks of apartments.
一台电脑就像两栋公寓楼. 你可以通过10点标示这些公寓建筑.

这两栋公寓大楼就称为TCP和UDP. TCP大楼中的住户仅接受认证的邮件,他们保证可以回复你,一旦你开始与TCP大楼中的某人开始交换信件,你可以一直看到他们到结束. UDP大楼有点寒酸,这栋大楼的居民只能回答,如果他们被打扰,通常会这样做,但这个也不能保证。


 

大楼内每一户居民都有各自不同的工作。例如,住在TCP街区房号为80的居民负责处理网站查询。你可以向他们发出一个像“发给我www.smashingmagazine.com的网站主页”这样的请求,他们就会及时回复你并发给你相应的数据。

住在UDP街区房号为53的居民负责DNS服务。他们负责把域名翻译为IP地址。在这个街区有时信件会丢失,但这也没关系。UDP街区负责处理的信息并不是那么关键。丢了之后需要信息的人总会再重新请求一次。

在该邮局系统中,所有地址都分三部分:计算机的IP地址,街区,和公寓的房间号。例如:80.72.139.101,TCP,80。实际上,街区指的是协议(protocol),而公寓的房间号指的是端口(port)号。TCP是Transmission Control Protocol(传输控制协议)的缩写,而UDP是User Datagram Protocol(用户数据报协议)的缩写。TCP和UDP两者最大的不同在于,TCP要在两台计算机间建立和维护一个对话(也就是连接),而UDP不需要。因而TCP比较可靠但速度上会慢一点。


 

发送者的地址

在前面的例子中,居住在80.72.139.101, TCP, 80处的提供web服务的那户居民一般都是在家读书,就等着大家的来信。他们从不主动发起对话或连接,总是处于接收端。

但是,信件的发送者也要有个地址。无论你是通过Web浏览器还是通过智能手机浏览网页时,你都会有个系统分配给你的、住在某房间的助手帮你完成浏览过程。这个助手的房间往往是在大楼中靠上面的高层。Web浏览器同Web服务器间进行对话的典型情况大致如下:

  • 来自99.99.99.99,TCP,63454:“亲爱的80.72.139.101,TCP,80,据我所知,你负责处理对网站www.smashingmagazine.com的查询请求。可否请你将/books/page发送给我?  敬启,一个Web浏览器。”
  • 来自80.72.139.101,TCP,80:“当然没问题。这就给你:<!DOCTYPE html> <html>…
  • 来自99.99.99.99,TCP,63454:“谢谢。就此搁笔。再见!“

号码低于1024的房间要比号码更大的房间稳定。这些房间有CCTV(译者注:这个CCTV所指应是闭路电视或远程监控摄像头而非那个著名的CCTV),专为提供类似网站或FTP服务等特定任务而预留。而高层的房间特别不稳定,人们总在搬家,一会搬进来一会搬出去;这些房间负责处理类似于请求Web页面和发起FTP连接等等这样的任务。


危险

但是,并非所有人都是规规矩矩的。下面就是住在咖啡馆上面的爱耍花招的骗子同住在一个易受攻击的服务器上的、爱轻信比尔的SSH居民间对话的例子。SSH是一种连接到远程计算机并在其上执行命令的方法。SSH居民一直住在TCP街区,房间号通常是22号。

  • 来自88.88.88.88,TCP,58123:“亲爱的SSH服务器,我想同你建立一个连接,并以root的身份登录。”
  • 来自80.72.139.101, TCP, 22:“当然没有问题,你的口令是?”
  • 来自88.88.88.88:“smith”
  • 来自80.72.139.101:“那不对。再试一试吧。”
  • 来自88.88.88.88:“jones”
  • 来自80.72.139.101:“还不对。再试一试吧。”
  • 来自88.88.88.88:“bloggs”
  • 来自80.72.139.101:“太棒了,Root先生你好!很久不见了,你今天想做什么?”
  • 来自88.88.88.88:“我想我要看一下/etc/passwd这个文件,里面有所有用户名?”
  • 来自80.72.139.101:“你要的信息在这里...别的还要什么?”
  • 来自88.88.88.88:“再给我看看所有内容中包含'信用卡'的文件”
  • 来自80.72.139.101:“不好意思,这需要花点时间。好了,给你。。。”
  • 来自88.88.88.88:“谢谢!就此搁笔,再见!”

上面所说的SSH对话第一部分:以root身份登录,口令输错两次,查看了一个文件。


保护级别

上面描述的服务器是易受攻击的,任何人可以通过TCP协议使用22端口向80.72.139.101服务器发送信件,如果他们能够正确猜到密码,那么他们就拥有了服务器和所有服务器文件的完全访问权限。这一节我们讨论四种基本的保护级别,你可以用来让你的服务器避免上面的情况发生,并且可以只允许你所信任的人与你的服务器进行通信。

尽管SSH只是运行在服务器上的众多服务中的一个,但通过它来起步是非常合适的,因为它能提供对服务器的大部分控制。如果一个黑客入侵了你的FTP或者SMTP服务器,他们会进行一些破坏,但是通过SSH的话,遭到的破坏会更大。


 

好的密码

SSH确实有它自己的内置保护机制,因为它需要用户名和密码。保卫一个服务器最基本的也是首要的是选择一个复杂的并且很难被猜中的密码。

无论住在22号公寓的居民什么时候收到一封邮件,他首先会询问正确的密码。尽管他是一个值得信任的人,但如果你回答错误,那么他不会给你提供任何帮助。你可以随便尝试多少次,不过每隔三次或许你要重新发送你最初的请求信件,但是他一般不会介意。


 

拒绝连接

上面谈到的SSH会话在一定程度上是不正确的,如果你真的通过SSH请求80.72.139.101(Smashing Magazine的Web服务器),你会得到如下答复:

SSH connection refused.
SSH连接被拒绝

这意味着住在80.72.139.101,TCP,22号公寓的居民正在接受邮件,但是立刻被发送回来了。在他的门上贴了一张纸,这张纸上列出了所有的允许通信的人员名单。当他收到邮件时,他会对应列表来检查发件人的地址,如果你不在名单之中,他就会拒绝任何的通信。但是他会很有礼貌地发个提示说:“不好意思,您的连接被拒绝了!”。

这种类型的保护是由类似UNIX服务器上的TCP包装器这样的软件来提供的。这种阻止是在应用程序级别使用/etc/hosts.denyand/etc/hosts.allow文件来实现的。

使用这种类型的阻止保护,特别狡猾的发送者仍然可以让住在22号公寓的居民相信他,并打开信件来阅读。同样,依赖个体居民来记录并执行名单列表。尽管在22号公寓的这个家伙非常尽职尽责,但是其它公寓的居民并非如此。


软件防火墙

软件防火墙就像门房中的看门人,对于所有发送进来的邮件,他会在将邮件分发给居民前,对这些所有这些邮件进行过滤。看门人办公桌上放着一张地址列表,他将邮件发送者的地址和列表中的地址逐一比对。如果列表中没有你的地址,那么看门人就会直接将你发送过来的信件扔进垃圾箱,而且不会给出任何跟踪信息或礼貌的道歉,一声不吭地扔了。看门人同样也对要发送出去的邮件进行过滤,过滤的方法是查看他手里的列表中允许哪些居民向外部世界发送邮件。

从技术角度看上去,就象这样:

SSH连接超时 —— 原因可能是因为目的地址那里没人在家或者整个途中有防火墙

这种类型的屏蔽操作发生在操作系统层面。软件防火墙确保不合格的邮件连目的地址都无法到达。请参见TCP封装器和软件防火墙之间的区别了解更详尽的解释。


 

硬件防火墙

硬件防火墙类似于邮局中受过专业培训的安全专家。她也有同看门人类似的一个列表,详尽地列出了允许谁向谁发送邮件。她可能仅在你的IP地址处为你提供保护,也肯能同时为许多IP地址甚至整个社区提供保护。她对进进出出的所有邮件中每一个字都要进逐一排查。只要发现有她不喜欢的内容就会果断抛弃邮件。此时你就会如上图所见,仅仅看到一个“连接超时”的消息。

这种是防火墙安全级别最高的情况。信件甚至还没有到达大门口,被误送给22号居民的机会根本毫无可能会发生。

当然,你可以在各个不同层次都实施这种保护措施,还可以采用多个硬件防火墙。在本地邮局设立一个硬件防火墙,在本市比较大的分拣办公室也安装一个,也可以安装一个防火墙对进入整个县、州或国家的所有邮件进行过滤。

请注意,实际上,硬件防火墙只是一台专门作为防火墙的计算机而已,它同Web服务器之间进行了物理隔离。防火墙本身依然是运行在计算机上的一个软件。


无状态和有状态的防火墙

看门人和安全专员对进出邮件进行过滤。如果他们是新上岗的,那他们就会有点象无状态防火墙,也即,包过滤器(Packet Filter)。无状态防火墙平等处理所有邮件。当你向80号房间发送邮件时,80号房间会给你回一封邮件。回信需要通过列表的检查,发送给你的邮件只有在80号房间允许向外发出邮件的情况下,才能通过检查。

经过一段时间以后,他们的工资得以上调,从而成为了有状态的防火墙。经过培训,他们会对即将发出去的邮件进行区别对待,识别出哪些是回信哪些是全新的邮件。因此,他们的规则列表比以前要精炼得多。对于已经建立通信通道的回信,他们会按照要求给予放行;而那些新发起的发送出去的邮件就会被抛弃。因此,当你发邮件给80号房间时,给你的回信会自动允许通过检查。但如果是在冬日某个寂寞的夜晚,80号房间突然自行决定开始向外发起发邮件的活动,那么这些邮件将是无法通过检查的。

下一小结将介绍过滤检查中所需的规则列表的形式是怎样的。


 

防火墙规则

无论是软件防火墙还是硬件防火墙,都会有类似的可视化管理工具。市面上的防火墙林林总总,每个防火墙都有自己做事情的方式,但一般他们都会有一些共通的概念,而他们之间的区别主要体现在复杂程度方面。有的防火墙能让你对其进行完全彻底的控制,但要达到这个效果就需要你有大量的知识并花费相当的时间和精力;还有一些防火墙使用起来很简单,但在灵活度方面就要逊色不少。

本小结将介绍相关术语,并给出防火墙配置界面的两个例子。


 

防火墙用语

下面给出的就是看门人桌子上那张纸上内容大致的样子:

  1. 发送自任何发送人,任何房间的、发送给TCP大楼的80号房间的邮件 —— 投递;从80号房间发出的给这些邮件的回信 —— 投递
  2. 发送自地址99.99.99.99,任何房间号的、发送给TCP大楼的,22号房间的邮件 —— 投递;从22号房间发出的给这些邮件的回信 —— 投递
  3. 任何其它发自或发向TCP大楼的邮件 —— 丢弃
  4. 任何其它发自或发向UDP大楼的邮件 —— 丢弃

在看门人收到每封新邮件时,他都将发送者和接收者的地址同上面的每条规则按照上面所列顺序进行比较。若同某规则相匹配,则按照规则中的指令行事,要么投递要么丢弃手里的信邮件。


总的效果是,世界上所有人都可以同80号房间的Web服务器进行通信,但只有住在99.99.99.99的人是可信任的,只有他可以同22号房间的SSH服务器进行通信。所有企图进行其它通信的邮件都会被丢弃。将上述规则转化一下,就可以为一个叫做IPTables的、真实的软件防火墙所用:

规则 协议 方向 类型 远程IP
远程端口 服务器端口 动作
1a TCP 任何 任何 任何 80 运行
1b TCP 已建立连接 任何 任何 80 运行
2a TCP 任何 99.99.99.99 任何 22 运行
2b TCP 已建立连接 99.99.99.99 任何 22 运行
3 TCP 任何 任何 任何 任何 任何 拒绝
4 UDP 任何 任何 任何 任何 任何 拒绝

然而,所有防火墙都会隐藏新的或者已建好的连接这些琐碎的细节,它们都假定所有对已建立的连接的回复是允许通过检查的,所以仅仅处理所有的新连接。基于此,上表可以简洁很多:

 

规则 协议 方向 远程IP
远程端口 服务器端口 动作
1 TCP 任何 任何 80 允许
2 TCP 99.99.99.99 任何 22 允许
3 TCP 任何 任何 任何 任何 拒绝
4 UDP 任何 任何 任何 任何 拒绝

如果要把这些规则应用于硬件防火墙,那么就还需要服务器的IP地址。这是因为硬件防火墙往往是为多个服务器工作的。在这种情况下,上面的表格就需要源和目的两项内容,并且不需要方向了。就象这样:

规则 协议 源IP
源端口 目的IP 目的端口 动作
1 TCP 任何 任何 80.72.139.101 80 允许
2 TCP 99.99.99.99 任何 80.72.139.101 22 允许
3 TCP 任何 任何 任何 任何 拒绝
4 UDP 任何 任何 任何 任何 拒绝

想要允许发出的请求,将源和目的中的内容相互交换,将服务器的IP地址80.72.139.101填写在源IP地址栏。还要注意的一点是,远端和服务器的协议总是一致的。


防火墙举例

有些防火墙会给出如上文所列的表格和表单让你进行配置,你所需要做的就是填空而已。下面给出的例子,是由Plesk 9.5.4所提供的软件防火墙工具。Plesk是一个常用的服务器管理应用程序。要看到下面给出的界面,可点击左侧的“模块(Modules)”,然后按顺序再点击“防火墙(Firewall)”,“编辑防火墙配置(Edit Firewall Configuration)”和“添加自定义规则(Add Custom Rule)”。

向Plesk 9.5.4中的防火墙添加一条新规则

该界面中具有上文所列的表格中的大部分内容:方向、表示允许或拒绝的动作、服务器端口、协议和远程/源IP地址。前面的那个小表格中用同一条规则(规则3和规则4)同时拒绝了两个方向的通信。在多数情况下,这需要通过分别选择是进还是出,建立两条规则来实现。

 

 

 

 

 

 

 

这个界面还提供了方向的另外一个选项 ——转发(forwoarding)。使用端口转发,可以将邮件从一个端口转发到另外一个端口。这常用于家庭中的宽带路由器,通过端口映射,可以让多台计算机共享一个单个的IP地址。

例如,你的笔记本的本地IP地址也许是192.168.1.10。当你请求网页(用类似192.168.1.10,TCP,60000这样的地址发出请求)时,你的邮件先是发送到你家的宽带路由器,由它将你的邮件放入一个全新的信封中,新信封上写上了新的发送者地址(比如78.78.78.78.78,TCP,12013),然后将你的请求转发到它的目的地址(比如80.72.139.101,TCP,80)。当连衣裙得到回信后,它想起12013号房间只不过是个转发地址,因此,它将邮件放入一个新信封中后将其转发给你(地址是192.168.1.10,TCP,60000)。典型的Web服务器是不需要做端口转发的,因此防火墙将屏蔽掉所有的转发动作。

Plesk防火墙只是在UNIX防火墙IPTables的基础上添加了个友好的界面。上图是用命令iptables -L所显示的当前规则。


 

防火墙的另一个例子

下面的截屏来自一个共享的硬件防火墙配置工具,该工具由主机提供商UK Fast提供的。要获得此服务,你需要付额外的费用。作为交换,你可以登录到UK Fast的网站,添加、修改和删除规则:

允许进和出的通信的硬件防火墙配置界面

该界面非常简单。该防火墙已知你的服务器的IP地址,它假定所有没有列在其中的其它所有通信都会被拒绝。你所能做的只有添加允许通信的端口。

界面中所列端口涉及向内连接的服务器端口以及向外连接的远程端口。就象上文所述一样,这些规则仅仅处理新连接,已经建立好的连接将自动通过检查。在左侧的、方向为进(incoming)的第一个规则规定,世界上所有人都可以访问服务器上的端口80(为Web而疯狂的居民)。


 

右侧第一个方向为出(outgoing)的规则规定,本服务器可以向任何其它Web服务器发出请求。你可能会奇怪你的Web服务器怎么会需要这么做。当然它不是在有空的时候自行浏览互联网。对于类似象PayPal即时支付通知这样的东西,这么做是必须的,因为你的服务器需要向PayPal服务器发出请求以确认PayPal的确接收到了支付操作。同样,其它向外的规则是为了你的服务器能够发送email,收取email账户的邮件,进行FTP操作。

在上面的界面中并没有体现远程IP地址。在下一小结中将讲解,这需要通过点击“管理配置(Admin Config)”单独进行配置。


子网

UK Fast硬件防火墙有一个单独的界面供你输入远程IP地址。他们预设了一些有限端口(比如SSH的端口22和Plesk的端口8443),只有下面给出的IP地址才能够同这些端口进行通信。其它端口(如Web服务的端口80)允许同任何人进行通信。这么做会损失一些灵活性,但能是配置工作简化不少。

输入源IP地址列表,只有这些地址才能向有限端口建立连接。

上面的界面还引入了子网这个概念。直到现在,所有规则处理的都是象99.99.99.99这样单个的IP地址,但你还可以输入一个IP地址范围。

IP地址由大小介于0和255之间的四个数字组成(现在又有一种由六个数字组成的新地址了,但相对还不怎么常用)。要是能够输入象99.99.0-255.0-255这样的地址范围就好了,但很不幸,你不能这么做。有个替代方法,你可以通过输入一个起始地址,99.99.0。0和一个子网掩码255.255.0.0达到相同目的。同样,地址范围77.77.77.0-255可以通过输入77.77.77.0和子网掩码255.255.255.0来实现。

你还可以输入象77.77.77.8-15这样更小的范围:开始地址77.77.77.8和子网掩码255.255.255.248。这个看上去有点乱因为要算清楚这些还需要进行二进制计算,但对子网的详尽解释已有很多了。


 

所有栏目

在这里对本小结中讨论过的不同栏目进行一下总结:

  • 规则编号:别忘了规则是按顺序进行检查和使用的
  • 协议:或者是TCP,或者是UDP
  • 方向:进,出,转发
  • 远程IP地址:比如77.77.77.0
  • 远程子网掩码:比如255.255.255.0
  • 远程端口或端口范围
  • 服务器的IP地址
  • 服务器的子网掩码
  • 动作:允许或禁止

有时界面里会有源和目的两项内容而不是方向,远程和服务器。这种情形下,它们与接收邮件的情况完全相同,但是是为发出的邮件预留的。换言之,在接收时远程等于是源而在发送时远程等于是目的。

下一节将对端口进行展开讨论。看门人的那张纸太有限了。一个真正的Web服务器看上去更象是上面所举的硬件防火墙的例子。


 

为Web服务器配置防火墙

Web服务器通常住在80号房间。许多其它常见的计算机服务都有自己偏爱的房间号。本小结先列出并描述一下标准Web服务器和email服务器所用到的最常用的端口,然后为架设你自己的防火墙给出一些建议。

端口

这些端口是你可能会碰到的、众所周知的官方端口。有些防火墙甚至都不显示这些端口号,只是给出使用这些端口的服务。

协议 端口 用于 描述
TCP 20 FTP(主动模式) 按照FTP连接发起人的请求,FTP会以主动或被动这两种模式运行。两种模式下,FTP命令都发向端口21。在主动模式下,FTP服务器从端口20发起一个用于发送数据的新连接。在被动模式下,FTP服务器会接收到一个额外的连接请求,被请求的端口是非特权端口(大于等于1024)。因此,要想FTP能正常允许,你或者要允许发自端口20的向外的连接,或者要允许向内的来自端口21到大于等于1024的端口的连接。
TCP 21

FTP

FTP是指文件传输协议。建议通过IP地址进行限制,只让可信任的人连接到你的FTP服务器;或者完全关闭FTP服务,仅允许安全的FTP,这种FTP是端口22上的SSH服务的一个组成部分。
TCP 22 SSH 安全外壳(Secure Shell)用于让人们登录到你的服务器上并在其上执行命令。在服务器管理方面这很有用,应该通过IP地址进行限制。
TCP 23 Telnet Telnet是非安全版本的SSH。通常应该完全拒绝这种服务。
TCP 25 SMTP SMTP指的是简单邮件传输协议。它处理两项任务。作为邮件提交代理(Mail Submission Agent),它负责为服务器上已建立的所有邮件账户接收邮件;作为邮件传输代理(Mail Transfer Agent),它还能够将邮件转发给别的服务器。现在的邮件提交 任务往往是由端口587来处理的。邮件传输任务往往配置为需要密码,并且邮件中继(将邮件转发给不在本服务器上邮件账户)要完全关闭。关闭是为了阻止垃圾邮件的传播。该端口需要双向允许。
UDP和TCP 53 DNS DNS是域名系统(Domain Name System)的缩写。它负责把类似www.smashingmagazine.com这样的域名翻译为IP地址。DNS数据在服务器间传输时使用TCP协议,而DNS查询用的是UDP协议。除非你的服务器是DNS服务器,否则只需要允许向外的UDP请求即可。只有这样你的服务器才能够查询域名。例如,如果你的网站要做PayPal即时通知,那么你的Web服务器可能就要向www.paypal.com发送POST请求,但这首先就需要将域名翻译为IP地址,因此Web服务器需要需要从UDP的端口53发起一个请求。作为替代方案,你也可以将翻译结果放入/etc/hostsfile,这样一来就不需要发起DNS请求了。
TCP 80 HTTP 这里是你的Web服务器。要让人们浏览你的网站,就要允许该端口。
TCP 110 POP3 POP指的是邮局协议(Post Office Protocol)。如果你的服务器上建立了email账户,该端口允许人们检查自己的新邮件。
TCP 143 IMAP IMAP是消息访问协议(Internet Message Access Protocol)。这是POP3的一种更加复杂的替代方案,它不仅能保存发给你的邮件,而且还能让你建立文件夹。由建立邮件账户的人决定到底是用POP3还是IMAP
TCP 443 HTTPS 这是安全Web服务器的缺省端口。安全服务器需要SSL证书
TCP 465 SMTPS 该端口原先是用于安全版的SMTP,现已交由端口25上通常的SMTP进行处理了。
TCP 587 SMTP 该端口用于向服务器提交email消息的官方端口
TCP 3306 MySQL 对来自互联网的、直接发向你的MySQL数据库的连接进行拒绝或限制,最多只允许可信任的IP地址进行连接。
TCP 8443 Plesk Plesk是一种服务器管理工具。它以微Web服务器的方式运行,通过浏览器即可进行访问。如果你有硬件防火墙或者有一个完全永久的静态IP地址,你就可以通过IP地址对这种访问进行限制。如果你使用的是Plesk自己的软件防火墙,一旦你的IP地址发生改变、或者你的办公室着火烧毁了、或者你需要从别的地方访问Plesk的服务,那么通过IP地址进行限制就有点冒险了。
TCP 10000 Webmin Webmin是另一个服务器管理工具。Plesk的警告同样适用于它。
TCP 1024-65535 向外的请求 本文提到的第一种情形就是某人使用Web浏览器。在这种情形下,客户端端口号比较大的一个端口会用来同服务器的端口80建立一个连接。如果你的Web服务器查询Web页面(就像PayPal的例子中所示),它也会用自己的端口号比较大的端口发起连接。在很多UNIX计算机上,可供使用的范围设定在/proc/sys/net/ipv4/ip_local_port_range中。这个范围常常是1024-4099或者32768-61000。
ICMP n/a Ping Ping用于检查网络上的某个计算机是否可达。它采用了一种不同的、无端口的协议,叫做网间控制报文协议(Internet Control Message Protocol)。有的防火墙也能让你对其进行控制。

完整的配置

对于具有Plesk管理界面的、基本的Web和email服务器,你可以将防火墙配置为:

  • 允许发自任何地址的、向TCP端口25(SMTP)、80(Web服务器)、110(POP email账户)、143(IMAPemail账户)、443(安全的Web服务器)、587(SMTP)发起的所有进入方向的连接请求
  • 限制发向TCP端口22(SSH)、8443(Plesk除非你使用Plesk配置防火墙)的所有进入方向的连接请求
  • 允许从服务器任意端口发起的、发向TCP端口25(SMTP)、80(Web)、443(安全的Web)、587(SMTP)和UDP端口53(DNS查询)的连接请求
  • 拒绝所有其它连接请求

如果你允许其它的服务,你就需要打开额外的端口。这些服务可能包括自动备份、安全扫描、或者是远程数据库访问。


利用Telnet检查

每台电脑都有一个Telnet 客户端,它允许你通过23号端口访问Telnet 服务器,运行指令。但 Telnet 客户端也可以链接其它端口,所以你可以利用它很放便的检查防火墙。

要使用它,你需要打开一个终端或命令提示符。 在 Mac 的 OS X 系统中,选择「应用程序」→「附件」并运行「终端」。 在 PC 的 Windows 系统中,选择 「开始 」→「所有程序」→「附件 」并选择「命令行提示符」。 如果你在使用 Ubuntu Linux,或是其它 Linux 发行版,你可以在「应用程序」→「附件」中找到。

当终端开启,试试下面的命令:

1 telnet www.smashingmagazine.com 21

首先,Telnet 将 www.smashingmagazine.com 翻译成一个IP地址,然后,它会尝试连接到其21端口。若连接被拒绝,则意味着对应的 FTP 服务器没有运行或在应用程序级上被屏蔽。下面是几个例子:

Using telnet to probe www.smashingmagazine.com.
使用telnet探测 www.smashingmagazine.com.

21端口(FTP)和25端口(SMTP)拒绝链接。23端口(Telnet)则没有任何返回,这意味着它被防火墙屏蔽了。80端口(网络服务)成功链接。 之后,我可以发送一条 HTTP 指令:

1 GET / HTTP/1.1
1 Host: www.smashingmagazine.com

再下面是个空行。本来应该给我 Smashing Magazine 的首页。但我按下 Ctrl + ] 关闭了链接,并退出了 Telnet。


个人防火墙

防火墙不仅是用于服务器端的。很多个人电脑都有软件防火墙,例如Vista系统上的Windows防火墙(Windows Firewall)、Mac OS X上的Mac防火墙(Mac Firewall)。在底层这种防火墙和服务器防火墙可能使用同样的运行方式,但是也隐藏了诸多细节。他们通常有开关,用于控制是否阻塞所有收到的流量,并且添加按照应用程序而不是端口来处理访问控制的例外规则。也有一些更为精细的第三方产品,运行通过端口和IP地址设置限定。

Configuration screen for Windows Firewall in Windows XP Service Pack 2.
Windows XP SP2上防火墙的配置截图Configuration screen for Mac OS X firewall which is a graphical interface for the underlying UNIX software firewall called ipfirewall.
Mac OS X防火墙配置截图(UNIX下IpFirewall的图像界面版)

 

防火墙的缺陷

防火墙在阻止不想要的数据源方面非常不错。如果你使用防火墙,建议至少要对 FTP  SSH 作出限制,使他们仅接受可信任的 IP 地址。从某种意义上来说,这种要么允许要么拒绝的限制方式是非常笼统的,因为他们并不关心数据的具体内容。

防火墙无法阻止的事情

因此,防火墙无法阻止垃圾邮件,病毒或攻击。

如果你打开了 SMTP  25 端口,Email就可以送到此端口。可能在一个小时内有 10,000  Email 讨论xxxthe finer points of Viagra,在防火墙看来这些 Email 都是合法的,但是某些 Email 中可能包含了可执行文件,一旦打开了这些文件你的计算机就会被控制,但是防火墙却无法察觉这种文件的存在。

样的,所有标准的 Web 务器都是将 80 端口或 443 端口打开的,防火墙无区分一个正在访问你的主页的请求是正常的还是恶意的。可能有某个软件正在扫瞄你的 Wordpress 安装信息以便寻找漏洞,然后放置一个包含了 mini-shell 的特洛伊木 PHP 文件,然后这个文件通知躲在某个地方的黑客以便将你的服务器用作拒绝服务攻击服务器。

最后,如果有聪明的黑客找到了某个方法可以通过你的 IMAP  143 端口发起一个特殊的请求进而获得服务器的控制权的话,防火墙连指头都不会动一下(the firewall won’t lift a finger

因此,即使你已经有了防火墙,你仍然需要关注那些垃圾邮件或包含在 Email 中的病毒,你仍然需要用最新的安全补丁来保持你的服务器软件和网站处于更新状态。

 

锁定自己

软件防火墙有一个额外的陷阱这是完全有可能把自己锁你自己的服务器上面的例子显示一个软件防火墙的Plesk,通常在端口8443上运行如果您错误地阻塞8443端口和保存配置,然后可以再次登录并撤消也可能发生,如果你限制的PleskIP地址然后改变你的IP地址

然后,您可以通过SSH登录并手动找出如何扭转编辑iptables的规则如果你还封锁SSH,你唯一办法是将调用的托管公司他们可能有物理键盘和屏幕连接到您的服务器登录,并删除该规则


结论

本文全面介绍了有关防火墙的基础知识,希望能帮你对防火墙的运行原理建立起一个清晰的概念。两座大型公寓楼这个类比并非完美,但却能帮助你对网络端口世界有个初步的认识。

总而言之,如果有防火墙可用,那就应该用上它。使用软件防火墙,你就能够通过指定IP地址来限制对SSH和FTP的访问并屏蔽掉所有对你并没有用到的其它任何服务的访问;使用硬件防火墙,你就能够非常可靠的限制住对Plesk或者你所选用的其它的服务器管理工具的访问。


posted @ 2013-02-05 14:02  镇水古月  阅读(284)  评论(0编辑  收藏  举报