限制Linux对外联机的端口(port number)

来源:岁月联盟 编辑:zhuzhu 时间:2007-02-11
限制Linux对外联机的端口(port number)内容简介: 限制 Linux 对外联机的端口( port number ) ------------------------------------------------------------------------------------------------











安全性:

------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------

什么是端口( port ):

  在开始这个章节之前,我们先来聊一聊什么是 port 呢?常常在网络上听说『我的主机开了多少的 port ,会不会被入侵呀!?』或者是说『开那个 port 会比较安全?又,我的服务应该对应什么 port 呀!?』呵呵!很神奇吧!怎么一部主机上面有这么多的奇怪的 port 呢?这个 port 有什么作用呢?!

  还记得我们在网络基础里头提到的 TCP/IP 资料吧?对啦!那个 TCP 在传送资料的时候,不是会填有来源与目的之 IP 及 port 吗?在这里你可以这样想,由于每种网络的服务功能都不相同,因此有必要将不同的封包送给不同的服务来处理,所以啰,当你的主机同时开启了 FTP 与 WWW 服务的时候,那么别人送来的资料封包,就会依照 TCP 上面的 port 号码来给 FTP 这个服务或者是 WWW 这个服务来处理,当然就不会搞乱啰!(注:嘿嘿!有些很少接触到网络的朋友,常常会问说:『咦!为什么你的计算机同时有 FTP、WWW、E-Mail 这么多服务,但是人家传资料过来,你的计算机怎么知道如何判断?计算机真的都不会误判吗?!』现在知道为什么了吗?!对啦!就是因为 port 不同嘛!你可以这样想啦,有一天,你要去银行存钱,那个银行就可以想成是『主机』,然后,银行当然不可能只有一种业务,里头就有相当多的窗口,那么你一进大门的时候,在门口的服务人员就会问你说:『嗨!你好呀!你要做些什么事?』你跟他说:『我要存钱呀!』,服务员接着就会告诉你:『喝!那么请前往三号窗口!那边的人员会帮您服务!』这个时候你总该不会往其它的窗口跑吧?! ^_^""这些窗口就可以想成是『 port 』啰!所以啦!每一种服务都有特定的 port 在监听!您无须担心计算机会误判的问题呦!)

  除此之外,还记得我们在 网络基础 那一篇当中稍微提到,如果需要进行网络联机的时候,那个重要的三向交握( Three-Way Handshake )就不能不理解一下,底下我们以 Study Area 里面的解释来进行说明:

· 每一个 TCP 联机都必须由一端(通常为 client )发起请求这个 port 通常是随机选择大于 1024 以上的 port 号来进行!其 TCP 封包会将(且只将) SYN 旗标设定起来!这是整个联机的第一个封包;

· 如果另一端(通常为 Server ) 接受这个请求的话(当然啰,特殊的服务需要以特殊的 port 来进行,例如 FTP 的 port 21 ),则会向请求端送回整个联机的第二个封包!其上除了 SYN 旗标之外同时还将 ACK 旗标也设定起来,并同时时在本机端建立资源以待联机之需;

· 然后,请求端获得服务端第一个响应封包之后,必须再响应对方一个确认封包,此时封包只带 ACK 旗标(事实上﹐后继联机中的所有封包都必须带有 ACK 旗标)﹔

· 只有当服务端收到请求端的确认( ACK )封包(也就是整个联机的第三个封包)之后﹐两端的联机才能正式建立。这就是所谓的 TCP 联机的'三段式交握( Three-Way Handshake )'的原理。



  经过三向交握之后,呵呵!你的 client 端的 port 通常是高于 1024 的随机取得的 port 至于主机端则视当时的服务是开启哪一个 port 而定,例如 WWW 选择 80 而 FTP 则以 21 为正常的联机信道!

