最近更新日期: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.php?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:將舊的文章移動到 此處 2002/08/02以來統計人數 |
||||||||||||||||||||||||||||||||||||||