⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0240network-secure-1.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 3 页
字号:
5. <a href="#review">重点回顾</a><br />
6. <a href="#ex">课后练习</a><br />
7. <a href="#reference">参考资料</a><br />
<span class=text_h2>
8. <a href="http://phorum.vbird.org/viewtopic.php?p=114062"
        target="_blank">针对本文的建议∶http://phorum.vbird.org/viewtopic.php?p=114062</a><br />
</span>
</span>
</div>


<!-- 本文的正式部分 -->
<hr /><a NAME="packet_flow"></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>!
	而你也才会了解要如何保护你的主机安全呐!闲话少说,咱们赶紧来瞧一瞧先。<br /><br />

	<hr /><a NAME="packet_flow_2"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">封包进入主机的流程</span><br />
	<div class=block2>
		在<a href="0110network_basic.php">网路基础</a>章节当中我们谈到过目前的网路架构主要是 TCP/IP 为主,
		而绝大部分的网路连线是双向的,其中又以 <a href="0110network_basic.php#protocol_tcp">TCP 封包</a>为代表。
		另外,根据 Server/Client 的连线方向与 TCP/IP 的概念,我们会知道建立一条可靠的网路连线需要一组
		<a href="0110network_basic.php#protocol_tcp_socket">Socket Pair</a> 的辅助,
		亦即成对的来源与目标之 IP 与 port 棉,以使连线的两端可以顺利的连接到相对的应用软体上。<br /><br />

		上面谈到的这些都是属于网路的基础概念,在这里我们要谈的是,那么要让这个 TCP 封包顺利的进入到 Linux 主机上,
		然后使用 port 所对应的软体来存取系统的档案系统资源时,还得要经过哪些关卡呢?
		举例来说,如果你的 Linux 主机有开启 WWW 的 port 80 网路服务,而 port 80 是由一个名称为 httpd 
		的程式所启动的,这个程式的设定档为 httpd.conf ,那么 Client 的连线要进入到你 Linux 主机的 WWW 时,
		会经过什么阶段呢?基本上,会经过如下图的几个阶段∶<br /><br >

		<a name="fig_1"></a><center>
		<img src="0240network-secure-1/security-2.png"
		title="网路封包进入本机的流程顺序" alt="网路封包进入本机的流程顺序"><br />
		图一、网路封包进入本机的流程顺序</center><br />

		<ol>
		<li><span class=text_import1>封包过滤防火墙∶IP Filtering 或 Net Filter</span><br />
		要进入 Linux 本机的封包都会先通过 Linux 核心的预设防火墙,就是称为 IP Filter 或 Net Filter 的咚咚,
		简单的说,就是 <span class=text_import2>iptables</span> 这个软体所提供的防火墙功能。iptables 这个
		Linux 预设的防火墙软体可以针对网路封包的 IP, port, MAC, 以及连线状态如 SYN, ACK 等资料进行分析,
		以过滤不受欢迎的网路封包呢!举例来说,如果有个 IP 为 aaa.bbb.ccc.ddd 是个恶意网站来源,
		那你就可以透过 iptables 抵挡来自该 IP 的网路封包的连线,以达到基本的主机防火墙功能。
		这部份我们会在下一章深入了解。<br /><br />

		<li><span class=text_import1>第二层防火墙∶TCP Wrappers</span><br />
		通过 IP Filter 之后,网路封包会开始接受 <a href="../linux_basic/0560daemons.php">Super daemons</a> 及 
		<a href="../linux_basic/0560daemons.php#tcp_wrappers">TCP_Wrappers</a> 的检验,那个是什么呢?
		呵呵!说穿了<span class=text_import2>就是 /etc/hosts.allow 与 /etc/hosts.deny 的设定档功能棉</span>。
		这个功能也是针对 TCP 的 Header 进行再次的分析,同样你可以设定一些机制来抵制某些 
		IP 或 Port ,好让来源端的封包被丢弃或通过检验;<br /><br />

		<li><span class=text_import1>服务 (daemon) 的功能∶</span><br />
		前面这两个动作基本上是 Linux 预设的功能,而这第三个步骤就是属于软体功能了。
		举例来说,你可以在 httpd.conf 这个设定档之内规范某些 IP 来源不能使用 httpd 这个服务来取得主机的资料,
		那么即使该 IP 通过前面两层的过滤,他依旧无法取得主机的资源喔!但要注意的是,
		<span class=text_import2>如果 httpd 这支程式本来就有问题的话,那么 client 
		端将可直接利用 httpd 软体的漏洞来入侵主机,而不需要取得主机内 root 的密码!</span>因此,
		要小心这些启动在网际网路上面的软体喔!
		所以前一章<a href="0220upgrade.php">网路升级套件</a>是很重要的!<br /><br />

		<li><span class=text_import1>使用主机的档案系统资源∶</span><br />
		想一想,你使用浏览器连接到 WWW 主机最主要的目的是什么?当然就是读取主机的 WWW 资料啦!
		那 WWW 资料是啥?就是档案啊!^_^!所以,最终网路封包其实是要向主机要求档案系统的资料啦。
		我们这里假设你要使用 httpd 这支程式来取得系统的档案资料,但 httpd 预设是由一个系统帐号名称为
		httpd 来启动的,所以∶<span class=text_import2>你的网页资料的权限当然就是要让 httpd 
		这支程式可以读取</span>才行啊!如果你前面三关的设定都 OK ,最终权限设定错误,
		使用者依旧无法浏览你的网页资料的。
		</ol>

		在这些步骤之外,我们的 Linux 以及相关的软体都可能还会支援登录档记录的功能,
		为了记录历史历程,以方便管理者在未来的错误查询与入侵侦测,良好的分析登录档的习惯是一定要建立的,
		尤其是 /var/log/messages 与 /var/log/secure 这些个档案!
		虽然各大主要 Linux distribution 大多有推出适合他们自己的登录档分析套件,例如 CentOS 的 
		logwatch ,不过毕竟该套件并不见得适合所有的 distributions ,所以鸟哥尝试自己写了一个 logfile.sh 的 
		shell script,您可以在底下的网址下载该程式∶<br />
		<ul><li><a href="http://linux.vbird.org/download/index.php?action=detail&fileid=60"
		target="_blank">http://linux.vbird.org/download/index.php?action=detail&fileid=60</a></li></ul>

		好了,那么根据这些流程,你觉得我们可以如何保护自己的主机呢?<br /><br />
	</div>

	<hr /><a NAME="packet_flow_protect"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">主机能作的保护∶
	权限设定、套件更新、SELinux</span><br />
	<div class=block2>
		在<a href="../linux_basic">基础篇</a>里面的前面几章我们谈到很多关于档案权限方面的注意事项,
		<span class=text_import2>关于目录最重要的是那个 w (可写入)的权限,至于对档案来说,那个 
		r (可读取) 也是非常重要的!</span>而由前一小节的<a 
		href="#fig_1">图一</a>我们也知道网路服务其实就是提供主机的档案资源给 client 端来查阅就是了。<br /><br />

		根据这样的说法,你可以知道,如果你有某些不想要被读取的资料在主机上面的话,
		那么<span class=text_import2>将该资料的权限设定为不能被某些网路服务读取的情况,
		就能达到最基础的保护了。</span>所以您说档案权限重不重要啊!很重要的!不是吗?<br /><br />

		<hr /><li><span class=text_import1>权限的重要性</span><br />
		<div class=block2>
		鸟哥常常在上课的时候会开玩笑,说如果你只要下达一个指令,那你的系统就得要重新安装了!
		那就是∶『chmod -R 777 /』,这个指令可是『极度危险』的喔!为何呢?因为系统上面本来就有很多需要被保护的资料,
		例如 /etc/shadow 以及 /etc/passwd 等,尤其是 shadow 密码档案。虽然里头是加密过的资料,
		不过别忘了,现在的 PC 速度实在太快了,而网路上又有太多暴力破解密码的软体,
		如果你的 /etc/shadow 被取得后,嘿嘿!你的密码其实就算『公开了』。那万一你有开放某些网路服务的话,
		例如可连线登入的 ssh 服务或 mail 服务,那任何人都可以使用你的主机来登入,
		或者是利用你的主机来收你主机上的其他使用者的信,唉!糗大了!<br /><br />

		再者,很多朋友在主机上面常常喜欢建立权限为 drwxrwxrwx 的目录来提供使用者上传资料,
		这实在是很危险ㄟ!如果使用者的功力够高的话,他可以在网路软体如 httpd 的使用上,
		来建立一些危险的 <a href="../linux_basic/0340bashshell-scripts.php">script</a> 
		在你的 drwxrwxrwx 的目录中,那如果你不小心进入到该目录,
		又不小心执行了该恶意使用者所建立的 script ,恭喜您~中标!<br /><br />

		另外,如果你是学校老师,为了公平与同学本身的权益起见,你会希望同学们所上传的资料不会被其他同学所窃取。
		那么你该如何进行权限的规范?如果单纯的让学生通通上传到单一目录,并且没有指定特殊的权限时,
		不但某些同学的资料可能会被窃取与复制,更惨的是,可能资料会被某些恶意同学所删除!
		那可就麻烦了!所以,权限的设定真的很重要啦!<br /><br />

		而除了传统的权限之外,事实上目前 Linux 支援一种称为 ACL 的额外权限控制方式,
		也支援更强化安全的 SELinux ,这两个小东西我们会在本章的后面部分继续介绍。<br /><br />
		</div>

		<hr /><li><span class=text_import1>严格的密码的重要性∶</span><br />
		<div class=block2>
		很多使用者为了方便记忆,老是跟系统管理员说∶『喂!我的密码可不可以简单一点啊?
		太麻烦的我都记不住!』如果您是那个可怜的系统管理员,你该如何回应?
		如果你大开方便之门,未来可是后患无穷的!举例来说,如果你的 mail server 上面某个使用者帐号为
		alex 好了,那么他的 email address 将会是∶『 alex@your.host.name 』,
		那这个使用者由于使用习惯不良,他将他的 mail address 留在 Internet 上,所以很多人都知道这个 address。<br /><br />

		知道就知道,会有什么了不起吗?呵呵!了不起的很!如果有个坏家伙,他想要偷偷的收取 alex 的信,
		那他就在他的收信软体上面偷偷填上你的主机,然后偷偷输入帐号 alex 并且输入密码为 alex ,
		如果你真的帮 alex 这个使用者建立同名的密码,哈哈!系啊(请台语发音,谢谢)!这个 alex 
		永远都收不到他的信了!<br /><br />

		这算还好呐!如果你有开放远端连线登入的服务,那么坏家伙就可以利用 alex 这个帐号与密码来登入你的主机,
		如果你没有做好权限规划的话,哇!整部主机的资料被偷光光!那可有的瞧的了!
		所以,您说密码不重要吗?我可不认为!<br /><br />
		</div>

		<hr /><li><span class=text_import1>套件更新的重要性∶</span><br />
		<div class=block2>
		很多朋友由于网路文章的关系,可能会拿比较旧的 Linux distribution 来作为架站的平台,
		举例来说,使用 Red Hat 9 来架站的朋友想必还是不少的。如果你真的利用旧的版本来进行网站的架设,
		而且还对 Internet 开放服务的话,那么你的主机将会在不到一天的时间内被『绑架』的!
		为什么呢?因为套件软体都是可能有漏洞的,如果你没有补洞的话.....<br /><br />

		有些朋友认为∶『我的密码设定的严格一点,应该就好了吧?』真的吗?让我们瞧一瞧<a href="#fig_1">图一</a>的流程,
		第三个步骤是否使用到 httpd 这个程式的功能了,万一这个程式有问题怎么办?
		举例来说,<a href="http://phorum.study-area.org" 
		target="_blank">酷学园</a>的朋友曾经在他举办的研讨会当中露一手如何绑架没有修补漏洞的 Linux 系统,
		利用的就是 httpd 这个软体的漏洞,整个入侵的过程没有花费一分钟以上!
		而且他取到的可是 root 的权限呐!不是什么阿猫阿狗的喔!
		而且他完全没有输入任何密码,使用的入侵程式则是由 Internet 上面取得的。<br /><br />

		在上头这个例子鸟哥不是要说该朋友的功力,而是要提醒大家,套件修补的重要性!
		要取得破解程式的管道实在太多了,但如果你都有在最短的时间内取得套件的更新的话,
		那么至少该破解程式对你的系统就不会生效!你的主机自然就会比较安全些。
		而这个问题在所有的作业系统上面都是存在的! Windows 系统也是每个月必须要推出他们的套件程式修补,
		否则一样会被攻击或入侵啊!不过 Linux 的套件漏洞修补要快多了!<br /><br />
		</div>

		<a name=selinux></a><hr /><li><span class=text_import1>SELinux</span><br />
		<div class=block2>
		在最新的 Linux 2.6 版核心上所发展的 distributions 目前预设都会启动一个名为 SELinux 的核心模组,
		这个 SELinux 必须要在开机载入核心时就得要载入,那这个玩意儿是啥咚咚?
		<span class=text_import2>SELinux 是 Security Enhanced Linux (安全加强的 Linux) 的缩写,
		他并不是一个防火墙的软体,而是一个『针对档案系统权限作更细部规划的一个模组</span>』。<br /><br />

		传统的 Linux 权限是分为三种身份 (owner, group, others) 以及三种权限 (r, w, x),
		但事实上,这三种身份的三种权限组合并无法有效的管理所有系统上的 daemon 存取资料时所需要的行为。
		因此美国国家安全局便发展出这个可以更细部规划档案权限功能的 SELinux 了。<br /><br />

		由于 SELinux 主要是进行档案系统的细部权限设定,所以想要使用 SELinux  的配置时,
		需要对 Linux 的档案系统以及基础的作业系统概念要很清楚,否则将会使得很多的网路服务无法正确的启用系统资源,
		导致你的主机很多服务无法存取系统资料!因此,对于我们刚接触到 Linux 架站的朋友来说,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -