最近更新日期:2006/08/08
1. Linux 的埠口 (port)
1.1 什么是 port ? 1.2 观察 port: netstat, nmap 2. port 的启动与关闭 2.1 stand alone 与 super daemon 2.2 设定开机时启动服务 2.3 安全性的考量 3. 课后练习 4. 针对本文的建议:http://phorum.vbird.org/viewtopic.htm?p=112964 ![]()
我们在网路基础的通讯协定那个小节曾经谈到 TCP
封包表头最重要的就是来源与目标的埠口 (port) 了,若再加上来源与目标的 IP 就可成为一组
Socket pair ,这个 port
就是用在网路连线时提供连线接口的咚咚啰,在开始这一节之前,请您先前往网路基础那一章再瞧一瞧先。
除了这个之外,还有没有其他需要注意的事项呢?底下我们就来谈一谈先!
![]()
你或许常常会在网路上听说‘我的主机开了多少的 port ,会不会被入侵呀?’
或者是说‘开那个 port 会比较安全?又,我的服务应该对应什么 port
呀?’呵呵!很神奇吧!怎么一部主机上面有这么多的奇怪的 port 呢?
其实也不怎么难啦!在网路基础里面我们曾经介绍过很多的网路概念, 所以你会知道要达成一条 server/client 的连线,需要一组 Socket pair 来建立连线, 这也就是说,网路连线是‘双向’的。 此外,既然我们想要连线到主机端,那么主机势必得要启动一个大家都知道的 port 在‘监听’吧, 否则如何达成连线呢?您说是吧!另外, client 端是否要启用固定的 port 来连线? 当然不需要啊~那共有多少 port 呢?底下我们就先来谈一谈。
还有上面提到的一些重点你也得再了解一下,那就是:
![]()
好了,我们现在知道这个 port 是什么鬼东西了,再来就是要去‘看他到底在干啥?’没错!
再来就是要来了解一下,我们的主机到底是开了多少的 port 呢?如同我们前面说的,
您得要先了解一下,我们的‘服务’跟‘ port ’对应的档案是哪一个?再提醒一次呦!是‘
/etc/services ’啦!
而常用来观察 port 的则有底下两个程式:
在做为主机的 Linux 系统中,开启的网路服务越少越好!
因为较少的服务可以较容易除错 (debug) 与了解安全漏洞,并可避免不必要的入侵管道!
所以,这个时候请了解一下您的系统当中有没有哪些服务被开启了呢?
要了解自己的系统当中的服务项目,最简便的方法就是使用
netstat 了!这个东西不但简单
(每一部 Linux 机器当中预设都会安装的程式喔!) ,而且功能也是很不错的。
这个指令的使用方法在 Linux 常用网路功能指令介绍当中提过了,
底下我们仅提供如何使用这个工具的方法啰!
列出在监听的网路服务: 列出网路服务的方式简单,如下所示:
列出已连线的网路连线状态: 如果仅是要列出网路介面上已经连线的或者是一些连线过程挂断、连接程序的网路状态, 可以使用如下的方式来处理:
删除已建立或在监听当中的连线: 如果想要将已经建立,或者是正在监听当中的网路服务关闭的话,最简单的方法当然就是找出该连线的 PID, 然后将他 kill 掉即可啊!例如下面的范例:
如果你要侦测的设备并没有自己的作业系统,举例来说,你想要了解一下公司的网路印表机是否有开放某些协定时,
那该如何处理啊?现在你知道 netstat 可以用来查阅本机上面的许多监听中的通讯协定,
那例如网路印表机这样的非本机的设备,要如何查询啊?呵呵!用 nmap 就对了!
nmap 的套件说明之名称为:‘Network exploration tool and security scanner’,顾名思义, 这个东西是被系统管理员用来管理系统安全性查核的工具!他的具体描述当中也提到了, nmap 可以经由程式内部自行定义的几个 port 对应的指纹资料,来查出该 port 的服务为何,所以我们也可以藉此了解我们主机的 port 到底是干嘛用的!如果您是安装 Linux 是 Red Hat 系统的话,那么这个 nmap 套件应该已经安装妥当了,万一没有这个套件的话,也可以来到底下的网站下载:
请特别留意,这个 nmap 的功能相当的强大,也是因为如此, 所以很多刚在练习的黑客会使用这个软体来侦测别人的电脑,这个时候请您特别留意, 目前很多的人已经都有‘特别的方式’来进行登录的工作!例如以 TCP_Wrappers (/etc/hosts.allow, /etc/hosts.deny) 的功能来记录曾经侦测过该 port 的 IP! 这个软体用来‘侦测自己机器的安全性’是很不错的一个工具,但是如果用来侦测别人的主机, 可是会‘吃上官司’的!特别留意!! ![]()
现在你知道其实 port 是由某些程式所启动的,所以要关闭某些 port
时,那就直接将某个程式给他关闭就是了!
那关闭的方法你当然可以使用 kill
,不过,毕竟不是正统的解决之道,因为 kill
这个指令通常具有强制关闭某些程式的功能,但我们想要正常的关闭该程式啊!
所以,就利用系统给我们的 script 来关闭就好了啊。
在此同时,我们就得再来稍微复习一下,一般传统的服务有哪几种类型?
![]()
我们在鸟哥的 Linux 私房菜 -- 基础学习篇内谈到,
在一般正常的 Linux 系统环境下,服务的启动与管理主要有两种方式:
![]()
如果刚刚你已经利用类似前一节的方法将一些服务关闭了,但是下次再重新开机后,咦!
怎么那些被关闭的服务又‘春风吹又生’的给他‘长’出来了?呵呵~没错啊,
因为前一节的作法是可以立即将某个服务关闭,但是却不会影响到开机时是否会启动与否的设定。
唉~伤脑筋~
如果你想要在开机的时候就启动或不启动某项服务时,那就得要了解一下 基础学习篇里面谈到的开机流程管理 的内容啦! 在 Unix like 的系统当中我们都是透过 run level 来设定某些执行等级需要启动的服务, 以 Red Hat 系统来说,这些 run level 启动的资料都是放置在 /etc/rc.d/rc[0-6].d/ 里面的,那如何管理该目录下的 script 呢? 手动处理吗?会疯掉的呐!所以你必须要熟悉 chkconfig 或 Red Hat 系统的 ntsysv 这几个指令才行!
聪明的你一定会问说:‘鸟哥,你的意思是只要将系统所有的服务都关闭,那系统就会安全啰?’ 当然....不是!因为‘很多的系统服务是必须要存在的,否则系统将会出问题’ 举例来说,那个保持系统可以具有工作排程的 crond 服务就一定要存在,而那个记录系统状况的 syslogd 也当然要存在~否则怎知道系统出了啥问题? 底下鸟哥列出几个常见的必须要存在的系统服务给大家参考参考先!这些服务请不要关闭啊!
没错!不要怀疑!只要这些就可以啦!这几个服务是必须要启动的! 至于其他服务则都先不用启动!例如 sendmail 啦!其他林林总总的资料,都先摆着! 我们会在后续的章节当中提到如何启动这些服务的啦! ![]()
我们的 Linux distribution 很好心的帮使用者想到很多了,所以在一安装完毕之后,
系统会开启一堆有的没有的网路服务,例如那个 portmap 之类的咚咚,以及网路印表机的 cups 服务等等,
这些东西你或许知道或许不知道,不过他就是有开启~但我们的主机明明就是用来做为伺服器的,
所以这些本来预计要给 client 使用的服务其实有点‘多此一举’的感觉~
所以啦,请你将他关闭吧!就利用 ntsysv 或 chkconfig 来关闭他!
只留下前一节咱们建议的那些服务就好了~其他的以后再说啊!
不过要记得, ntsysv 及 chkconfig 都是在管理开机是否启动某些服务的 script 而已, 所以使用 chkconfig 管理完毕后,请记得最好使用 reboot 来完整的重新载入这些服务, 然后以‘ netstat -tunpl ’来看看是否有什么其他的网路服务在启动啊? 如果有的话,在一样一样的将他关闭吧! ^_^ ![]()
1. 如果是 Linux 这个作业系统上面的话,可以利用‘ netstat -tunlp ’观察已经在监听的 port 与服务的对应;
2. 如果是想要查阅所有的 port (包含已建立的连线),可以使用‘ netstat -tunp ’来查阅; 3. 如果不在 Linux 本机上,可以用‘ nmap IP ’来处理啊!
利用‘ ps -aux ’或‘ top ’都可以,另外,‘ pstree -p ’则可以了解所有的程序相依性,而‘ lsof ’
则可以察看所有程序所开的档案喔!
正在 LISTEN 当中的埠口均是由某些服务(daemons)所启动的,所以要启动埠口就得启用某个服务,
要了解某个埠口是由那个 daemon 所启动的,就利用 netstat -tulp 来查阅。
Linux 系统的服务有独立启动(stand alone)及超级服务员(super daemon)两种启动的方式。挂在 super daemon
底下的服务可以经由 super daemon 的控管,以加强一些安全功能,不过由于还要经过 super daemon
的管理,所以服务的连接速度上会比 stand alone 慢一点。
各个 daemons 的启动与关闭的 scripts 是放置在 /etc/init.d/ 内, Red Hat 系统则是放到 /etc/rc.d/init.d
里面,至于 super daemon 的控管参数档案则在 /etc/xinetd.d 里面!
所谓的阻断式服务是利用三向交握程序的漏洞,多个 cient 端持续发送 tcp 封包的连线要求,
但却不理会 server 端的 SYN/ACK 的封包,导致 server 端会持续启动很多的 port 在等待 client 端的回应,
那我们知道一般 port 有 65536 个,万一用完了,那系统网路就瘫痪了!所以 DDoS 会造成系统网路瘫痪的问题。
另外,由于多个 client 同时要求,所以网路频宽也会被用光!
2002/08/02:首次完成释出 2003/08/21:重新编辑,并且加入课后练习。 2003/09/19:加入参考用解答了。 2006/08/08:将旧的文章移动到 此处 2002/08/02以来统计人数 |
||||||||||||||||||||||||||||||||||||||