· 总共有多少埠口?哪些是保留的 port ?

  我想,你或许会很好奇,ㄟ~那么通常一般的主机会有多少个 port 呢?!正常来说,所有的 port 是由 1 ~ 65535 这么多个啦!好啦,那么我们在 帐号管理 那里面也曾经说过,为了 Linux 系统本身,所以会有些保留给系统使用的 ID 号码,那么在 port 上面有没有这些保留的咚咚呢!?宾果!答对了!就是有保留的 port !一般而言,只有 root 才可以使用 1 ~ 1023 以内的 port ,这些 port 就是特殊的埠口,是保留给系统来使用的!至于一般的使用者则仅能使用大于 1024 以上的 port 来进行网络的联机动作!

· 特殊的 port ? /etc/services ?


  好了,那么你应该又会说,那么这些保留的 port 有什么特殊的功能呢?!首先,这些 port 通常只有 root 才能激活,而目前在 Internet 上面流行的几个服务之封包都有固定使用的埠号,也就是说,如果你要连上某个服务的时候,就必须要使用特殊的埠口才行,例如我们常常听到的 FTP 正常就要使用 port 21 ,而 telnet 就要使用 port 23 啰!还有哪些常常听到的埠号呢?例如 WWW 的 port 80 ,而 Proxy 的 port 3128 等等!好了,那么如果你没有将这些 port 保留起来,万一被系统不小心的随机给他丢给使用者来使用联机,呵呵!那么你的服务不就无法激活啰!?

  另外,还必须要知道一件事情,刚刚提到了那么多的服务与 port ,那么我的 Linux 怎么知道那个 port 对应哪一个服务来显示给我知道呢?例如 Linux 常用网络指令里面提到的 netstat 的功能,使用他之后,竟然可以告诉我那个服务名称!嘿嘿!不要太害怕!那也没有什么了不起的啦!就是在 /etc/services 就可以找到 port 与对应的服务的相关性啰!你可以进去看一看里面的大概内容呢!




  这个 /etc/services 档案可得好好的照顾呀!还有,你不知道的几个主要的 port 对应的服务也可以在里面找到呢!当然啰,万一在这个档案里面没有提到的服务对应的 port ,嘿嘿!那么使用 netstat 自然也就没有办法显示出该服务的名称噜!注意:这个档案有时会被修改的较不安全,有必要的时候,可以将他的属性以 chattr 来修改成不可变动呦!

· 安全不安全?


  那么了解了这些 port 之后,再来你应该还会问到一个问题呀!那就是『我怎么知道哪一个 port 比较安全?』这里可能要先请您了解一下所谓的『 port 』与『 服务 』对于『 安全 』的相关性!真正影响网络的安全的并不是 port 这个东西,而是将 port 激活的那个服务才是重点!举个例子来说好了,你应该偶而会听到『 Wu-ftpd 这个服务不安全,建议大家改用 proftp 』对吧!请注意呦!那个 Wu-ftpd 与 proftp ( 这两个都是套件的名称 )都是使用 port 21 这个埠口!嘿嘿!但是 proftp 就是比 wu-ftp 稍微安全一点!晓得了吗?没错!对于安全真正有危害的是『某些不安全的服务』而不是『开了哪些 port 』才是!基本上,没有必要的话,一些你想不到或者用不到的 port 都把他关掉了吧!毕竟没有开口总比开了口再来防堵要安全的多吧!!

返回首页

------------------------------------------------------------------------------------------------

如何观察端口: netstat, 删除已建立的联机, nmap,


  好了,我们现在知道这个 port 是什么鬼东西了,再来就是要去『看他到底在干啥?』对吧!没错!再来就是要来了解一下,我们的主机到底是开了多少的 port 呢?如同我们前面说的,你得要先了解一下,我们的『服务』跟『 port 』对应的档案是哪一个?再提醒一次呦!是『 /etc/services 』 啦!好了,那么常见的 port 对应的服务有哪些呢?大概有这些啦!



  当然还不只这些哩,更详细的信息你应该到你的 Linux 主机之下的 /etc/services 这个档案去看仔细!好了,那么接下来就是要来察看我们主机的 port 啰!如何察看呢?底下我们介绍两个最常使用的观测指令:

