📄 0210port_limit.htm
字号:
[扫瞄类型]∶主要的扫瞄类型有底下几种∶
-sT∶扫瞄 TCP 封包已建立的连线 connect() !
-sS∶扫瞄 TCP 封包带有 SYN 标签的资料
-sP∶以 ping 的方式进行扫瞄
-sU∶以 UDP 的封包格式进行扫瞄
-sO∶以 IP 的协定 ( protocol ) 进行主机的扫瞄
[扫瞄参数]∶主要的扫瞄参数有几种∶
-PT∶使用 TCP 里头的 ping 的方式来进行扫瞄,可以获知目前有几部电脑存活(较常用)
-PI∶使用实际的 ping (带有 ICMP 封包的) 来进行扫瞄
-p ∶这个是 port range ,例如 1024-, 80-1023, 30000-60000 等等的使用方式
[Hosts 位址与范围]∶这个有趣多了,有几种类似的类型
192.168.0.100 ∶直接写入 HOST IP 而已,仅检查一部;
192.168.0.0/24 ∶为 C Class 的型态,
192.168.*.* ∶嘿嘿!则变为 B Class 的型态了!扫瞄的范围变广了!
192.168.0.0-50,60-100,103,200 ∶这种是变形的主机范围啦!很好用吧!</span>
<span class=term_hd>范例一∶使用预设参数扫瞄本机所启用的 port</span>
[root@linux ~]# <span class=term_command>nmap localhost</span>
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
139/tcp open netbios-ssn
<span class=term_say># 在预设的情况下, nmap 仅会扫瞄 TCP 的协定喔!</span>
</pre></td></tr></table>
nmap 的用法很简单呐!就直接在指令后面接上 IP 或者是主机名称即可。不过,在预设的情况下 nmap
仅会帮你分析 TCP 这个通讯协定而已,像上面这个例子,他只会帮我列出 4 个已经开启的 TCP 的埠口号码,
但优点是顺道也将开启该埠口的服务也列出来了,真是好! ^_^!那如果想要同时分析
TCP/UDP 这两个常见的通讯协定呢?可以这样做∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>nmap -sTU localhost</span>
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
137/udp open|filtered netbios-ns
138/udp open|filtered netbios-dgm
139/tcp open netbios-ssn
</pre></td></tr></table>
嘿嘿!与前面的范例比较一下,你会发现这次多了两个 UDP 的埠口,分别是 137 与 138 ,
这样分析好多了吧!然后,如果你想要了解一下到底有几部主机活在你的网路当中时,
则可以这样做∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>nmap -sP 192.168.10.0/24</span>
Host 192.168.10.171 appears to be up.
MAC Address: 00:01:E6:B3:AA:CC (Hewlett-Packard Company)
Host 192.168.10.174 appears to be up.
MAC Address: 00:04:75:FF:CC:DD (3 Com)
Host 192.168.10.175 appears to be up.
MAC Address: 00:0C:6E:BA:11:22 (Asustek Computer)
</pre></td></tr></table>
看到否?你的环境当中有三部主机活著呐!并且该 IP 所对应的 MAC 也会被记录下来,
很不错吧!如果你还想要将各个主机的启动的 port 作一番侦测的话,那就得要使用∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>nmap 192.168.10.0/24</span>
</pre></td></tr></table>
之后你就会看到一堆 port number 被输出到萤幕上棉~如果想要随时记录整个网段的主机是否不小心开放了某些服务,
嘿嘿!利用 nmap 配合资料流重导向 (>, >> 等) 来输出成为档案,
那随时可以掌握住您区域网路内每部主机的服务启动状况啊! ^_^<br /><br />
请特别留意,这个 nmap 的功能相当的强大,也是因为如此,
所以很多刚在练习的黑客会使用这个软体来侦测别人的电脑,这个时候请您特别留意,
目前很多的人已经都有『特别的方式』来进行登录的工作!例如以
<a href="0250simple_firewall.php#TCP_Wrappers">TCP_Wrappers</a>
(/etc/hosts.allow, /etc/hosts.deny) 的功能来记录曾经侦测过该 port 的 IP!
这个软体用来『侦测自己机器的安全性』是很不错的一个工具,但是如果用来侦测别人的主机,
可是会『吃上官司』的!特别留意!!
</div>
</div>
</div>
<hr /><a NAME="daemon"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">Port 的启动与关闭</span><br />
<div class=block1>
现在你知道<span class=text_import2>其实 port 是由某些程式所启动的,所以要关闭某些 port
时,那就直接将某个程式给他关闭就是了</span>!
那关闭的方法你当然可以使用 <a href="../linux_basic/0440processcontrol.php#kill">kill</a>
,不过,毕竟不是正统的解决之道,因为 kill
这个指令通常具有强制关闭某些程式的功能,但我们想要正常的关闭该程式啊!
所以,就利用系统给我们的 script 来关闭就好了啊。
在此同时,我们就得再来稍微复习一下,一般传统的服务有哪几种类型?<br /><br />
<hr /><a NAME="daemon_what"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">stand alone 与 super daemon</span><br />
<div class=block2>
我们在<a href="../linux_basic">鸟哥的 Linux 私房菜 -- 基础学习篇</a>内谈到,
在一般正常的 Linux 系统环境下,服务的启动与管理主要有两种方式∶<br />
<ul>
<li><span class=text_import1>stand alone</span><br />
顾名思义,stand alone 就是直接执行该服务的执行档,让该执行档直接载入到记忆体当中运作,
用这种方式来启动可以让该服务具有较快速回应的优点。一般来说,这种服务的启动 script 都会放置到
<span class=text_import2>/etc/init.d/</span> 这个目录底下,所以你通常可以使用∶『
/etc/init.d/sshd restart 』之类的方式来启动这种服务;<br /><br /></li>
<li><span class=text_import1>Super daemon</span><br />
用一个超级服务作为总管,以管理一些网路服务。在 CentOS 4.x 里面使用的则是 xinetd 这个
super daemon 啊!这种方式启动的网路服务虽然在回应上速度会比较慢,
不过,可以透过 super daemon 额外提供一些控管,例如控制何时启动、何时可以进行连线、
那个 IP 可以连进来、是否允许同时连线等等。通常设定档放置在
<span class=text_import2>/etc/xinetd.d/</span> 当中,但设定完毕后需要重新以『
/etc/init.d/xinetd restart 』重新来启动才行!</ul>
关于更详细的服务说明,请参考基础篇的 <a href="../linux_basic/0560daemons.php">认识服务</a> 一文,
鸟哥在这里不再赘述。好,那么如果我想要将我系统上面的 port 25 关掉的话,
那应该如何关闭呢?最简单的作法就是先找出那个 port 25 的启动程式喔!<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>netstat -tnlp</span>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN <span class=term_write>2030/master</span>
tcp 0 0 :::22 :::* LISTEN 1961/sshd
<span class=term_say># 咦!怎么会是 master 这个玩意儿?用 which 这个指令还找不到这个 master
# 那怎办?没关系,我们可以透过 locate 配合正规表示法找到这个指令的!</span>
[root@linux ~]# <span class=term_command>locate master | grep '/master$'</span>
/usr/libexec/postfix/<span class=term_write>master</span>
<span class=term_say># 嘿嘿!那个正规表示法就可以找到上述的输出结果,然后再由 rpm 来处理!</span>
[root@linux ~]# <span class=term_command>rpm -qf /usr/libexec/postfix/master</span>
postfix-2.2.2-2
<span class=term_say># 找到了!就是这个套件!所以将他关闭的方法可能就是∶</span>
[root@linux ~]# <span class=term_command>rpm -qc postfix | grep init</span>
/etc/rc.d/init.d/postfix
[root@linux ~]# <span class=term_command>/etc/init.d/postfix stop</span>
</pre></td></tr></table>
透过上面的这个分析的流程,你可以利用系统提供的很多方便的工具来达成某个服务的关闭!
为啥这么麻烦?不是利用 kill -9 2030 就可以删掉该服务了吗?
是没错啦!不过,你知道该服务是做啥用的吗?你知道将他关闭之后,你的系统会出什么问题吗?
如果不知道的话,那么利用上面的流程不就可以找出该服务套件,再利用 rpm 查询功能,
不就能够知道该服务的作用了?所以说,这个方式还是对您会有帮助的啦!
底下请您试著将您 CentOS 或者是其他版本的 Linux 的 Telnet 打开试看看。<br /><br />
<table border=1 width=90% cellspacing=0 cellpadding=5><tr><td>
例题∶我们知道系统的 Telnet 服务通常是以 super daemon 来控管的,请您启动您系统的 telnet 试看看。<br /><br />
答∶<ol>
<li>要启动 telnet 首先必须要已经安装了 telnet 的伺服器才行,所以请先以 rpm 查询看看是否有安装 telnet-server 呢?
『rpm -qa | grep telnet-server』如果没有安装的话,请利用原版光碟来安装,或者使用『yum install telnet-server』
安装一下先;
<li>由于是 super daemon 控管,所以请编辑 /etc/xinetd.d/telnet 这个档案,将其中的『disable = yes』改成
『disable = no』之后以『/etc/init.d/xinetd restart』重新启动 super daemon 吧!
<li>利用 netstat -tnlp 察看是否有启动 port 23 呢?
</ol>
</td></tr></table><br />
</div>
<hr /><a NAME="daemon_boot"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">设定开机时启动服务</span><br />
<div class=block2>
如果刚刚你已经利用类似前一节的方法将一些服务关闭了,但是下次再重新开机后,咦!
怎么那些被关闭的服务又『春风吹又生』的给他『长』出来了?呵呵~没错啊,
因为前一节的作法是可以立即将某个服务关闭,但是却不会影响到开机时是否会启动与否的设定。
唉~伤脑筋~<br /><br />
如果你想要在开机的时候就启动或不启动某项服务时,那就得要了解一下
<a href="../linux_basic/0510osloader.php">基础学习篇里面谈到的开机流程管理</a> 的内容啦!
在 Unix like 的系统当中我们都是透过 run level 来设定某些执行等级需要启动的服务,
以 Red Hat 系统来说,这些 run level 启动的资料都是放置在
<span class=text_import2>/etc/rc.d/rc[0-6].d/</span> 里面的,那如何管理该目录下的 script 呢?
手动处理吗?会疯掉的呐!所以你必须要熟悉
<a href="../linux_basic/0560daemons.php#chkconfig">chkconfig</a> 或
<a href="../linux_basic/0560daemons.php#ntsysv">Red Hat 系统的 ntsysv</a> 这几个指令才行!<br />
<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen"> 这几个指令不熟吗?这个时候鸟哥不得不说了∶『有 man 堪用直需用,莫待无 man 空自猜』赶紧给他 man 下去啦!
</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>
<table border=1 width=90% cellspacing=0 cellpadding=5><tr><td>
例题∶(1)如何查阅 portmap 这个程式一开机就执行? (2)如果开机就执行,如何将他改为开机时不要启动?
(3)如何立即关闭这个 portmap 服务?<br /><br />
答∶<ol>
<li>可以透过『 chkconfig --list | grep portmap 』与『 runlevel 』确认一下你的环境与 portmap 是否启动?
<li>如果有启动,可透过『 chkconfig --level 35 portmap off 』来设定开机时不要启动;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -