📄 0250simple_firewall.htm
字号:
一般来说,我们的防火墙对于 LAN 的防备都不会设定的很严格,因为是我们自己的 LAN
嘛!所以是信任网域之一棉!不过,最常听到的入侵方法也是使用这样的一个信任漏洞!
因为您不能保证所有使用企业内部电脑的使用者都是公司的员工,也无法保证您的员工不会『搞破坏!』
<span class=text_import2>更多时候是由于某些外来访客利用移动式装置 (笔记型电脑)
连接到公司内部的无线网路来加以窃取企业内部的重要资讯。</span><br /><br />
呵呵!所以,如果您有特别重要的部门需要更安全的保护网路环境,那么将 LAN 里
面再加设一个防火墙,将安全等级分类,那么将会让您的重要资料获得更佳的保护喔!
整个架构有点像下图三所示。<br /><br />
<center>
<img src="0250simple_firewall/firewall_02.png"
title="单一 Linux 防火墙主机,但 LAN 内另设防火墙"
alt="单一 Linux 防火墙主机,但 LAN 内另设防火墙"><br />
图三、单一 Linux 防火墙主机,但 LAN 内另设防火墙</center><br />
</div>
<hr /><li><span class=text_import1>在防火墙后端的主机设定</span><br />
<div class=block2>
还有一种更有趣的设定,那就是将提供网路服务的伺服器放在防火墙后面,这有什么好处呢?
如下图四所示,Web, Mail 与 FTP 都是透过防火墙连到 Internet 上面去,所以,
底下这四部主机在 Internet 上面的 Public IP 都是一样的!
(这个观念我们会在本章底下的 NAT 主机的时候再次的强调)。
只是透过防火墙的封包分析后,将 WWW 的要求封包转送到 Web 主机,将 Mail 送给 Mail Server
去处理而已(透过 port 的不同来转递)。<br /><br />
好了,因为四部主机在 Internet 上面看到的 IP 都相同,但是事实上却是四部不同的主机,
而当有攻击者想要入侵您的 FTP 主机好了,他使用各种分析方法去进攻的主机,其实是『防火墙』那一部,
攻击者想要攻击您内部的主机,除非他能够成功的搞定您的防火墙,否则就很难入侵您的内部主机呢!<br /><br />
而且,由于主机放置在两部防火墙中间,内部网路如果发生状况时 (例如某些使用者不良操作导致中毒啊、
被社交工程攻陷导致内部主机被绑架啊等等的) ,是不会影响到网路主机的正常运作的。
这种方式适用在比较大型的企业当中,因为对这些企业来说,网路主机能否提供正常稳定的服务是很重要的!<br /><br />
不过,这种架构下所进行的设定就得包含 port 的转递,而且要有很强的逻辑概念,
可以厘清封包双向沟通时的流动方式。对于新手来说,设定上有一定的难度,
鸟哥个人不太建议新手这么做,还是等以后有经验之后再来玩这种架构吧!<br /><br />
<a name="fig_04"></a><center>
<img src="0250simple_firewall/firewall_03.png"
title="架设在防火墙后端的主机伺服器" alt="架设在防火墙后端的主机伺服器"><br />
图四、架设在防火墙后端的主机伺服器</center><br />
通常像上图四的环境中,将网路伺服器独立放置在两个防火墙中间的网路,
我们称之为非军事区域 (DMZ)。 DMZ 的目的就如同前面提到的,重点在保护伺服器本身,
所以将 Internet 与 LAN 都隔离开来,如此一来不论是伺服器本身,或者是 LAN 被攻陷时,
另一个区块还是完好无缺的!<br /><br />
</div>
好了,那么我们 Linux 防火墙软体 iptables 是可以进行封包过滤的,他可以分析网路封包的 socket pair ,
还可以分析不同网路协定的状态,例如 TCP 封包的旗标 (flags) ,甚至可以分析网路卡的卡号呢!
经由分析这些资料后,咱们的 iptables 至少可以有底下这几种抵挡封包的方式∶<br />
<ul>
<li><span class=text_import2>拒绝让 Internet 的封包进入 Linux 主机的某些 port</span><br />
这个应该不难了解吧!例如您的 port 20-21 这个 FTP 相关的 port ,
您只要开放给内部网路的话,所以不对 Internet 开放,那么当 Internet 来的封包想要进入您的
port 20-21 的话,就可以将该资料封包丢掉!因为我们可以分析的到该封包所带有的 port 号码呀!<br /><br />
<li><span class=text_import2>拒绝让某些来源 IP 的封包进入</span><br />
例如您已经发现某个 IP 主要都是来自攻击行为的主机,那么只要来自该 IP
的资料封包,就将他丢弃!这样也可以达到基础的安全呦!<br /><br />
<li><span class=text_import2>拒绝让带有某些特殊旗标( flag )的封包进入</span><br />
最常拒绝的就是带有 SYN 的主动连线的旗标了!只要一经发现,嘿嘿!您就可以将该封包丢弃呀!<br /><br />
<li><span class=text_import2>分析硬体位址(MAC)来提供服务</span><br />
如果您的区域网路里面有比较捣蛋的但是又具有比较高强的网路功力的高手时,如果您使用 IP
来抵挡他使用网路的权限,而他却懂得反正换一个 IP 就好了,都在同一个网域内嘛!
同样还是在搞破坏~怎么办?没关系,我们可以锁死他的网路卡硬体位址啊!因为 MAC
是焊在网路卡上面的,所以您只要分析到该使用者所使用的 MAC 之后,可以利用防火墙将该
MAC 锁住,呵呵!除非他能够一换再换他的网路卡来取得新的 MAC,否则换 IP 是没有用的啦!
</ul>
当然还有更多的使用技巧,你可以参考本章最后列出的参考资料,
里头有更多可用的小技巧喔。我们这里仅会真对简单的本机防火墙,以及作为类似 IP 分享器的
NAT 主机作简单的介绍而已啦! ^_^!好了,开始来玩一玩那个 iptables 吧!<br /><br />
</div>
<hr /><a NAME="firewall_limit"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">防火墙的使用限制</span><br />
<div class=block2>
什么?!设定防火墙之后还不安全啊?!那当然啦!谁说设定了防火墙之后您的系统就一定安全?
防火墙虽然可以防止不受欢迎的封包进入我们的网路当中,不过,某些情况下,
他并不能保证我们的网路一定就很安全。举几个例子来谈一谈∶<br />
<ul>
<li><span class=text_import1>防火墙并不能很有效的抵挡病毒或木马程式</span><br />
假设您已经开放了 WWW 的服务,那么您的 WWW 主机上面,防火墙一定得要将 WWW 服务的 port 开放给 Client
端登入才行吧!否则您的 WWW 主机设定了等于没有用对吧!也就是说,只要进入您的主机的封包是要求
WWW 资料的,就可以通过您的防火墙。那好了,『万一您的 WWW 伺服器软体有漏洞,或者本身向您要求
WWW 服务的该封包就是病毒在侦测您的系统』时,您的防火墙可是一点办法也没有啊!
因为本来设定的规则就是会让他通过啊。<br /><br />
<li><span class=text_import1>防火墙对于来自内部 LAN 的攻击较无承受力</span><br />
一般来说,我们对于 LAN 里面的主机都没有什么防火墙的设定,因为是我们自己的 LAN
啊,所以当然就设定为信任网域了!不过, LAN 里面总是可能有些网路小白啊,虽然他们不是故意要搞破坏,
但是他们就是不懂嘛!所以就乱用网路了。这个时候就很糟糕,因为防火墙对于内部的规则设定通常比较少,
所以就容易造成内部员工对于网路误用或滥用的情况。
</ul>
所以啦,在您的 Linux 主机实地上网之前,还是得先∶<br />
<ul><span class=text_import2>
<li>关闭几个不安全的服务;
<li>升级几个可能有问题的套件;
<li>架设好最起码的安全防护--防火墙--
</span></ul>
其他相关的讯息请到 <a href="0240network-secure-1.php">认识网路安全</a> 里面去看一看怎么增加自身的安全吧!
<br />
</div>
</div>
<hr /><a NAME="netfilter"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">Linux 的封包过滤机制∶iptables</span><br />
<div class=block1>
上面谈了这么多,主要还是希望您能了解到防火墙是什么这个议题!而且也希望您知道防火墙并非万能的。
好了,那么底下我们终于可以来瞧一瞧,那目前我们的 2.6 版这个 Linux 核心到底使用什么核心功能来进行防火墙设定?
<br /><br />
<hr /><a NAME="netfilter_version"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">不同 Linux
核心版本的防火墙软体</span><br />
<div class=block2>
Linux 的防火墙为什么功能这么好?这是因为他本身就是由 Linux kernel 所提供,
由于直接经过核心来处理,因此效能非常好!不过,不同核心版本所使用的防火墙软体是不一样的!
因为核心支援的防火墙是逐渐演进来的嘛!<br />
<ul><span class=text_import2>
<li>Version 2.0∶使用 ipfwadm 这个防火墙机制;
<li>Version 2.2∶使用的是 ipchains 这个防火墙机制;
<li>Version 2.4 与 2.6 ∶主要是使用 iptables 这个防火墙机制,不过在某些早期的 Version 2.4
版本的 distributions 当中,亦同时支援 ipchains (编译成为模组),好让使用者仍然可以使用来自
2.2 版的 ipchains 的防火墙规划。不过,不建议在 2.4 以上的核心版本使用 ipchains 喔!
</span></ul>
因为不同的核心使用的防火墙机制不同,且支援的软体指令与语法也不相同,
所以在 Linux 上头设定属于你自己的防火墙规则时,要注意啊,先用
<a href="../linux_basic/0440processcontrol.php#uname">uname -r</a> 追踪一下你的核心版本再说!
如果你是安装 2004 年以后推出的 distributions ,那就不需要担心了,因为这些 distributions
几乎都使用 kernel 2.6 版的核心啊! ^_^<br /><br />
</div>
<hr /><a NAME="netfilter_iptables"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">iptables
的表格与封包进入流程</span><br />
<div class=block2>
前面的几个小节里面我们一直谈到∶『防火墙规则』,咦!啥是规则啊?因为 iptables 是利用封包过滤的机制,
所以他会分析封包的表头资料。根据表头资料与定义的『规则』来决定该封包是否可以进入主机或者是被丢弃。
意思就是说∶『<span class=text_import2>根据封包的分析资料 "比对" 你预先定义的规则内容,
若封包资料与规则内容相同则进行动作,否则就继续下一条规则的比对!</span>』
重点在那个『比对与分析顺序』上。<br /><br />
举个简单的例子,假设我预先定义 10 条防火墙规则好了,那么当 Internet 来了一个封包想要进入我的主机,
那么防火墙是如何分析这个封包的呢?我们以底下的图示来说明好了∶<br /><br />
<center>
<img src="0250simple_firewall/iptables_01.png"
title="封包过滤的规则动作及分析流程" alt="封包过滤的规则动作及分析流程"><br />
图五、封包过滤的规则动作及分析流程</center><br />
当一个网路封包要进入到主机之前,会先经由 NetFilter 进行检查,那就是 iptables 的规则了。
检查通过则接受 (ACCEPT) 进入本机取得资源,如果检查不通过,则可能予以丢弃 (DROP) !
上图五主要的目的在告知您∶『规则是有顺序的』!例如当网路封包进入 Rule 1 的比对时,
如果<span class=text_import2>比对结果符合 Rule 1 ,此时这个网路封包就会进行 Action 1
的动作,而不会理会后续的 Rule 2, Rule 3.... 等规则的分析了</span>。<br /><br />
而如果这个封包并不符合 Rule 1 的比对,那就会进入 Rule 2 的比对了!如此一个一个规则去进行比对就是了。
那如果所有的规则都不符合怎办?此时就会透过预设动作 (封包政策, Policy) 来决定这个封包的去向。
所以啦,<span class=text_import2>当您的规则顺序排列错误时,就会产生很严重的错误了</span>。
怎么说呢?让我们看看底下这个例子∶<br /><br />
假设您的 Linux 主机提供了 WWW 的服务,那么自然就要针对 port 80 来启用通过的封包规则,但是您发现
IP 来源为 192.168.100.100 老是恶意的尝试入侵您的系统,所以您想要将该 IP 拒绝往来,最后,所有的非
WWW 的封包都给他丢弃,就这三个规则来说,您要如何设定防火墙检验顺序呢?<br />
<ol><span class=text_import2>
<li>Rule 1 先抵挡 192.168.100.100 ;
<li>Rule 2 再让要求 WWW 服务的封包通过;
<li>Rule 3 将所有的封包丢弃。
</span></ol>
这样的排列顺序就能符合您的需求,不过,万一您的顺序排错了,变成∶<br />
<ol>
<li>Rule 1 先让要求 WWW 服务的封包通过;
<li>Rule 2 再抵挡 192.168.100.100 ;
<li>Rule 3 将所有的封包丢弃。
</ol>
此时,那个 192.168.100.100 『可以使用您的 WWW 服务』喔!因为只要他对您的主机送出
WWW 要求封包,就可以使用您的 WWW 主机功能了,因为您的规则顺序定义第一条就会让他通过,
而不去考虑第二条规则!这样可以理解规则顺序的意义了吗!现在再来想一想,如果 Rule 1
变成了『将所有的封包丢弃』,Rule 2 才设定『WWW 服务封包通过』,请问,我的 client
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -