最近更新日期: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 ![]()
我們在網路基礎的通訊協定那個小節曾經談到 TCP
封包表頭最重要的就是來源與目標的埠口 (port) 了,若再加上來源與目標的 IP 就可成為一組
Socket pair ,這個 port
就是用在網路連線時提供連線接口的咚咚囉,在開始這一節之前,請您先前往網路基礎那一章再瞧一瞧先。
除了這個之外,還有沒有其他需要注意的事項呢?底下我們就來談一談先!
![]()
你或許常常會在網路上聽說『我的主機開了多少的 port ,會不會被入侵呀?』
或者是說『開那個 port 會比較安全?又,我的服務應該對應什麼 port
呀?』呵呵!很神奇吧!怎麼一部主機上面有這麼多的奇怪的 port 呢?
其實也不怎麼難啦!在網路基礎裡面我們曾經介紹過很多的網路概念, 所以你會知道要達成一條 server/client 的連線,需要一組 Socket pair 來建立連線, 這也就是說,網路連線是『雙向』的。 此外,既然我們想要連線到主機端,那麼主機勢必得要啟動一個大家都知道的 port 在『監聽』吧, 否則如何達成連線呢?您說是吧!另外, client 端是否要啟用固定的 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
時,那就直接將某個程式給他關閉就是了!
那關閉的方法你當然可以使用 kill
,不過,畢竟不是正統的解決之道,因為 kill
這個指令通常具有強制關閉某些程式的功能,但我們想要正常的關閉該程式啊!
所以,就利用系統給我們的 script 來關閉就好了啊。
在此同時,我們就得再來稍微複習一下,一般傳統的服務有哪幾種類型?
![]()
我們在鳥哥的 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以來統計人數 |
||||||||||||||||||||||||||||||||||||||