防火墙
引用:http://www.oschina.net/translate/introduction-to-firewalls
在建筑行业,“防火墙”是指一种专门设计用来阻止火在建筑的不同部分蔓延的墙,后来这个术语传播到了类似汽车制造业等其他行业,并在20世纪80年代末进入计算机领域。在防火墙的一侧是热闹且混乱的互联网,在另一侧是你强大但易受攻击的Web服务器。 实际上防火墙更像是一扇有时不得不让某些东西正常通过的防火门,它们监视着所有进出互联网的电子交通,并根据一系列严格的规则来判断那些是可以通过,那些是不可以通过的。 这篇文章详细地解释了它们的工作原理,有效防火墙的不同类型,以及它们所擅长和不太擅长的工作,并且详细说明了如何通过配置防火墙来保护一般的Web服务器。 |
大楼内每一户居民都有各自不同的工作。例如,住在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服务器间进行对话的典型情况大致如下:
号码低于1024的房间要比号码更大的房间稳定。这些房间有CCTV(译者注:这个CCTV所指应是闭路电视或远程监控摄像头而非那个著名的CCTV),专为提供类似网站或FTP服务等特定任务而预留。而高层的房间特别不稳定,人们总在搬家,一会搬进来一会搬出去;这些房间负责处理类似于请求Web页面和发起FTP连接等等这样的任务。 |
危险 但是,并非所有人都是规规矩矩的。下面就是住在咖啡馆上面的爱耍花招的骗子同住在一个易受攻击的服务器上的、爱轻信比尔的SSH居民间对话的例子。SSH是一种连接到远程计算机并在其上执行命令的方法。SSH居民一直住在TCP街区,房间号通常是22号。
上面所说的SSH对话第一部分:以root身份登录,口令输错两次,查看了一个文件。 |
保护级别上面描述的服务器是易受攻击的,任何人可以通过TCP协议使用22端口向80.72.139.101服务器发送信件,如果他们能够正确猜到密码,那么他们就拥有了服务器和所有服务器文件的完全访问权限。这一节我们讨论四种基本的保护级别,你可以用来让你的服务器避免上面的情况发生,并且可以只允许你所信任的人与你的服务器进行通信。 尽管SSH只是运行在服务器上的众多服务中的一个,但通过它来起步是非常合适的,因为它能提供对服务器的大部分控制。如果一个黑客入侵了你的FTP或者SMTP服务器,他们会进行一些破坏,但是通过SSH的话,遭到的破坏会更大。 |
好的密码SSH确实有它自己的内置保护机制,因为它需要用户名和密码。保卫一个服务器最基本的也是首要的是选择一个复杂的并且很难被猜中的密码。 无论住在22号公寓的居民什么时候收到一封邮件,他首先会询问正确的密码。尽管他是一个值得信任的人,但如果你回答错误,那么他不会给你提供任何帮助。你可以随便尝试多少次,不过每隔三次或许你要重新发送你最初的请求信件,但是他一般不会介意。 |
拒绝连接上面谈到的SSH会话在一定程度上是不正确的,如果你真的通过SSH请求80.72.139.101(Smashing Magazine的Web服务器),你会得到如下答复: 这意味着住在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号房间突然自行决定开始向外发起发邮件的活动,那么这些邮件将是无法通过检查的。 下一小结将介绍过滤检查中所需的规则列表的形式是怎样的。 |
防火墙规则 无论是软件防火墙还是硬件防火墙,都会有类似的可视化管理工具。市面上的防火墙林林总总,每个防火墙都有自己做事情的方式,但一般他们都会有一些共通的概念,而他们之间的区别主要体现在复杂程度方面。有的防火墙能让你对其进行完全彻底的控制,但要达到这个效果就需要你有大量的知识并花费相当的时间和精力;还有一些防火墙使用起来很简单,但在灵活度方面就要逊色不少。 本小结将介绍相关术语,并给出防火墙配置界面的两个例子。 |
防火墙用语 下面给出的就是看门人桌子上那张纸上内容大致的样子:
在看门人收到每封新邮件时,他都将发送者和接收者的地址同上面的每条规则按照上面所列顺序进行比较。若同某规则相匹配,则按照规则中的指令行事,要么投递要么丢弃手里的信邮件。 |
总的效果是,世界上所有人都可以同80号房间的Web服务器进行通信,但只有住在99.99.99.99的人是可信任的,只有他可以同22号房间的SSH服务器进行通信。所有企图进行其它通信的邮件都会被丢弃。将上述规则转化一下,就可以为一个叫做IPTables的、真实的软件防火墙所用:
然而,所有防火墙都会隐藏新的或者已建好的连接这些琐碎的细节,它们都假定所有对已建立的连接的回复是允许通过检查的,所以仅仅处理所有的新连接。基于此,上表可以简洁很多:
如果要把这些规则应用于硬件防火墙,那么就还需要服务器的IP地址。这是因为硬件防火墙往往是为多个服务器工作的。在这种情况下,上面的表格就需要源和目的两项内容,并且不需要方向了。就象这样:
想要允许发出的请求,将源和目的中的内容相互交换,将服务器的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。这个看上去有点乱因为要算清楚这些还需要进行二进制计算,但对子网的详尽解释已有很多了。 |
所有栏目 在这里对本小结中讨论过的不同栏目进行一下总结:
有时界面里会有源和目的两项内容而不是方向,远程和服务器。这种情形下,它们与接收邮件的情况完全相同,但是是为发出的邮件预留的。换言之,在接收时远程等于是源而在发送时远程等于是目的。 下一节将对端口进行展开讨论。看门人的那张纸太有限了。一个真正的Web服务器看上去更象是上面所举的硬件防火墙的例子。 |
为Web服务器配置防火墙 Web服务器通常住在80号房间。许多其它常见的计算机服务都有自己偏爱的房间号。本小结先列出并描述一下标准Web服务器和email服务器所用到的最常用的端口,然后为架设你自己的防火墙给出一些建议。 端口 这些端口是你可能会碰到的、众所周知的官方端口。有些防火墙甚至都不显示这些端口号,只是给出使用这些端口的服务。
|
完整的配置 对于具有Plesk管理界面的、基本的Web和email服务器,你可以将防火墙配置为:
如果你允许其它的服务,你就需要打开额外的端口。这些服务可能包括自动备份、安全扫描、或者是远程数据库访问。 |
个人防火墙防火墙不仅是用于服务器端的。很多个人电脑都有软件防火墙,例如Vista系统上的Windows防火墙(Windows Firewall)、Mac OS X上的Mac防火墙(Mac Firewall)。在底层这种防火墙和服务器防火墙可能使用同样的运行方式,但是也隐藏了诸多细节。他们通常有开关,用于控制是否阻塞所有收到的流量,并且添加按照应用程序而不是端口来处理访问控制的例外规则。也有一些更为精细的第三方产品,运行通过端口和IP地址设置限定。
|
防火墙的缺陷防火墙在阻止不想要的数据源方面非常不错。如果你使用防火墙,建议至少要对 FTP 和 SSH 作出限制,使他们仅接受可信任的 IP 地址。从某种意义上来说,这种“要么允许要么拒绝”的限制方式是非常笼统的,因为他们并不关心数据的具体内容。 防火墙无法阻止的事情 因此,防火墙无法阻止垃圾邮件,病毒或攻击。 如果你打开了 SMTP 的 25 端口,Email就可以送到此端口。可能在一个小时内有 10,000 封 Email 在讨论xxx(the 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端口和保存配置,然后你就可以再次登录,并撤消它。这也可能发生,如果你限制的Plesk的IP地址,然后改变你的IP地址。 然后,您可以通过SSH登录并手动找出如何扭转编辑iptables的规则。如果你还封锁了SSH,你唯一的办法是将调用的托管公司。他们可能有物理键盘和屏幕连接到您的服务器登录,并删除该规则。 |
结论本文全面介绍了有关防火墙的基础知识,希望能帮你对防火墙的运行原理建立起一个清晰的概念。两座大型公寓楼这个类比并非完美,但却能帮助你对网络端口世界有个初步的认识。 总而言之,如果有防火墙可用,那就应该用上它。使用软件防火墙,你就能够通过指定IP地址来限制对SSH和FTP的访问并屏蔽掉所有对你并没有用到的其它任何服务的访问;使用硬件防火墙,你就能够非常可靠的限制住对Plesk或者你所选用的其它的服务器管理工具的访问。 |
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们