· netstst : 在本机上面以自己的程序监测自己的 port ,无危险;

· nmap : 在本机上面,以特殊的侦测程序侦测自己,可能会有违法之虞。

  见他的大头王!怎么使用 nmap 会违法?呵呵!别担心,由于 nmap 的功能太强大了,所以很多 cracker ( 怪客,网络上面的闲人 ) 会直接以他来侦测别人的主机,这个时候就可能造成违法啦!只要你使用 nmap 的时候不要去侦测别人的计算机主机,那么就不会有问题啦! ^_^"" 底下我们分别来说一说这两个宝贝吧!

· 使用 netstat 指令

  如前所述,在做为主机的 Linux 系统中,服务项目是越少越好!这样可以避免不必要的入侵管道喔!因此,这个时候请了解一下您的系统当中,有没有哪些服务被开启了呢?要了解自己的系统当中的服务项目,最简便的方法就是使用 netstat 了!这个东西不但简单(每一部 Linux 机器当中预设都会安装的套件喔!),而且功能也是很不错的,例如我们在侦测线上 WWW 使用者的人数时,就很需要这个咚咚啰!这个指令的使用方法在 Linux 常用网络功能指令介绍当中提过了,底下我们仅提供如何使用这个工具的方法啰!



  如上所示,单纯使用 netstat 的时候,仅『列出目前已经接通的服务项目与服务名称』所以你可以看到,由于目前仅有一个 ssh 的联机建立成功,所以就只有显示出一个 ESTABLISHED (联机中的意思)的项目。上面浅黄色的那一行,表示『有一个 ssh 的服务开启信道联机中,是由远程 client 的 192.168.1.11 这个 IP 连接到 192.168.1.2 的主机上面的这个 IP ,而 Client 端联机的信道是以 1391 这个信道连接进入 ssh 的服务中的!』。这里这个 ssh 所显示的服务名称就是在 /etc/services 里面记载的啰!那如果我需要将所有的项目都列出来呢?例如说:有哪些 port 目前正在监听呢?!



  如上所示,加入 -a ( all )就是说将所有在机器上所有的 port 的状态列出的意思,不过,服务的名称已经使用 /etc/services 里面的名称了,而不是使用 port 的数字!如上所示,目前我主机上面的服务共开启了:『 pop3、imap、ftp、ssh、smtp 』等服务(就是在 tcp 封包里头的具有 LISTEN 的那几个咚咚啰!)至于已经建立的服务就只有 ssh 这一个啰!那如果我想要知道 port 的号码呢?呵呵,就使用底下的指令吧!



  如上所示,我接通的服务信道只有 22 这一个,而其它的你可以参照上面的指令输出结果来对照,所以你就可以知道啰:pop3 为 110 而 imap 为 143 呵呵!就是这样啰!因此,透过此一指令,就可以轻易的了解目前主机的运作状况与服务状态啰!当然啰, netstat 的用途不止于此,您可以使用 man netstat 来查阅一番喔!相信对你的主机会有更大的了解呦!

· 使用 netstat 配合 kill 删除已建立的联机:

相信有不少的朋友都会有这个困扰,就是要怎样删除已经建立的联机呢?因为总有些不速之客会连到你的主机来进行一些破坏的工作!或者是你根本不想让对方联机过来!呵呵!还记得 资源管理 里面提到的几个常用的指令吧!?那就是找出那个联机程序的 PID ,然后给他 kill 掉就是了!简单呀!不过,大问题是『我要怎样找出联机的 PID 呀!?』呵呵!由于 PID 的管理与整体的系统资源有关,这个时候,虽然可以使用 netstat 来观察 PID ,不过只有 root 可以观察到联机状态的 PID 号码呦!( 注:还记得资源管理提及的 PID 概念吗?就是说,在 Linux 系统之内,每个『程序』系统都会给予一个号码来管理!这个就是 PID 啰!)



  看到上面那个淡黄色的联机建立的网络状态了吗?嘿嘿!最后面一栏就是显示那个 PID/Program name ,那个 PID ( 上面是 24751 )也就是我们要来砍掉的啦!这个时候,如果要将该联机砍掉时,就直接以 kill 来做吧!



