分类: LINUX
2006-08-04 10:40:40
为什么我们的主机会响应网络上面的一些要求封包呢?例如我们设定了一部 WWW 主机后,当有来自 Internet 的 WWW 要求时,我们的主机就会予以响应,这是因为我们的主机有启用了 WWW 的监听埠口 (port) 啊!这里就要特别留意了,当我们启用了一个 daemon 时,就可能会造成主机的 Port 在进行 Listen 的动作,此时该 daemon 就是已经对网络上面提供服务了!万一这个 daemon 有漏洞,因为他提供 Internet 的服务,所以就容易被 Internet 上面的 cracker 所入侵了!所以说,仔细的检查自己系统上面的 port 到底开了多少个,并且予以严格的管理,才能够降低被入侵的可能性啊! |
什么是埠口( port ):
:总共有多少埠口?哪些是保留的 port ?
:Server/Client 联机建立的 TCP 三向交握
:安不安全
如何观察埠口:
:使用 netstat
:使用 nmap
如何关闭或启动一个埠口:
设定开机时启动服务的方法:
安全性: 关闭所有对外开放的 port
课后练习:
什么是埠口( port ):
在开始这个章节之前,我们先来聊一聊什么是埠口 ( port ) 呢?常常在网络上听说『我的主机开了多少的 port ,会不会被入侵呀!?』或者是说『开那个 port 会比较安全?又,我的服务应该对应什么 port 呀!?』呵呵!很神奇吧!怎么一部主机上面有这么多的奇怪的 port 呢?这个 port 有什么作用呢?!事实上,一部主机的 port 可分为『监听, LISTEN』与『随机取用的 high port』 :
所以,您应该知道 Server/Client 之间的数据传送其实是 port 与 port 之间的递送喔!那就是我们在网络基础里面谈到的 socket pair 当中的一环啰。那么数据透过这些 port 来进行传送的时候,会不会跑错地方啊?!还记得我们在里头提到的 资料吧?对啦! 封包在传送的时候,在 TCP 封包的表头 (header) 不是会填有来源与目的之 IP 及 port 吗?在这里您可以这样想,由于每种网络的服务功能都不相同,因此有必要将不同的封包送给不同的服务来处理,所以啰,当您的主机同时开启了 FTP 与 WWW 服务的时候,那么别人送来的数据封包,就会依照 TCP 表头上面的 port 号码来给 FTP 这个服务或者是 WWW 这个服务来处理,当然就不会搞乱啰! ( 注:嘿嘿!有些很少接触到网络的朋友,常常会问说:『咦!为什么您的计算机同时有 FTP、WWW、E-Mail 这么多服务,但是人家传数据过来,您的计算机怎么知道如何判断?计算机真的都不会误判吗?!』现在知道为什么了吗?!对啦!就是因为 port 不同嘛!您可以这样想啦,有一天,您要去银行存钱,那个银行就可以想成是『主机』,然后,银行当然不可能只有一种业务,里头就有相当多的窗口,那么您一进大门的时候,在门口的服务人员就会问您说:『嗨!您好呀!您要做些什么事?』您跟他说:『我要存钱呀!』,服务员接着就会告诉您:『喝!那么请前往三号窗口!那边的人员会帮您服务!』这个时候您总该不会往其它的窗口跑吧?! ^_^""这些窗口就可以想成是『 port 』啰!所以啦!每一种服务都有特定的 port 在监听!您无须担心计算机会误判的问题呦! )
总共有多少埠口?哪些是保留的 port ?
我想,您或许会很好奇,咦!那么通常一般的主机会有多少个 port 呢?!正常来说,所有的 port 是由 1 ~ 65535 这么多个啦!好啦,那么在这些 port 上面有没有保留给系统使用的呢!?是有的!一般而言,只有 root 才可以启用 1 ~ 1023 以内的 port ,这些 port 就是特殊的埠口,是保留给系统来使用的!至于大于 1024 以上的 port 除了给系统随机取用来作为联机的需求之外,也可以用来作为服务的 LISTEN 之用。举例来说,如果您觉得 0~1023 的 port 需要以 root 的身份来启动,这样如果该 port 的程序被入侵了,那么入侵者将拥有 root 的权限,这实在很危险~所以,这个时候您可以以一般身份账号并使用大于 1024 以上的 port 来启用某些服务呢!例如 FTP 的 port 预设为 21 ,您也可以将 FTP 以 10021 的 port number 来启动,并且使用一般身份的账号来启用这个 FTP 的服务,会比较安全一点。不过,这样一来会造成 client 端的困扰,因为一般 FTP Client 软件都是预设以连接到主机的 port 21 来进行联机的,现在您的主机 FTP 改成 10021 了,除非您的 Client 知道这个设定值,否则 Client 软件就无法联机成功了。
好了,那么您应该又会说,这些保留的 port ( 或称为 well know )有什么特殊的功能呢?!这些 well know 的埠口其实是目前一些 Internet 上面常见的 Services 所惯用的埠口咯,为了保留给这些埠口给特殊的服务使用,以避免不小心被使用者或者是 Client 端软件给占用了,所以就需要订定这样的保留功能啰。此外,因为这些 port 是目前 Internet 上面所惯用的,所以一些程序开发者在进行软件的开发时,就能够针对这些 well know 的埠口直接来开发,大家也比较容易使用服务器的功能啊!
至于这些 well know 的埠口与他所对应的服务 (services) 其实已经在我们的 Linux 系统当中存在一个对照表了,那就是 /etc/services 这个档案啰!我们在 里面提到的 的功能时,有没有加上 -n 这个参数是有影响的!当不加 -n 这个参数时,直接下达『 netstat -tl 』竟然可以告诉我目前正在 LISTEN 的服务名称!嘿嘿!这就是 /etc/services 的功能啦!此外, /etc/services 也是某些服务在启动的时候,设定 port number 的重要依据,例如 的埠口就是由这个档案来控管的。来看一看 /etc/services 的几个主要内容吧!
[root@test root]# vi /etc/services |
Server/Client 联机建立的 TCP 三向交握
除此之外,还记得我们在 那一篇当中稍微提到,如果需要进行网络联机的时候,那个重要的三向交握( Three-Way Handshake )就不能不理解一下:
经过三向交握之后,呵呵!您的 client 端的 port 通常是高于 1024 的随机取得的 port ,至于主机端则视当时的服务是开启哪一个 port 而定,例如 WWW 选择 80 而 FTP 则以 21 为正常的联机通道!三向交握是相当重要的一个认识喔!因为未来在防火墙的设定上面,这个机制的认知是必须的!
安全不安全?
那么了解了这些 port 之后,再来您应该还会问到一个问题呀!那就是『我怎么知道哪一个 port 比较安全?』这里可能要先请您了解一下所谓的『 port 』与『 服务 』对于『 安全 』的相关性!真正影响网络安全的并不是 port 这个东西,而是将 port 启动的那个服务才是重点!举个例子来说好了,您应该偶而会听到『Wu-ftpd 这个服务不安全,建议大家改用 proftp 』对吧!请注意呦!那个 Wu-ftpd 与 proftp ( 这两个都是套件的名称 )都是使用 port 21 这个埠口!嘿嘿!但是 proftp 就是比 wu-ftp 稍微安全一点!晓得了吗?没错!对于安全真正有危害的是『某些不安全的服务』而不是『开了哪些 port 』才是!基本上,没有必要的话,一些您想不到或者用不到的 port 都把他关掉了吧!毕竟没有开口总比开了口再来防堵要安全的多吧!! ^_^""!而且服务套件的版本也需要持续的进行更新喔!
如何观察埠口:
好了,我们现在知道这个 port 是什么鬼东西了,再来就是要去『看他到底在干啥?』对吧!没错!再来就是要来了解一下,我们的主机到底是开了多少的 port 呢?如同我们前面说的,您得要先了解一下,我们的『服务』跟『 port 』对应的档案是哪一个?再提醒一次呦!是『 /etc/services 』 啦!好了,那么常见的 port 对应的服务有哪些呢?大概有这些啦!
服务名称 port 号 常见套件名称 建议 |
当然还不只这些哩,更详细的信息您应该到您的 Linux 主机之下的 /etc/services 这个档案去看仔细!好了,那么接下来就是要来察看我们主机的 port 啰!如何察看呢?底下我们介绍两个最常使用的观测指令:
见他的大头王!怎么使用 nmap 会违法?呵呵!别担心,由于 nmap 的功能太强大了,所以很多 cracker ( 怪客,网络上面的闲人 ) 会直接以他来侦测别人的主机,这个时候就可能造成违法啦!只要您使用 nmap 的时候不要去侦测别人的计算机主机,那么就不会有问题啦! ^_^"" 底下我们分别来说一说这两个宝贝吧!
使用 netstat 指令:
如前所述,在做为主机的 Linux 系统中,服务项目是越少越好!这样可以避免不必要的入侵管道喔!因此,这个时候请了解一下您的系统当中,有没有哪些服务被开启了呢?要了解自己的系统当中的服务项目,最简便的方法就是使用 了!这个东西不但简单 ( 每一部 Linux 机器当中预设都会安装的套件喔! ) ,而且功能也是很不错的。这个指令的使用方法在 指令介绍当中提过了,底下我们仅提供如何使用这个工具的方法啰!
[root@test root]# netstat |
如上所示,单纯使用 netstat 的时候,仅『列出目前已经接通的服务项目与服务名称』所以您可以看到,由于目前仅有一个 ssh 的联机建立成功,所以就只有显示出一个 ESTABLISHED ( 联机中的意思 ) 的项目。上面第三行以 tcp 开头的那一行,表示『有一个 ssh 的服务开启通道联机中,是由远程 client 的 192.168.1.11 这个 IP 连接到 192.168.1.2 的主机上面的这个 IP ,而 Client 端联机的通道是以 1391 这个通道连接进入 ssh 的服务中的!』。这里这个 ssh 所显示的服务名称就是在 /etc/services 里面记载的啰!那如果我需要将所有的项目都列出来呢?例如说:有哪些 port 目前正在监听呢?!
[root@test root]# netstat -a |
如上所示,加入 -a ( all )就是说将所有在机器上所有的 port 的状态列出的意思,不过,服务的名称已经使用 /etc/services 里面的名称了,而不是使用 port 的数字!如上所示,目前我主机上面的服务共开启了:『 pop3、imap、ftp、ssh、smtp 』等服务 (就是在 tcp 封包里头的具有 LISTEN 的那几个咚咚啰!) 至于已经建立的服务就只有 ssh 这一个啰!那如果我想要知道 port 的号码呢?呵呵,就使用底下的指令吧!
[root@test root]# netstat -an |
如上所示,我接通的服务通道只有 22 这一个,而其它的您可以参照上面的指令输出结果来对照,所以您就可以知道啰:pop3 为 110 而 imap 为 143 呵呵!就是这样啰!因此,透过此一指令,就可以轻易的了解目前主机的运作状况与服务状态啰!当然啰, netstat 的用途不止于此,您可以使用 man 来查阅一番喔!相信对您的主机会有更大的了解呦!
相信有不少的朋友都会有这个困扰,就是要怎样删除已经建立的联机呢?因为总有些不速之客会连到您的主机来进行一些破坏的工作!或者是您根本不想让对方联机过来!呵呵!还记得 里面提到的几个常用的指令吧!?那就是找出那个联机程序的 PID ,然后给他 掉就是了!简单呀!不过,大问题是『我要怎样找出联机的 PID 呀!?』呵呵!由于 PID 的管理与整体的系统资源有关,这个时候,虽然可以使用 netstat 来观察 PID ,不过只有 root 可以观察到联机状态的 PID 号码呦!( 注:还记得资源管理提及的 PID 概念吗?就是说,在 Linux 系统之内,每个『程序』系统都会给予一个号码来管理!这个就是 PID 啰!)
[root@test root]# netstat -ap |
看到上面那个斜体字的联机建立的网络状态了吗?嘿嘿!最后面一栏就是显示那个 PID/Program name ,那个 PID ( 上面是 24751 )也就是我们要来砍掉的啦!这个时候,如果要将该联机砍掉时,就直接以 来做吧!
[root@test root]# kill -9 24751 |
这样就能将该联机给他『踢出去』您的主机啦!! ^_^""
使用 nmap 套件:注意安全!
在本机上面观察 port 最好是使用 netstat 啦!因为他安全又可靠!但是,由于可能有某些 port 会寻找不到,或者不晓得那些 port 是干嘛用的,尤其是 /etc/services 里头没有提到的几个 port 对应的服务!这个时候怎么办?!没关系,不要紧,我们这个时候可以使用那个很流行的『黑客指令』,就是 nmap 这个东西啦!nmap 的套件说明之名称为:『Network exploration tool and security scanner』,顾名思义,这个东西是被系统管理员用来管理系统安全性查核的工具!他的具体描述当中也提到了, nmap 可以经由内部自行定义的几个 port 对应的指纹数据,来查出该 port 的服务为何,所以我们也可以藉此了解我们主机的 port 到底是干嘛用的!如果您是安装 Linux 是 Red Hat 版本的话,那么这个 nmap 套件应该已经安装妥当了,万一没有这个套件的话,也可以来到底下的网站下载:
[root@test root]# nmap <扫瞄类型> <扫瞄参数> 例题一:扫瞄单一部计算机! 例题二:扫瞄单一部计算机的较少数 port 号码! 例题三:直接以 Ping 的方式扫瞄数个计算机! Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ ) Interesting ports on linux174 (192.168.1.174): Interesting ports on linux176 (192.168.1.176): Nmap run completed -- 7 IP addresses (3 hosts up) scanned in 1 second |
请特别留意,这个 nmap 的功能相当的强大,也是因为如此,所以很多刚在练习的黑客会使用这个软件来进行侦测别人的计算机,这个时候请您特别留意,目前很多的人已经都有『特别的方式』来进行登录的工作!例如以 的功能来记录曾经侦测过该 port 的主机 IP!这个软件用来『侦测自己机器的安全性』是很不错的一个工具,但是如果用来侦测别人的主机,可是可能会『吃上官司』的!特别留意!!
如何关闭或启动一个埠口:
既然已经知道了有多少个 port 被启动或关闭,那么接着下来当然就是要将一些不安全的服务给他关闭啰!呵呵!那么该如何关闭呢?请注意:『开或关一个 port 的方式是:开启或关闭一个服务即可!』例如您要关闭 port 21 这个较为危险的 ftp 的埠口,那么就是将 wu-ftp 或者是 proftp 关掉就对啦!关掉他自然就连同 port 也关掉啰! ^_^"" 所以说,当您侦测完了 port 之后,接着下来就是找出该 port 的对应的服务,将该服务给关掉,就会把 port 关啦!嗯!我们来试试看关掉一个 25 port 好了!由于 25 port 是由 sendmail 来进行 smtp 的启动的,那么我们就先来启动他:
[root@test root]# /etc/rc.d/init.d/sendmail start |
那如果要关闭的话,就停止 sendmail 呀!直接以上面的方式关闭呀!这样就好啰!这样您再以 netstat -an 看一下,呵呵! port 25 就被关掉喔!很简单吧!当然,您也可以藉由 netstat -anp 找到 PID 之后,以 kill 指令来关闭也是可以的!
OK!那么启动服务的 scripts 路径在哪里?如果您还记得『 』那一篇文章的时候,那么应该就会记得我们目前的几个 port 启动的路径预设都放置在:
这两个路径底下,那个 /etc/rc.d/init.d 是以 RPM 来安装套件的时候,一定会存在的目录,这个目录记录了所有的服务的启动之 scripts ,这也就是刚刚为何我会以 /etc/rc.d/init.d/sendmail start 来启动我的 sendmail 服务的原因啰!至于那个 /etc/xinetd.d 目录下的档案,就是挂在 xinetd 这个 super daemon 服务底下的服务套件啦!最常见的有 FTP, Telnet, POP3, IMAP 等等,都是由 xinetd 统一统筹来进行整理!所以,当您要启动 telnet 时,就直接到 /etc/xinetd.d 里面去,然后将 telnet 这个档案的 disable = yes 改成 disable = no ,然后『重新启动 xinetd 这个服务!』没错!我没有写错!就是 xinetd !因为我刚刚提过啦,由于 telnet 是由 xinetd 统一统筹的,所以要启动 telnet 自然就是将 xinetd 重新启动即可!
如何!不难吧!简单的很!好了,那么除了直接以文件名称来启动关闭之外,有没有其它较为简易的方式来启动的啦!?当然有!就是使用 这个指令说!例如要重新启动 xinetd ,可以这么写:(注: service 这个指令并非所有的 Linux distribution 都存在,仅有 Red Hat 及 Mandrake 上面才会发现这个指令喔!)
设定开机时启动服务的方法:
上一小节提到的都是立刻生效的服务启动或关闭的方法,那么有没有方法可以在开机启动的时候就设定不要启动呢?您还记得在 那一篇文章吗?开机的程序在经历了:
等等程序后,就是开机完毕啦!那个系统就成功的启动啦!而其中启动服务的项目在哪里呢?呵呵!就是在第七步骤,以我为例,通常我都是以文字接口 登入我的系统,文字接口的 run-level 为 3 ,所以这个时候我就可以在 /etc/rc.d/rc3.d 里头找到我的服务的启动项目啦!就是 S 开头的档案!这些相关的概念如果忘记的话,请在前往 那一章节去读一读去!那么如果不要启动一些服务的话,很简单呀!就是将该服务的对应档案( 指 S 开头的档案 )删除就可以啦! ^_^""
但是我要自己一个档案一个档案去删除他吗?!呵呵!当然不需要啦! Red Hat 与 Mandrake 等较流行的 Linux distribution 很细心的写了几支程序来帮您搞定他!那就是:
这三支程序的使用方式我已经在基础学习篇介绍过了,这里就不再啰唆啰!请前往基础学习篇-- 里头看看吧!
那么是否要将所有 Linux 预设的服务都关闭呢?呵呵!请注意呦!『不是将所有的服务都关掉就是安全的!』因为系统还有很多的项目是『一定要启动的!』否则将会反而变的不安全呢!底下列出来一些完全没有对外开放 port 的,但却是系统必需要的服务项目,这些项目请『务必』不要关闭了!
服务名称 服务内容说明 |
没错!不要怀疑!只要这些就可以啦!这几个服务是必须要启动的!至于其它服务则都先不用启动!例如 sendmail 啦!其它林林总总的数据,都先摆着!我们会在后续的章节当中提到如何启动这些服务的啦!
安全性: 关闭所有对外开放的 port
在您安装了 Linux 之后呢,相信有很多的朋友会开始想要作一些很炫的服务,例如 WWW 或者是 mail 亦或是 FTP 的服务,但是,这些服务都有潜在性的危险喔,很多的黑客就是利用您开启的这些服务来进行网站的破坏!基本上,比较麻烦的是『特洛伊木马』这一类的后门程序,以您的网站做为中继站去攻击黑客想要攻击的目标。所以啰,灌完了 Linux 之后,先将一些不必要的程序或服务移除吧!以保障您的网络安全!其中,更重要的则是将所有的对外的 port 都先关起来!有需要的才开启!好了,利用我们刚刚提到的几个方法将您的对外的 port 都关起来吧!
1. 使用 ntsysv 设定开机时启动的服务项目: 2. 重新开机让设定生效: 3. 观察目前的 port 开启多少个? |
这样一来,所有的对外窗口将暂时的全部关闭了!好了,准备要来玩架站啰!一个一个的启动我们的 port 吧! ^_^
课后练习: