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