最近更新日期: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 Linux 的端口 (port)
我们在网络基础的通讯协定那个小节曾经谈到 TCP
封包表头最重要的就是来源与目标的端口 (port) 了,若再加上来源与目标的 IP 就可成为一组
Socket pair ,这个 port
就是用在网络连线时提供连线接口的咚咚啰,在开始这一节之前,请您先前往网络基础那一章再瞧一瞧先。
除了这个之外,还有没有其他需要注意的事项呢?底下我们就来谈一谈先!
什么是 port
你或许常常会在网络上听说‘我的主机开了多少的 port ,会不会被入侵呀?’
或者是说‘开那个 port 会比较安全?又,我的服务应该对应什么 port
呀?’呵呵!很神奇吧!怎么一台主机上面有这么多的奇怪的 port 呢?
其实也不怎么难啦!在网络基础里面我们曾经介绍过很多的网络概念, 所以你会知道要达成一条 server/client 的连线,需要一组 Socket pair 来建立连线, 这也就是说,网络连线是‘双向’的。 此外,既然我们想要连线到主机端,那么主机势必得要启动一个大家都知道的 port 在‘监听’吧, 否则如何达成连线呢?您说是吧!另外, client 端是否要启用固定的 port 来连线? 当然不需要啊~那共有多少 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 是由某些程序所启动的,所以要关闭某些 port
时,那就直接将某个程序给他关闭就是了!
那关闭的方法你当然可以使用 kill
,不过,毕竟不是正统的解决之道,因为 kill
这个指令通常具有强制关闭某些程序的功能,但我们想要正常的关闭该程序啊!
所以,就利用系统给我们的 script 来关闭就好了啊。
在此同时,我们就得再来稍微复习一下,一般传统的服务有哪几种类型?
stand alone 与 super daemon
我们在鸟哥的 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:将旧的文章移动到 此处 |
||||||||||||||||||||||||||||||||||||||