📄 0250simple_firewall.htm
字号:
5.3 <a href="#nat_modules">iptables 的额外核心模组功能</a><br />
5.4 <a href="#nat_dnat">在防火墙后端之网路伺服器 DNAT 设定</a><br />
</span>
<span class=text_h2>
6. <a href="#review">重点回顾</a><br />
7. <a href="#ex">课后练习</a><br />
8. <a href="#reference">参考资料</a><br />
9. <a href="http://phorum.vbird.org/viewtopic.php?p=114475"
target="_blank">针对本文的建议∶http://phorum.vbird.org/viewtopic.php?p=114475</a><br />
</span>
</span>
</div>
<!-- 本文的正式部分 -->
<hr /><a NAME="before"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">本章的行前准备工作</span><br />
<div class=block1>
由于这个章节里面谈到非常多的封包概念,包括 <a href="0110network_basic.php#fig_mac">MAC</a>,
<a href="0110network_basic.php#ipandmac_ip">IP</a>,
<a href="0110network_basic.php#protocol_tcp">TCP</a>,
<a href="0110network_basic.php#protocol_udp">UDP</a>,
<a href="0110network_basic.php#protocol_icmp">ICMP</a> 等协定,
以及如何抵挡外部 IP 来源的防火墙基础,还有 IP/netmask 的整体网域写法等等。
而鸟哥对于您学习防火墙的建议是希望你可以使用 shell script
来撰写脚本,如此一来可以让你的防火墙规则比较清晰一点。所以在您开始了解底下的资料之前,
希望你可以先阅读过相关的资料了∶<br />
<ul>
<li>已经认识 <a href="../linux_basic/0320bash.php">Shell</a> 以及
<a href="../linux_basic/0340bashshell-scripts.php">Shell script</a>;
<li>已经阅读过<a href="0110network_basic.php">网路基础</a>那一个章节的内容;
<li>已经阅读过前一篇<a href="0240network-secure-1.php">认识网路安全</a>;
<li>已经阅读过 <a href="0230router.php">路由器</a>那一章节的内容,了解路由的概念;
<li>最好拥有两部主机以上的小型区域网路环境,以方便测试防火墙;
<li>Linux 主机上最好有两张网卡,可以进行多种测试,并架设 NAT 主机;
<li>使用 uname -r 确认你的核心是 2.4 或 2.6 版;
</ul>
若准备妥当了,赶紧来开始进行吧!<br /><br />
</div>
<hr /><a NAME="firewall"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">认识防火墙</span><br />
<div class=block1>
网路安全除了随时注意套件的漏洞,以及网路上的安全通报之外,你最好能够依据自己的环境来订定防火墙机制,
这样对于你的网路环境,会比较有保障一点喔!那么什么是防火墙呢?
其实<span class=text_import2>防火墙就是在管制进入到我们网域内的主机(或者可以说是网域)的资料封包的一种机制</span>,
例如我们在前一章节<a href="0240network-secure-1.php">认识网路安全</a>当中提到的
iptables 就是一种防火墙机制了。当然了,更广义的来说,
<span class=text_import2>只要能够分析与过滤进出我们管理之网域的封包资料,就可以称为防火墙</span>。<br /><br />
而这个防火墙又可以分为硬体防火墙与本机的软体防火墙。硬体防火墙是由厂商设计好的主机硬体,
这部硬体防火墙内的作业系统主要以提供封包资料的过滤机制为主,并将其他的功能拿掉。因为单纯作为防火墙功能而已,
因此封包过滤的速度与效率较佳。至于软体防火墙呢?那就是我们这个章节要来谈论的啊!
软体防火墙本身就是在保护系统网路安全的一套软体(或称为机制),例如
iptables 与 TCP Wrappers 都可以称为软体防火墙。<br /><br />
无论怎么分,反正防火墙就是用来保护我们网路安全的咚咚就对啦!呵呵!我们这个章节主要在介绍
Linux 系统本身提供的软体防火墙的功能,那就是 iptables 。至于 TCP Wrappers
请前往基础篇的 <a href="../linux_basic/0560daemons.php#tcp_wrappers">认识系统服务</a> 参考参考喔!<br /><br />
<hr /><a NAME="firewall_why"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">为何需要防火墙</span><br />
<div class=block2>
基本上,如果你的系统 <span class=text_import2>(1)已经关闭不需要而且危险的服务;
(2)已经将整个系统的所有套件都保持在最新的状态; (3)权限设定妥当且定时进行备份工作;
(4)已经教育使用者具有良好的网路、系统操作习惯</span>。
那么你的系统实际上已经颇为安全了!要不要架设防火墙?那就见仁见智棉!<br /><br />
不过,毕竟网路的世界是很复杂的,而 Linux 主机也不是一个简单的东西,
说不定哪一天你在进行某个软体的测试时,主机突然间就启动了一个网路服务,
如果你没有管制该服务的使用范围,那么该服务就等于对所有 Internet 开放,
那就麻烦了!因为该服务可能可以允许任何人登入你的系统,那不是挺危险?<br /><br />
所以棉,防火墙能作什么呢?<span class=text_import2>防火墙最大的功能就是帮助你『限制某些服务的存取来源』</span>!
举例来说∶ (1)你可以限制档案传输服务 (FTP) 只在子网域内的主机才能够使用,而不对整个 Internet 开放;
(2)你可以限制整部 Linux 主机仅可以接受客户端的 WWW 要求,其他的服务都关闭;
(3)你还可以限制整部主机仅能主动对外连线,对我们主机主动连线的封包状态 (TCP 封包的 SYN flag) 就予以抵挡等等。
这些就是最主要的防火墙功能了!<br /><br />
所以鸟哥认为,防火墙最重要的任务就是在规划出∶<br />
<ul><span class=text_import2>
<li>切割被信任(如子网域)与不被信任(如 Internet)的网段;
<li>划分出可提供 Internet 的服务与必须受保护的服务;
<li>分析出可接受与不可接受的封包状态;
</span></ul>
当然啦,咱们 Linux 的 iptables 防火墙软体还可以进行更细部深入的 NAT (Network Address Translation)
的设定,并进行更弹性的 IP 封包伪装功能,不过,对于单一主机的防火墙来说,
最简单的任务还是上面那三项就是了!所以,你需不需要防火墙呢?理论上,当然需要!
而且你必须要知道『你的系统哪些资料与服务需要保护』,针对需要受保护的服务来设定防火墙的规则吧!
底下我们先来谈一谈,那在 Linux 上头常见的防火墙类型有哪些?<br /><br />
</div>
<hr /><a NAME="firewall_type"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">Linux 系统上防火墙的主要类别</span><br />
<div class=block2>
除了以软体及硬体作为防火墙的分类之外,我们也可以使用
<span class=text_import2>防火墙对于资料封包的取得方式来进行分类</span>。主要可以分为两大类,
分别是<span class=text_import2>代理伺服器 (Proxy) 以及 IP Filter</span>。在代理伺服器方面,
由名称我们就可以知道,代理伺服器仅是代理 Client 端去向 Internet 要求资料,所以
Proxy 其实已经将可代理的协定限制的很少很少,并且由于内部与外部电脑的并不能直接互通,
所以可以达到良好的保护效果;另一种则是上面提到的 IP fileter 啦!利用封包过滤的方式来达到防火墙的目的!<br /><br />
<hr /><li><span class=text_import1>IP filter (封包过滤机制)</span><br />
<div class=block2>
直接使用进入本机的 TCP/IP 上面的封包协定来进行过滤分析,例如利用 TCP/IP 封包表头的 IP 来源、 Port number
等资料进行过滤,以判断该封包是否能够进入本机取得本机资源。由于这种方式可以直接分析最底层的封包表头资料,
所以包括硬体位址(MAC), 软体位址 (IP), TCP, UDP, ICMP 等封包的资讯都可以进行过滤分析的功能,
因此用途非常的广泛。<br /><br />
在 Linux 上面我们使用核心内建的 iptables 软体来作为防火墙封包过滤的机制,
由于 iptables 是核心内建的功能,因此他的效率非常的高!非常适合于一般小型环境的设定呢!
他利用一些封包过滤的规则设定,来定义出什么资料可以接收,什么资料需要剔除,以达到保护主机的目的喔!
<br /><br />
</div>
<hr /><li><span class=text_import1>Proxy (代理伺服器)</span><br />
<div class=block2>
其实代理伺服器是一种网路服务 (service, daemon),他可以『代理』使用者的需求,
而代为前往伺服器取得相关的资料。就有点像底下这个图示吧∶<br /><br />
<center>
<img src="0250simple_firewall/proxy_server.png"
title="Proxy Server 的运作原理简介" alt="Proxy Server 的运作原理简介"><br />
图一、Proxy Server 的运作原理简介</center><br />
以上图为例,当 Client 端想要前往 Internet 取得 WWW 的资料时,他取得资料的流程是这样的∶<br />
<ol>
<li>他会向 proxy server 要求资料,请 proxy 帮忙处理;
<li>Proxy 可以分析使用者的 IP 来源是否合法?使用者想要去的 WWW 伺服器是否合法?
如果这个 client 的要求都合法的话,那么 Proxy 就会主动的帮忙 client 前往 WWW 伺服器取得资料;
<li>Internet 所回传的资料是传给 Proxy server 的喔,所以 WWW 伺服器上面看到的是 Proxy Server 的 IP 棉;
<li>最后 Proxy 将 client 的要求传回给 client。
</ol>
这样了解了吗?没错, client 并没有直接连上 Internet ,所以在实线部分(步骤 1, 4)只要 Proxy 与 Client
可以连线就可以了!此时 client 甚至不需要拥有 public IP 哩!而当有人想要攻击 client 端的主机时,
除非他能够攻破 Proxy server ,否则是无法与 client 连线的啦!<br /><br />
另外,一般 proxy 主机通常仅开放 port 80, 21, 20 等 WWW 与 FTP 的埠口而已,
而且通常 Proxy 就架设在 Router 上面,因此可以完整的掌控区域网路内的对外连线!
让你的 LAN 变的更安全啊!更详细的 Proxy 设定我们会在后续的
<a href="0420squid.php">代理伺服器</a> 章节当中提及的!<br /><br />
</div>
在这个章节中,我们先不谈 Proxy 这个东西,而是介绍过滤机制的 iptables 棉!<br /><br />
</div>
<hr /><a NAME="firewall_topo"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span
class="text_h2">防火墙的一般线路布线与抵挡技巧</span><br />
<div class=block2>
由前面的说明当中,您应该可以了解到一件事,那就是防火墙除了可以『
<span class=text_import2>保护防火墙机制 (iptables) 本身所在的那部主机</span>』之外,还可以『
<span class=text_import2>保护防火墙后面的主机或 PC</span>』。呵呵!
也就是说,防火墙除了可以防备主机被入侵之外,
<span class=text_import2>他还可以架设在路由器上面藉以控管进出本地端网域 (LAN) 的网路封包</span>。
这种规划对于内部私有网域的安全也有一定程度的保护作用呢!底下我们稍微谈一谈目前常见的防火墙配置吧∶<br /><br />
<hr /><li><span class=text_import1>单一 Linux 主机兼任防火墙功能∶</span><br />
<div class=block2>
防火墙除了可以作为 Linux 本机的基本防护之外,他还可以架设在路由器上面以管控整个区域网路的封包进出。
因此,在这类的防火墙上头通常至少需要有两个介面,将可信任的内部与不可信任的 Internet 分开,
所以可以分别设定两块网路介面的防火墙规则啦!整个环境如同下列图二所示。<br /><br />
在图二中,由于防火墙是设定在所有网路封包都会经过的路由器上头,
因此这个防火墙可以很轻易的就掌控到区域网路内的所有封包,
而且你只要管理这部防火墙主机,就可以很轻易的将来自 Internet 的不良网路封包抵挡掉呐。
只要管理一部主机就能够造福整的 LAN 里面的 PC,很划算的啦。<br /><br />
如果你想要将区域网路控管的更严格的话,那你甚至可以在这部 Linux 防火墙上面架设更严格的代理伺服器,
让用户端仅能连上你所开放的 WWW 伺服器而已,而且还可以透过代理伺服器的登录档分析功能,
明确的查出来那个使用者在某个时间点曾经连上哪些 WWW 伺服器,您瞧瞧!厉害吧!
如果在这个防火墙上面再加装类似 <a href="../linux_security/old/04mrtg.php">MRTG</a>
的流量监控软体,还能针对整个网域的流量进行监测。
这样配置的优点是∶<br />
<ul><span class=text_import2>
<li>因为内外网域已经分开,所以安全维护在内部可以开放的权限较大!
<li>安全机制的设定可以针对 Linux 主机来维护即可!
<li>对外只看的到 Linux 主机,所以对于内部可以达到有效的安全防护!
</span></ul>
<a name="fig_02"></a><center>
<img src="0250simple_firewall/firewall_01.png"
title="单一 Linux 防火墙主机" alt="单一 Linux 防火墙主机"><br />
图二、单一 Linux 防火墙主机</center><br />
</div>
<hr /><li><span class=text_import1>单一 Linux 防火墙,但 LAN 内另设防火墙</span><br />
<div class=block2>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -