鸟哥的Linux私房菜(服务器)- 主机基本安全之一:限制 Linux 对外连线的端口
生活随笔
收集整理的這篇文章主要介紹了
鸟哥的Linux私房菜(服务器)- 主机基本安全之一:限制 Linux 对外连线的端口
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
主機(jī)基本安全之一:限制?Linux?對(duì)外連線的埠口
切換解析度為 800x600 最近更新日期:2006/08/08 本文已不再維護(hù),更新文章請(qǐng)參考這裡
1.?Linux 的埠口 (port)(端口)
1.1?什麼是 port ?
1.2?觀察 port:?netstat,?nmap
2.?port 的啟動(dòng)與關(guān)閉
2.1?stand alone 與 super daemon
2.2?設(shè)定開機(jī)時(shí)啟動(dòng)服務(wù)
2.3?安全性的考量
3.?課後練習(xí)
4.?針對(duì)本文的建議:http://phorum.vbird.org/viewtopic.php?p=112964
Linux 的埠口 (port)
我們?cè)诰W(wǎng)路基礎(chǔ)的通訊協(xié)定那個(gè)小節(jié)曾經(jīng)談到 TCP 封包表頭最重要的就是來(lái)源與目標(biāo)的埠口 (port) 了,若再加上來(lái)源與目標(biāo)的 IP 就可成為一組?Socket pair?,這個(gè) port 就是用在網(wǎng)路連線時(shí)提供連線接口的咚咚囉,在開始這一節(jié)之前,請(qǐng)您先前往網(wǎng)路基礎(chǔ)那一章再瞧一瞧先。 除了這個(gè)之外,還有沒有其他需要注意的事項(xiàng)呢?底下我們就來(lái)談一談先!
什麼是 port
你或許常常會(huì)在網(wǎng)路上聽說(shuō)『我的主機(jī)開了多少的 port ,會(huì)不會(huì)被入侵呀?』 或者是說(shuō)『開那個(gè) port 會(huì)比較安全?又,我的服務(wù)應(yīng)該對(duì)應(yīng)什麼 port 呀?』呵呵!很神奇吧!怎麼一部主機(jī)上面有這麼多的奇怪的 port 呢?
其實(shí)也不怎麼難啦!在網(wǎng)路基礎(chǔ)裡面我們?cè)?jīng)介紹過(guò)很多的網(wǎng)路概念, 所以你會(huì)知道要達(dá)成一條 server/client 的連線,需要一組?Socket pair?來(lái)建立連線, 這也就是說(shuō),網(wǎng)路連線是『雙向』的。 此外,既然我們想要連線到主機(jī)端,那麼主機(jī)勢(shì)必得要啟動(dòng)一個(gè)大家都知道的 port 在『監(jiān)聽』吧, 否則如何達(dá)成連線呢?您說(shuō)是吧!另外, client 端是否要啟用固定的 port 來(lái)連線? 當(dāng)然不需要啊~那共有多少 port 呢?底下我們就先來(lái)談一談。
還有上面提到的一些重點(diǎn)你也得再瞭解一下,那就是:
觀察 port
好了,我們現(xiàn)在知道這個(gè) port 是什麼鬼東西了,再來(lái)就是要去『看他到底在幹啥?』沒錯(cuò)! 再來(lái)就是要來(lái)瞭解一下,我們的主機(jī)到底是開了多少的 port 呢?如同我們前面說(shuō)的, 您得要先瞭解一下,我們的『服務(wù)』跟『 port 』對(duì)應(yīng)的檔案是哪一個(gè)?再提醒一次呦!是『?/etc/services?』啦! 而常用來(lái)觀察 port 的則有底下兩個(gè)程式:
Port 的啟動(dòng)與關(guān)閉
現(xiàn)在你知道其實(shí) port 是由某些程式所啟動(dòng)的,所以要關(guān)閉某些 port 時(shí),那就直接將某個(gè)程式給他關(guān)閉就是了! 那關(guān)閉的方法你當(dāng)然可以使用?kill?,不過(guò),畢竟不是正統(tǒng)的解決之道,因?yàn)?kill 這個(gè)指令通常具有強(qiáng)制關(guān)閉某些程式的功能,但我們想要正常的關(guān)閉該程式啊! 所以,就利用系統(tǒng)給我們的 script 來(lái)關(guān)閉就好了啊。 在此同時(shí),我們就得再來(lái)稍微複習(xí)一下,一般傳統(tǒng)的服務(wù)有哪幾種類型?
stand alone 與 super daemon
我們?cè)邙B哥的 Linux 私房菜 -- 基礎(chǔ)學(xué)習(xí)篇內(nèi)談到, 在一般正常的 Linux 系統(tǒng)環(huán)境下,服務(wù)的啟動(dòng)與管理主要有兩種方式:
透過(guò)上面的這個(gè)分析的流程,你可以利用系統(tǒng)提供的很多方便的工具來(lái)達(dá)成某個(gè)服務(wù)的關(guān)閉! 為啥這麼麻煩?不是利用 kill -9 2030 就可以刪掉該服務(wù)了嗎? 是沒錯(cuò)啦!不過(guò),你知道該服務(wù)是做啥用的嗎?你知道將他關(guān)閉之後,你的系統(tǒng)會(huì)出什麼問(wèn)題嗎? 如果不知道的話,那麼利用上面的流程不就可以找出該服務(wù)套件,再利用 rpm 查詢功能, 不就能夠知道該服務(wù)的作用了?所以說(shuō),這個(gè)方式還是對(duì)您會(huì)有幫助的啦! 底下請(qǐng)您試著將您 CentOS 或者是其他版本的 Linux 的 Telnet 打開試看看。
設(shè)定開機(jī)時(shí)啟動(dòng)服務(wù)
如果剛剛你已經(jīng)利用類似前一節(jié)的方法將一些服務(wù)關(guān)閉了,但是下次再重新開機(jī)後,咦! 怎麼那些被關(guān)閉的服務(wù)又『春風(fēng)吹又生』的給他『長(zhǎng)』出來(lái)了?呵呵~沒錯(cuò)啊, 因?yàn)榍耙还?jié)的作法是可以立即將某個(gè)服務(wù)關(guān)閉,但是卻不會(huì)影響到開機(jī)時(shí)是否會(huì)啟動(dòng)與否的設(shè)定。 唉~傷腦筋~
如果你想要在開機(jī)的時(shí)候就啟動(dòng)或不啟動(dòng)某項(xiàng)服務(wù)時(shí),那就得要瞭解一下?基礎(chǔ)學(xué)習(xí)篇裡面談到的開機(jī)流程管理?的內(nèi)容啦! 在 Unix like 的系統(tǒng)當(dāng)中我們都是透過(guò) run level 來(lái)設(shè)定某些執(zhí)行等級(jí)需要啟動(dòng)的服務(wù), 以 Red Hat 系統(tǒng)來(lái)說(shuō),這些 run level 啟動(dòng)的資料都是放置在?/etc/rc.d/rc[0-6].d/?裡面的,那如何管理該目錄下的 script 呢? 手動(dòng)處理嗎?會(huì)瘋掉的吶!所以你必須要熟悉?chkconfig?或?Red Hat 系統(tǒng)的 ntsysv?這幾個(gè)指令才行!
聰明的你一定會(huì)問(wèn)說(shuō):『鳥哥,你的意思是只要將系統(tǒng)所有的服務(wù)都關(guān)閉,那系統(tǒng)就會(huì)安全囉?』 當(dāng)然....不是!因?yàn)椤?span id="ozvdkddzhkzd" class="text_import2" style="font-size:11pt; font-family:新細(xì)明體,serif; color:rgb(0,0,136)">很多的系統(tǒng)服務(wù)是必須要存在的,否則系統(tǒng)將會(huì)出問(wèn)題』 舉例來(lái)說(shuō),那個(gè)保持系統(tǒng)可以具有工作排程的?crond?服務(wù)就一定要存在,而那個(gè)記錄系統(tǒng)狀況的?syslogd?也當(dāng)然要存在~否則怎知道系統(tǒng)出了啥問(wèn)題? 底下鳥哥列出幾個(gè)常見的必須要存在的系統(tǒng)服務(wù)給大家參考參考先!這些服務(wù)請(qǐng)不要關(guān)閉啊!
沒錯(cuò)!不要懷疑!只要這些就可以啦!這幾個(gè)服務(wù)是必須要啟動(dòng)的! 至於其他服務(wù)則都先不用啟動(dòng)!例如 sendmail 啦!其他林林總總的資料,都先擺著! 我們會(huì)在後續(xù)的章節(jié)當(dāng)中提到如何啟動(dòng)這些服務(wù)的啦!
安全性的考量
我們的 Linux distribution 很好心的幫使用者想到很多了,所以在一安裝完畢之後, 系統(tǒng)會(huì)開啟一堆有的沒有的網(wǎng)路服務(wù),例如那個(gè) portmap 之類的咚咚,以及網(wǎng)路印表機(jī)的 cups 服務(wù)等等, 這些東西你或許知道或許不知道,不過(guò)他就是有開啟~但我們的主機(jī)明明就是用來(lái)做為伺服器的, 所以這些本來(lái)預(yù)計(jì)要給 client 使用的服務(wù)其實(shí)有點(diǎn)『多此一舉』的感覺~ 所以啦,請(qǐng)你將他關(guān)閉吧!就利用 ntsysv 或 chkconfig 來(lái)關(guān)閉他! 只留下前一節(jié)咱們建議的那些服務(wù)就好了~其他的以後再說(shuō)啊!
不過(guò)要記得, ntsysv 及 chkconfig 都是在管理開機(jī)是否啟動(dòng)某些服務(wù)的 script 而已, 所以使用 chkconfig 管理完畢後,請(qǐng)記得最好使用 reboot 來(lái)完整的重新載入這些服務(wù), 然後以『 netstat -tunpl 』來(lái)看看是否有什麼其他的網(wǎng)路服務(wù)在啟動(dòng)啊? 如果有的話,在一樣一樣的將他關(guān)閉吧! ^_^
課後練習(xí)
切換解析度為 800x600 最近更新日期:2006/08/08 本文已不再維護(hù),更新文章請(qǐng)參考這裡
| 為什麼我們的主機(jī)會(huì)回應(yīng)網(wǎng)路上面的一些要求封包呢?例如我們?cè)O(shè)定了一部 WWW 主機(jī)後,當(dāng)有來(lái)自 Internet 的 WWW 要求時(shí),我們的主機(jī)就會(huì)予以回應(yīng),這是因?yàn)槲覀兊闹鳈C(jī)有啟用了 WWW 的監(jiān)聽埠口 (port) 啊!這裡就要特別留意了,當(dāng)我們啟用了一個(gè) daemon 時(shí),就可能會(huì)造成主機(jī)的 Port 在進(jìn)行 Listen 的動(dòng)作,此時(shí)該 daemon 就是已經(jīng)對(duì)網(wǎng)路上面提供服務(wù)了!萬(wàn)一這個(gè) daemon 有漏洞,因?yàn)樗峁?Internet 的服務(wù),所以就容易被 Internet 上面的 cracker 所入侵了!所以說(shuō),仔細(xì)的檢查自己系統(tǒng)上面的 port 到底開了多少個(gè),並且予以嚴(yán)格的管理, 才能夠降低被入侵的可能性啊! |
1.?Linux 的埠口 (port)(端口)
1.1?什麼是 port ?
1.2?觀察 port:?netstat,?nmap
2.?port 的啟動(dòng)與關(guān)閉
2.1?stand alone 與 super daemon
2.2?設(shè)定開機(jī)時(shí)啟動(dòng)服務(wù)
2.3?安全性的考量
3.?課後練習(xí)
4.?針對(duì)本文的建議:http://phorum.vbird.org/viewtopic.php?p=112964
Linux 的埠口 (port)
我們?cè)诰W(wǎng)路基礎(chǔ)的通訊協(xié)定那個(gè)小節(jié)曾經(jīng)談到 TCP 封包表頭最重要的就是來(lái)源與目標(biāo)的埠口 (port) 了,若再加上來(lái)源與目標(biāo)的 IP 就可成為一組?Socket pair?,這個(gè) port 就是用在網(wǎng)路連線時(shí)提供連線接口的咚咚囉,在開始這一節(jié)之前,請(qǐng)您先前往網(wǎng)路基礎(chǔ)那一章再瞧一瞧先。 除了這個(gè)之外,還有沒有其他需要注意的事項(xiàng)呢?底下我們就來(lái)談一談先!
什麼是 port
你或許常常會(huì)在網(wǎng)路上聽說(shuō)『我的主機(jī)開了多少的 port ,會(huì)不會(huì)被入侵呀?』 或者是說(shuō)『開那個(gè) port 會(huì)比較安全?又,我的服務(wù)應(yīng)該對(duì)應(yīng)什麼 port 呀?』呵呵!很神奇吧!怎麼一部主機(jī)上面有這麼多的奇怪的 port 呢?
其實(shí)也不怎麼難啦!在網(wǎng)路基礎(chǔ)裡面我們?cè)?jīng)介紹過(guò)很多的網(wǎng)路概念, 所以你會(huì)知道要達(dá)成一條 server/client 的連線,需要一組?Socket pair?來(lái)建立連線, 這也就是說(shuō),網(wǎng)路連線是『雙向』的。 此外,既然我們想要連線到主機(jī)端,那麼主機(jī)勢(shì)必得要啟動(dòng)一個(gè)大家都知道的 port 在『監(jiān)聽』吧, 否則如何達(dá)成連線呢?您說(shuō)是吧!另外, client 端是否要啟用固定的 port 來(lái)連線? 當(dāng)然不需要啊~那共有多少 port 呢?底下我們就先來(lái)談一談。
- 主機(jī)端的監(jiān)聽 (Listen):
想一想,你要如何連上 Yahoo 的網(wǎng)站去看新聞?首先當(dāng)然是要打開瀏覽器,然後輸入 Yahoo 的網(wǎng)址,之後我們的瀏覽器就會(huì)連接到 Yahoo 的 WWW 網(wǎng)站去要求資料了。既然如此的話,那麼那部 Yahoo 的 WWW 主機(jī)當(dāng)然就得要啟動(dòng) WWW 的服務(wù)啦, 然後我們的瀏覽器才能夠連接到該服務(wù)。這也就是說(shuō)『主機(jī)所啟用的 port 其實(shí)是由某些網(wǎng)路服務(wù) (program) 所啟動(dòng)的』。而為了連接上的方便,因此很多服務(wù)所開啟的 port 是固定的,例如 WWW 開啟在 port 80 ,mail 開啟在 port 25 等等;
- 用戶端的 port:
用戶端啟動(dòng)的 port 是隨機(jī)產(chǎn)生的, 主要是開啟在大於 1024 以上的埠口,這個(gè) port 也是由某些軟體所產(chǎn)生的,例如上面提到的例子, 我們的瀏覽器想要連接到 Yahoo 的 WWW 主機(jī),那麼瀏覽器就得要啟用一個(gè) port 來(lái)與主機(jī)進(jìn)行連線, 以組成一組 Socket pair 來(lái)傳輸資料嘛!
還有上面提到的一些重點(diǎn)你也得再瞭解一下,那就是:
- 共 65536 個(gè) port:
預(yù)設(shè)的情況下,我們的主機(jī)會(huì)有 65536 個(gè) port,而這些 port 又分成兩個(gè)部分,以 port 1024 作區(qū)隔:
- 只有 root 才能啟動(dòng)的保留的 port:
在小於 1023 (連同 1023) 的埠口,都是需要以 root 的身份才能啟動(dòng)的, 這些 port 主要是用於一些常見的通訊服務(wù),在 Linux 系統(tǒng)下,常見的協(xié)定與 port 的對(duì)應(yīng)是記錄在?/etc/services?裡面的。 一般來(lái)說(shuō),這些 port 最好保留給一些預(yù)設(shè)的服務(wù)來(lái)使用,不要自己隨意使用到這些 port, 因?yàn)檫@些 port 是目前 Internet 上面所慣用的,所以一些程式開發(fā)者在進(jìn)行軟體的開發(fā)時(shí), 就能夠針對(duì)這些 well know 的埠口直接來(lái)開發(fā),大家也比較容易使用伺服器的功能啊!
- 大於 1024 用於 client 端的 port:
在大於 1024 以上的 port 主要是作為 client 端的軟體啟動(dòng)的 port 。這些 port 幾乎都是依序隨機(jī)使用的, 例如前面談到的瀏覽器,就是使用大於 1024 以上的 port。那如果用到 port 65535 後, 系統(tǒng)會(huì)主動(dòng)再由前面沒有使用到的埠口 (如 1024) 再重新依序使用。
- 是否需要三向交握:
建立可靠的連線服務(wù)需要使用到 TCP 協(xié)定,也就需要所謂的?三向交握了, 如果是非可靠的連線服務(wù),例如 DNS ,那只要使用 UDP 協(xié)定即可。
- 通訊協(xié)定啟用在非正規(guī)的 port:
我們知道瀏覽器預(yù)設(shè)會(huì)連接到 WWW 主機(jī)的 port 80,那麼你的 WWW 是否可以啟動(dòng)在非 80 的其他埠口? 當(dāng)然可以啊!你可以透過(guò) WWW 軟體的設(shè)定功能將該軟體使用的 port 啟動(dòng)在非正規(guī)的埠口, 只是如此一來(lái),您的用戶端要連接到你的主機(jī)時(shí),就得要在瀏覽器的地方額外指定你所啟用的非正規(guī)的埠口才行。 這個(gè)啟動(dòng)在非正規(guī)的埠口功能,常常被用在一些所謂的地下網(wǎng)站啦!^_^。另外, 某些軟體預(yù)設(shè)就啟動(dòng)在大於 1024 以上的埠口,如 MySQL 資料庫(kù)軟體就啟動(dòng)在 3306。
- 所謂的 port 的安全性:
事實(shí)上,沒有所謂的 port 的安全性!因?yàn)椤篜ort 的啟用是由服務(wù)軟體所造成的』, 也就是說(shuō),真正影響網(wǎng)路安全的並不是 port ,而是啟動(dòng) port 的那個(gè)軟體 (程式)! 或許你偶而會(huì)聽到:『沒有修補(bǔ)過(guò)漏洞的 bind 8.x 版,很容易被黑客所入侵,請(qǐng)盡快升級(jí)到 bind 9.x 以後版本』,所以囉,對(duì)安全真正有危害的是『某些不安全的服務(wù)』 而不是『開了哪些 port 』才是!因此,沒有必要的服務(wù)就將他關(guān)閉吧! 尤其某些網(wǎng)路服務(wù)還會(huì)啟動(dòng)一些 port 哩!另外,那些已啟動(dòng)的軟體也需要持續(xù)的保持更新喔!
觀察 port
好了,我們現(xiàn)在知道這個(gè) port 是什麼鬼東西了,再來(lái)就是要去『看他到底在幹啥?』沒錯(cuò)! 再來(lái)就是要來(lái)瞭解一下,我們的主機(jī)到底是開了多少的 port 呢?如同我們前面說(shuō)的, 您得要先瞭解一下,我們的『服務(wù)』跟『 port 』對(duì)應(yīng)的檔案是哪一個(gè)?再提醒一次呦!是『?/etc/services?』啦! 而常用來(lái)觀察 port 的則有底下兩個(gè)程式:
- netstat:在本機(jī)上面以自己的程式監(jiān)測(cè)自己的 port;
- nmap:透過(guò)網(wǎng)路的偵測(cè)軟體輔助,可偵測(cè)非本機(jī)上的其他網(wǎng)路主機(jī),但有違法之虞。
- netstat
在做為主機(jī)的 Linux 系統(tǒng)中,開啟的網(wǎng)路服務(wù)越少越好! 因?yàn)檩^少的服務(wù)可以較容易除錯(cuò) (debug) 與瞭解安全漏洞,並可避免不必要的入侵管道! 所以,這個(gè)時(shí)候請(qǐng)瞭解一下您的系統(tǒng)當(dāng)中有沒有哪些服務(wù)被開啟了呢? 要瞭解自己的系統(tǒng)當(dāng)中的服務(wù)項(xiàng)目,最簡(jiǎn)便的方法就是使用?netstat?了!這個(gè)東西不但簡(jiǎn)單 (每一部 Linux 機(jī)器當(dāng)中預(yù)設(shè)都會(huì)安裝的程式喔!) ,而且功能也是很不錯(cuò)的。 這個(gè)指令的使用方法在?Linux 常用網(wǎng)路功能指令介紹當(dāng)中提過(guò)了, 底下我們僅提供如何使用這個(gè)工具的方法囉!
列出在監(jiān)聽的網(wǎng)路服務(wù):
列出網(wǎng)路服務(wù)的方式簡(jiǎn)單,如下所示:
上面說(shuō)明了我的主機(jī)有啟動(dòng) port 25, 80, 22 等,而且觀察各連線介面,可發(fā)現(xiàn)這三個(gè) port 都有對(duì)外提供連線的能力喔![root@linux ~]# netstat -tunl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN tcp 0 0 :::80 :::* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 :::25 :::* LISTEN
列出已連線的網(wǎng)路連線狀態(tài):
如果僅是要列出網(wǎng)路介面上已經(jīng)連線的或者是一些連線過(guò)程掛斷、連接程序的網(wǎng)路狀態(tài), 可以使用如下的方式來(lái)處理:
從上面的資料來(lái)看,我的主機(jī) (192.168.10.100) 目前僅有一條已建立的連線, 那就是與 192.168.10.150 那部主機(jī)連接的連線,並且連線方線是由對(duì)方連接到我主機(jī)的 port 22 來(lái)取用我主機(jī)的服務(wù)吶!至於那個(gè) TIME_WAIT 則是在等待該連線掛斷啦![root@linux ~]# netstat -tun Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.10.100:25 192.168.10.5:3151 TIME_WAIT tcp 0 0 192.168.10.100:22 192.168.10.150:1832 ESTABLISHED
刪除已建立或在監(jiān)聽當(dāng)中的連線:
如果想要將已經(jīng)建立,或者是正在監(jiān)聽當(dāng)中的網(wǎng)路服務(wù)關(guān)閉的話,最簡(jiǎn)單的方法當(dāng)然就是找出該連線的 PID, 然後將他 kill 掉即可啊!例如下面的範(fàn)例:
如上面的範(fàn)例,我們可以找出來(lái)該連線是由 sshd 這個(gè)程式來(lái)啟用的,並且他的 PID 是 13247, 希望你不要心急的用?killall?這個(gè)指令,否則容易刪錯(cuò)人 (因?yàn)槟愕闹鳈C(jī)裡面可能會(huì)有多個(gè) sshd 存在), 應(yīng)該要使用?kill?這個(gè)指令才對(duì)喔![root@linux ~]# netstat -tunp Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/P name tcp 0 68 192.168.10.100:22 192.168.10.150:1832 ESTABLISHED 13247/sshd
[root@linux ~]# kill -9 13247
- nmap
如果你要偵測(cè)的設(shè)備並沒有自己的作業(yè)系統(tǒng),舉例來(lái)說(shuō),你想要瞭解一下公司的網(wǎng)路印表機(jī)是否有開放某些協(xié)定時(shí), 那該如何處理啊?現(xiàn)在你知道?netstat?可以用來(lái)查閱本機(jī)上面的許多監(jiān)聽中的通訊協(xié)定, 那例如網(wǎng)路印表機(jī)這樣的非本機(jī)的設(shè)備,要如何查詢啊?呵呵!用 nmap 就對(duì)了!
nmap 的套件說(shuō)明之名稱為:『Network exploration tool and security scanner』,顧名思義, 這個(gè)東西是被系統(tǒng)管理員用來(lái)管理系統(tǒng)安全性查核的工具!他的具體描述當(dāng)中也提到了, nmap 可以經(jīng)由程式內(nèi)部自行定義的幾個(gè) port 對(duì)應(yīng)的指紋資料,來(lái)查出該 port 的服務(wù)為何,所以我們也可以藉此瞭解我們主機(jī)的 port 到底是幹嘛用的!如果您是安裝 Linux 是 Red Hat 系統(tǒng)的話,那麼這個(gè) nmap 套件應(yīng)該已經(jīng)安裝妥當(dāng)了,萬(wàn)一沒有這個(gè)套件的話,也可以來(lái)到底下的網(wǎng)站下載:
- http://insecure.org/nmap/
nmap 的用法很簡(jiǎn)單吶!就直接在指令後面接上 IP 或者是主機(jī)名稱即可。不過(guò),在預(yù)設(shè)的情況下 nmap 僅會(huì)幫你分析 TCP 這個(gè)通訊協(xié)定而已,像上面這個(gè)例子,他只會(huì)幫我列出 4 個(gè)已經(jīng)開啟的 TCP 的埠口號(hào)碼, 但優(yōu)點(diǎn)是順道也將開啟該埠口的服務(wù)也列出來(lái)了,真是好! ^_^!那如果想要同時(shí)分析 TCP/UDP 這兩個(gè)常見的通訊協(xié)定呢?可以這樣做:[root@linux ~]# nmap [掃瞄類型] [掃瞄參數(shù)] [hosts 位址與範(fàn)圍] 參數(shù): [掃瞄類型]:主要的掃瞄類型有底下幾種:-sT:掃瞄 TCP 封包已建立的連線 connect() !-sS:掃瞄 TCP 封包帶有 SYN 標(biāo)籤的資料-sP:以 ping 的方式進(jìn)行掃瞄-sU:以 UDP 的封包格式進(jìn)行掃瞄-sO:以 IP 的協(xié)定 ( protocol ) 進(jìn)行主機(jī)的掃瞄 [掃瞄參數(shù)]:主要的掃瞄參數(shù)有幾種:-PT:使用 TCP 裡頭的 ping 的方式來(lái)進(jìn)行掃瞄,可以獲知目前有幾部電腦存活(較常用)-PI:使用實(shí)際的 ping (帶有 ICMP 封包的) 來(lái)進(jìn)行掃瞄-p :這個(gè)是 port range ,例如 1024-, 80-1023, 30000-60000 等等的使用方式 [Hosts 位址與範(fàn)圍]:這個(gè)有趣多了,有幾種類似的類型192.168.0.100 :直接寫入 HOST IP 而已,僅檢查一部;192.168.0.0/24 :為 C Class 的型態(tài),192.168.*.* :嘿嘿!則變?yōu)?B Class 的型態(tài)了!掃瞄的範(fàn)圍變廣了!192.168.0.0-50,60-100,103,200 :這種是變形的主機(jī)範(fàn)圍啦!很好用吧!範(fàn)例一:使用預(yù)設(shè)參數(shù)掃瞄本機(jī)所啟用的 port [root@linux ~]# nmap localhost PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 139/tcp open netbios-ssn # 在預(yù)設(shè)的情況下, nmap 僅會(huì)掃瞄 TCP 的協(xié)定喔!
嘿嘿!與前面的範(fàn)例比較一下,你會(huì)發(fā)現(xiàn)這次多了兩個(gè) UDP 的埠口,分別是 137 與 138 , 這樣分析好多了吧!然後,如果你想要瞭解一下到底有幾部主機(jī)活在你的網(wǎng)路當(dāng)中時(shí), 則可以這樣做:[root@linux ~]# nmap -sTU localhost 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
看到否?你的環(huán)境當(dāng)中有三部主機(jī)活著吶!並且該 IP 所對(duì)應(yīng)的 MAC 也會(huì)被記錄下來(lái), 很不錯(cuò)吧!如果你還想要將各個(gè)主機(jī)的啟動(dòng)的 port 作一番偵測(cè)的話,那就得要使用:[root@linux ~]# nmap -sP 192.168.10.0/24 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)
之後你就會(huì)看到一堆 port number 被輸出到螢?zāi)簧蠂?#xff5e;如果想要隨時(shí)記錄整個(gè)網(wǎng)段的主機(jī)是否不小心開放了某些服務(wù), 嘿嘿!利用 nmap 配合資料流重導(dǎo)向 (>, >> 等) 來(lái)輸出成為檔案, 那隨時(shí)可以掌握住您區(qū)域網(wǎng)路內(nèi)每部主機(jī)的服務(wù)啟動(dòng)狀況啊! ^_^[root@linux ~]# nmap 192.168.10.0/24
請(qǐng)?zhí)貏e留意,這個(gè) nmap 的功能相當(dāng)?shù)膹?qiáng)大,也是因?yàn)槿绱?#xff0c; 所以很多剛在練習(xí)的黑客會(huì)使用這個(gè)軟體來(lái)偵測(cè)別人的電腦,這個(gè)時(shí)候請(qǐng)您特別留意, 目前很多的人已經(jīng)都有『特別的方式』來(lái)進(jìn)行登錄的工作!例如以?TCP_Wrappers?(/etc/hosts.allow, /etc/hosts.deny) 的功能來(lái)記錄曾經(jīng)偵測(cè)過(guò)該 port 的 IP! 這個(gè)軟體用來(lái)『偵測(cè)自己機(jī)器的安全性』是很不錯(cuò)的一個(gè)工具,但是如果用來(lái)偵測(cè)別人的主機(jī), 可是會(huì)『吃上官司』的!特別留意!!
Port 的啟動(dòng)與關(guān)閉
現(xiàn)在你知道其實(shí) port 是由某些程式所啟動(dòng)的,所以要關(guān)閉某些 port 時(shí),那就直接將某個(gè)程式給他關(guān)閉就是了! 那關(guān)閉的方法你當(dāng)然可以使用?kill?,不過(guò),畢竟不是正統(tǒng)的解決之道,因?yàn)?kill 這個(gè)指令通常具有強(qiáng)制關(guān)閉某些程式的功能,但我們想要正常的關(guān)閉該程式啊! 所以,就利用系統(tǒng)給我們的 script 來(lái)關(guān)閉就好了啊。 在此同時(shí),我們就得再來(lái)稍微複習(xí)一下,一般傳統(tǒng)的服務(wù)有哪幾種類型?
stand alone 與 super daemon
我們?cè)邙B哥的 Linux 私房菜 -- 基礎(chǔ)學(xué)習(xí)篇內(nèi)談到, 在一般正常的 Linux 系統(tǒng)環(huán)境下,服務(wù)的啟動(dòng)與管理主要有兩種方式:
- stand alone
顧名思義,stand alone 就是直接執(zhí)行該服務(wù)的執(zhí)行檔,讓該執(zhí)行檔直接載入到記憶體當(dāng)中運(yùn)作, 用這種方式來(lái)啟動(dòng)可以讓該服務(wù)具有較快速回應(yīng)的優(yōu)點(diǎn)。一般來(lái)說(shuō),這種服務(wù)的啟動(dòng) script 都會(huì)放置到?/etc/init.d/?這個(gè)目錄底下,所以你通常可以使用:『 /etc/init.d/sshd restart 』之類的方式來(lái)啟動(dòng)這種服務(wù);
- Super daemon
用一個(gè)超級(jí)服務(wù)作為總管,以管理一些網(wǎng)路服務(wù)。在 CentOS 4.x 裡面使用的則是 xinetd 這個(gè) super daemon 啊!這種方式啟動(dòng)的網(wǎng)路服務(wù)雖然在回應(yīng)上速度會(huì)比較慢, 不過(guò),可以透過(guò) super daemon 額外提供一些控管,例如控制何時(shí)啟動(dòng)、何時(shí)可以進(jìn)行連線、 那個(gè) IP 可以連進(jìn)來(lái)、是否允許同時(shí)連線等等。通常設(shè)定檔放置在?/etc/xinetd.d/?當(dāng)中,但設(shè)定完畢後需要重新以『 /etc/init.d/xinetd restart 』重新來(lái)啟動(dòng)才行!
| [root@linux ~]# netstat -tnlp 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 2030/master tcp 0 0 :::22 :::* LISTEN 1961/sshd # 咦!怎麼會(huì)是 master 這個(gè)玩意兒?用 which 這個(gè)指令還找不到這個(gè) master # 那怎辦?沒關(guān)係,我們可以透過(guò) locate 配合正規(guī)表示法找到這個(gè)指令的![root@linux ~]# locate master | grep '/master$' /usr/libexec/postfix/master # 嘿嘿!那個(gè)正規(guī)表示法就可以找到上述的輸出結(jié)果,然後再由 rpm 來(lái)處理![root@linux ~]# rpm -qf /usr/libexec/postfix/master postfix-2.2.2-2 # 找到了!就是這個(gè)套件!所以將他關(guān)閉的方法可能就是:[root@linux ~]# rpm -qc postfix | grep init /etc/rc.d/init.d/postfix [root@linux ~]# /etc/init.d/postfix stop |
| 例題:我們知道系統(tǒng)的 Telnet 服務(wù)通常是以 super daemon 來(lái)控管的,請(qǐng)您啟動(dòng)您系統(tǒng)的 telnet 試看看。 答: |
設(shè)定開機(jī)時(shí)啟動(dòng)服務(wù)
如果剛剛你已經(jīng)利用類似前一節(jié)的方法將一些服務(wù)關(guān)閉了,但是下次再重新開機(jī)後,咦! 怎麼那些被關(guān)閉的服務(wù)又『春風(fēng)吹又生』的給他『長(zhǎng)』出來(lái)了?呵呵~沒錯(cuò)啊, 因?yàn)榍耙还?jié)的作法是可以立即將某個(gè)服務(wù)關(guān)閉,但是卻不會(huì)影響到開機(jī)時(shí)是否會(huì)啟動(dòng)與否的設(shè)定。 唉~傷腦筋~
如果你想要在開機(jī)的時(shí)候就啟動(dòng)或不啟動(dòng)某項(xiàng)服務(wù)時(shí),那就得要瞭解一下?基礎(chǔ)學(xué)習(xí)篇裡面談到的開機(jī)流程管理?的內(nèi)容啦! 在 Unix like 的系統(tǒng)當(dāng)中我們都是透過(guò) run level 來(lái)設(shè)定某些執(zhí)行等級(jí)需要啟動(dòng)的服務(wù), 以 Red Hat 系統(tǒng)來(lái)說(shuō),這些 run level 啟動(dòng)的資料都是放置在?/etc/rc.d/rc[0-6].d/?裡面的,那如何管理該目錄下的 script 呢? 手動(dòng)處理嗎?會(huì)瘋掉的吶!所以你必須要熟悉?chkconfig?或?Red Hat 系統(tǒng)的 ntsysv?這幾個(gè)指令才行!
| Tips: 這幾個(gè)指令不熟嗎?這個(gè)時(shí)候鳥哥不得不說(shuō)了:『有 man 堪用直需用,莫待無(wú) man 空自猜』趕緊給他 man 下去啦! |
| 例題:(1)如何查閱 portmap 這個(gè)程式一開機(jī)就執(zhí)行? (2)如果開機(jī)就執(zhí)行,如何將他改為開機(jī)時(shí)不要啟動(dòng)? (3)如何立即關(guān)閉這個(gè) portmap 服務(wù)? 答: |
聰明的你一定會(huì)問(wèn)說(shuō):『鳥哥,你的意思是只要將系統(tǒng)所有的服務(wù)都關(guān)閉,那系統(tǒng)就會(huì)安全囉?』 當(dāng)然....不是!因?yàn)椤?span id="ozvdkddzhkzd" class="text_import2" style="font-size:11pt; font-family:新細(xì)明體,serif; color:rgb(0,0,136)">很多的系統(tǒng)服務(wù)是必須要存在的,否則系統(tǒng)將會(huì)出問(wèn)題』 舉例來(lái)說(shuō),那個(gè)保持系統(tǒng)可以具有工作排程的?crond?服務(wù)就一定要存在,而那個(gè)記錄系統(tǒng)狀況的?syslogd?也當(dāng)然要存在~否則怎知道系統(tǒng)出了啥問(wèn)題? 底下鳥哥列出幾個(gè)常見的必須要存在的系統(tǒng)服務(wù)給大家參考參考先!這些服務(wù)請(qǐng)不要關(guān)閉啊!
| 服務(wù)名稱 | 服務(wù)內(nèi)容 |
| acpid | 新版的電源管理模組,通常建議開啟,不過(guò),某些筆記型電腦可能不支援此項(xiàng)服務(wù),那就得關(guān)閉 |
| atd | 在管理單一預(yù)約命令執(zhí)行的服務(wù),應(yīng)該要啟動(dòng)的 |
| crond | 在管理工作排程的重要服務(wù),請(qǐng)務(wù)必要啟動(dòng)啊! |
| iptables | Linux 內(nèi)建的防火牆軟體,這個(gè)也可以啟動(dòng)啦! |
| keytables | 如果你的鍵盤非正規(guī)的格式時(shí),這個(gè)服務(wù)的啟動(dòng)或許可以幫助你喔! |
| network | 這個(gè)重要了吧?要網(wǎng)路就要有他啊! |
| sshd | 這是系統(tǒng)預(yù)設(shè)會(huì)啟動(dòng)的,可以讓你在遠(yuǎn)端以文字型態(tài)的終端機(jī)登入喔! |
| syslog | 系統(tǒng)的登錄檔記錄,很重要的,務(wù)必啟動(dòng)啊! |
| xinetd | 就是那個(gè) super daemon 嘛!所以也要啟動(dòng)啦! |
| xfs | 用來(lái)管理 X Window 字形資料的服務(wù),如果你會(huì)需要 X Window 時(shí),這個(gè)服務(wù)要啟動(dòng)。 |
沒錯(cuò)!不要懷疑!只要這些就可以啦!這幾個(gè)服務(wù)是必須要啟動(dòng)的! 至於其他服務(wù)則都先不用啟動(dòng)!例如 sendmail 啦!其他林林總總的資料,都先擺著! 我們會(huì)在後續(xù)的章節(jié)當(dāng)中提到如何啟動(dòng)這些服務(wù)的啦!
安全性的考量
我們的 Linux distribution 很好心的幫使用者想到很多了,所以在一安裝完畢之後, 系統(tǒng)會(huì)開啟一堆有的沒有的網(wǎng)路服務(wù),例如那個(gè) portmap 之類的咚咚,以及網(wǎng)路印表機(jī)的 cups 服務(wù)等等, 這些東西你或許知道或許不知道,不過(guò)他就是有開啟~但我們的主機(jī)明明就是用來(lái)做為伺服器的, 所以這些本來(lái)預(yù)計(jì)要給 client 使用的服務(wù)其實(shí)有點(diǎn)『多此一舉』的感覺~ 所以啦,請(qǐng)你將他關(guān)閉吧!就利用 ntsysv 或 chkconfig 來(lái)關(guān)閉他! 只留下前一節(jié)咱們建議的那些服務(wù)就好了~其他的以後再說(shuō)啊!
不過(guò)要記得, ntsysv 及 chkconfig 都是在管理開機(jī)是否啟動(dòng)某些服務(wù)的 script 而已, 所以使用 chkconfig 管理完畢後,請(qǐng)記得最好使用 reboot 來(lái)完整的重新載入這些服務(wù), 然後以『 netstat -tunpl 』來(lái)看看是否有什麼其他的網(wǎng)路服務(wù)在啟動(dòng)啊? 如果有的話,在一樣一樣的將他關(guān)閉吧! ^_^
課後練習(xí)
- 如何觀察您 Linux 主機(jī)上面已經(jīng)有多少 port 被打開了? 1. 如果是 Linux 這個(gè)作業(yè)系統(tǒng)上面的話,可以利用『 netstat -tunlp 』觀察已經(jīng)在監(jiān)聽的 port 與服務(wù)的對(duì)應(yīng);
2. 如果是想要查閱所有的 port (包含已建立的連線),可以使用『 netstat -tunp 』來(lái)查閱;
3. 如果不在 Linux 本機(jī)上,可以用『 nmap IP 』來(lái)處理啊! - 如何觀察程序? 利用『 ps -aux 』或『 top 』都可以,另外,『 pstree -p 』則可以瞭解所有的程序相依性,而『 lsof 』 則可以察看所有程序所開的檔案喔!
- 請(qǐng)問(wèn) LISTEN 的 port 與 daemon 的關(guān)係為何? 正在 LISTEN 當(dāng)中的埠口均是由某些服務(wù)(daemons)所啟動(dòng)的,所以要啟動(dòng)埠口就得啟用某個(gè)服務(wù), 要瞭解某個(gè)埠口是由那個(gè) daemon 所啟動(dòng)的,就利用 netstat -tulp 來(lái)查閱。
- 請(qǐng)問(wèn) stand alone 與 super daemon 各是什麼? Linux 系統(tǒng)的服務(wù)有獨(dú)立啟動(dòng)(stand alone)及超級(jí)服務(wù)員(super daemon)兩種啟動(dòng)的方式。掛在 super daemon 底下的服務(wù)可以經(jīng)由 super daemon 的控管,以加強(qiáng)一些安全功能,不過(guò)由於還要經(jīng)過(guò) super daemon 的管理,所以服務(wù)的連接速度上會(huì)比 stand alone 慢一點(diǎn)。
- 請(qǐng)問(wèn)您的 Linux 主機(jī) (不論是那個(gè) distributions ) 有關(guān) daemon 啟動(dòng)與關(guān)閉的 scripts 與檔案放置在那個(gè)目錄下? 各個(gè) daemons 的啟動(dòng)與關(guān)閉的 scripts 是放置在 /etc/init.d/ 內(nèi), Red Hat 系統(tǒng)則是放到 /etc/rc.d/init.d 裡面,至於 super daemon 的控管參數(shù)檔案則在 /etc/xinetd.d 裡面!
- 為什麼阻斷式服務(wù) (DDoS) 會(huì)造成系統(tǒng)的當(dāng)機(jī)與網(wǎng)路癱瘓?試由三向交握的角度來(lái)探討。
總結(jié)
以上是生活随笔為你收集整理的鸟哥的Linux私房菜(服务器)- 主机基本安全之一:限制 Linux 对外连线的端口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 鸟哥的Linux私房菜(服务器)- 架站
- 下一篇: 鸟哥的Linux私房菜(服务器)- 主机