· 这样就能将该联机给他『踢出去』你的主机啦!!

· 使用 nmap 套件:注意安全!

  在本机上面观察 port 最好是使用 netstat 啦!因为他安全又可靠!但是,由于可能有某些 port 会寻找不到,或者不晓得那些 port 是干嘛用的,尤其是 /etc/services 里头没有提到的几个 port 对应的服务!这个时候怎么办?!没关系,不要紧,我们这个时候可以使用那个很流行的『黑客指令』,就是 nmap 这个东西啦!nmap 的套件说明之名称为:『Network exploration tool and security scanner』,顾名思义,这个东西是被系统管理员用来管理系统安全性查核的工具!他的具体描述当中也提到了, nmap 可以经由内部自行定义的几个 port 对应的指纹资料,来查出该 port 的服务为何,所以我们也可以藉此了解我们主机的 port 到底是干嘛用的!如果你是安装 Red Hat 7.x 版本的话,那么这个 nmap 套件应该已经安装妥当了,万一没有这个套件的话,也可以来 这里 下载去安装呦!什么?不知道如何安装!?该死,看一下 RPM 的指令吧!好了,我们谈一谈 nmap 的使用吧!






  请特别留意,这个 nmap 的功能相当的强大,也是因为如此,所以很多刚在练习的黑客会使用这个软件来进行侦测别人的计算机,这个时候请您特别留意,目前很多的人已经都有『特别的方式』来进行登录的工作!例如以 TCP_Wrappers ( /etc/hosts.allow, /etc/hosts.deny ) 的功能来记录曾经侦测过该 port 的主机 IP!这个软件用来『侦测自己机器的安全性』是很不错的一个工具,但是如果用来侦测别人的主机,可是可能会『吃上官司』的!特别留意!!

返回首页

------------------------------------------------------------------------------------------------

如何关闭或激活一个端口: 激活或关闭服务, 激活或关闭 daemons 的路径,


· 如何激活或关闭服务?

  既然已经知道了有多少个 port 被激活或关闭,那么接着下来当然就是要将一些不安全的服务给他关闭啰!呵呵!那么该如何关闭呢?请注意:『开或关一个 port 的方式是:开启或关闭一个服务即可!』例如你要关闭 port 21 这个较为危险的 ftp 的埠口,那么就是将 wu-ftp 或者是 proftp 关掉就对啦!关掉他自然就连同 port 也关掉啰! ^_^"" 所以说,当你侦测完了 port 之后,接着下来就是找出该 port 的对应的服务,将该服务给关掉,就会把 port 关啦!嗯!我们来试试看关掉一个 25 port 好了!由于 25 port 是由 sendmail 来进行 smtp 的激活的,那么我们就先来激活他:



  那如果要关闭的话,就停止 sendmail 呀!直接以上面的方式关闭呀!这样就好啰!这样你再以 netstat -an 看一下,呵呵! port 25 就被关掉喔!很简单吧!

· 激活或关闭 daemons 的路径与指令:

  如果你还记得 认识服务 那一篇文章的时候,那么应该就会记得我们目前的几个 port 激活的路径预设都放置在:

o /etc/rc.d/init.d

o /etc/xinetd.d

  这两个路径底下,那个 /etc/rc.d/init.d 是以 RPM 来安装套件的时候,一定会存在的目录,这个目录记录了所有的服务的激活之 scripts ,这也界是刚刚为何我会以 /etc/rc.d/init.d/sendmail start 来激活我的 sendmail 服务的原因啰!至于那个 /etc/xinetd.d 目录的下档案,就是挂在 xinetd 这个服务底下的服务套件啦!最常见的有 FTP, Telnet, POP3, IMAP 等等,都是由 xinet 统一统筹来进行整理!所以,当你要激活 telnet 时,就直接到 /etc/xinetd.d 里面去,然后将 telnet 这个档案的 disable = yes 改成 disable = no ,然后『重新激活 xinetd 这个服务!』没错!我没有写错!就是 xinetd !因为我刚刚提过啦,由于 telnet 是由 xinetd 统一统筹的,所以要激活 telnet 自然就是将 xinetd 重新激活即可!

o /etc/rc.d/init.d/xinetd restart

如何!不难吧!简单的很!好了,那么除了直接以文件名称来激活关闭之外,有没有其它较为简易的方式来激活的啦!?当然有!就是使用 service 这个指令说!详细的说明已经都写在 好用的系统工具 里面了,您可得多多的参考参考!例如要重新激活 xinetd ,可以这么写:

o service xinetd restart

返回首页

------------------------------------------------------------------------------------------------

设定开机时激活的方法:

· 开机激活的设定:


  刚刚提到的都是立刻生效的服务激活或关闭的方法,那么有没有方法可以再开机激活的时候就设定不要激活呢?您还记得在 Linux 开机关机程序 那一篇文章吗?开机的程序在经历了:

1. BIOS

2. MBR

3. Linux Loader

4. Kernel, init ( 取得 run-level ),

5. /etc/rc.d/,

6. /etc/modules.conf,

7. /etc/rc.d/rc[0-6].d,

8. /etc/rc.d/rc.local

  等等程序后,就是开机完毕啦!那个系统就成功的激活啦!而其中激活服务的项目在哪里呢?呵呵!就是在第七步骤,以我为例,通常我都是以文字界面 登入我的系统,文字界面的 run-level 为 3 ,所以这个时候我就可以在 /etc/rc.d/rc3.d 里头找到我的服务的激活项目啦!就是 S 开头的档案!这些相关的概念如果忘记的话,请在前往 开机关机程序 那篇文章去读一读去!那么如果不要激活一些服务的话,很简单呀!就是将该服务的对应档案( 指 S 开头的档案 )删除就可以啦! ^_^""

  但是我要自己一个档案一个档案去删除他吗?!呵呵!当然不需要啦! Red Hat 很细心的写了几支程序来帮你搞定他!那就是:

· ntsysv

· setup

· chkconfig

  这三支程序的使用方式我已经都介绍过了,这里就不再啰唆啰!请前往 好用的系统工具 里头看看吧!

· 系统必备的服务项目:

  请注意呦!不是将『所有的服务都关掉就是安全的!』因为系统还有很多的项目是『一定要激活的!』否则将会反而变的不安全呢!底下列出来一个完全没有对外开放 port 的,但是系统必需要的服务项目,这些项目请『务必』不要关闭了!

 



  没错!不要怀疑!只要这些就可以啦!这几个服务是必须要激活的!至于其它服务则都先不用激活!例如 sendmail 啦!其它林林总总的资料,都先摆着!我们会在后续的章节当中提到如何激活这些服务的啦!

返回首页
------------------------------------------------------------------------------------------------

安全性: 关闭所有对外开放的 port

  在你安装了 Linux 之后呢,相信有很多的朋友会开始想要作一些很炫的服务,例如 WWW 或者是 mail 亦或是 FTP 的服务,但是,这些服务都有潜在性的危险喔,很多的骇客就是利用你开启的这些服务来进行网站的破坏!基本上,比较麻烦的是『特洛伊木马』程序这一类的后门程序,以你的网站做为中继站去攻击骇客想要攻击的目标。所以啰,灌完了 Linux 之后,先将一些不必要的程序或服务移除吧!以保障您的网络安全!其中,更重要的则是将所有的对外的 port 都先关起来!有需要的才开启!好了,利用我们刚刚提到的几个方法将你的对外的 port 都关起来吧!



  这样一来,所有的对外窗口将暂时的全部关闭了!好了,准备要来玩架站啰!一个一个的激活我们的 port 吧! ^_^