使用 netstat 使用 nmap 套件,如何觀察埠口,使用 netstat 指令,使用 nmap 套件:注意安全
如何關閉或啟動一個埠口,設定開機時啟動服務的方法,安全性: 關閉所有對外開放的 port
如何觀察埠口:
好了,我們現在知道這個 port 是什麼鬼東西了,再來就是要去『看他到底在幹啥?』對吧!沒錯!再來就是要來瞭解一下,我們的主機到底是開了多少的 port 呢?如同我們前面說的,您得要先瞭解一下,我們的『服務』跟『 port 』對應的檔案是哪一個?再提醒一次呦!是『 /etc/services 』 啦!好了,那麼常見的 port 對應的服務有哪些呢?大概有這些啦!
服務名稱 port 號 常見套件名稱 建議
==================================================================================
ftp 21 Wu-ftp, proftp 不要開放他!
telnet 23 telnet 不要開放他!
smtp 25 sendmail, postfix 除非必要,不然不要啟動!
http 80 apache 除非必要,不然不要啟動!
pop3 110 imap 除非是 mail 主機,不然不要開放
netbios-ssn 139 SAMBA 除非必要,不然不要啟動!
squid 3128 squid 除非必要,不然不要啟動!
mysql 3306 MySQL 除非必要,不然不要啟動!
當然還不只這些哩,更詳細的資訊您應該到您的 Linux 主機之下的 /etc/services 這個檔案去看仔細!好了,那麼接下來就是要來察看我們主機的 port 囉!如何察看呢?底下我們介紹兩個最常使用的觀測指令:
netstst : 在本機上面以自己的程式監測自己的 port ,無危險;
nmap : 在本機上面,以特殊的偵測程式偵測自己,可能會有違法之虞。
見他的大頭王!怎麼使用 nmap 會違法?呵呵!別擔心,由於 nmap 的功能太強大了,所以很多 cracker ( 怪客,網路上面的閒人 ) 會直接以他來偵測別人的主機,這個時候就可能造成違法啦!只要您使用 nmap 的時候不要去偵測別人的電腦主機,那麼就不會有問題啦! ^_^"" 底下我們分別來說一說這兩個寶貝吧!
--------------------------------------------------------------------------------
使用 netstat 指令:
如前所述,在做為主機的 Linux 系統中,服務項目是越少越好!這樣可以避免不必要的入侵管道喔!因此,這個時候請瞭解一下您的系統當中,有沒有哪些服務被開啟了呢?要瞭解自己的系統當中的服務項目,最簡便的方法就是使用 netstat 了!這個東西不但簡單 ( 每一部 Linux 機器當中預設都會安裝的套件喔! ) ,而且功能也是很不錯的。這個指令的使用方法在 Linux 常用網路功能指令介紹當中提過了,底下我們僅提供如何使用這個工具的方法囉!
[root@test root]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 20 192.168.1.2:ssh 192.168.1.11:1391 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 10 [ ] DGRAM 768 /dev/log
unix 2 [ ] DGRAM 304058
unix 2 [ ] DGRAM 303994
unix 2 [ ] DGRAM 303972
unix 2 [ ] DGRAM 70794
unix 2 [ ] DGRAM 70743
unix 2 [ ] DGRAM 27533
unix 2 [ ] DGRAM 895
unix 2 [ ] DGRAM 785
如上所示,單純使用 netstat 的時候,僅『列出目前已經接通的服務項目與服務名稱』所以您可以看到,由於目前僅有一個 ssh 的連線建立成功,所以就只有顯示出一個 ESTABLISHED ( 連線中的意思 ) 的項目。上面第三行以 tcp 開頭的那一行,表示『有一個 ssh 的服務開啟通道連線中,是由遠端 client 的 192.168.1.11 這個 IP 連接到 192.168.1.2 的主機上面的這個 IP ,而 Client 端連線的通道是以 1391 這個通道連接進入 ssh 的服務中的!』。這裡這個 ssh 所顯示的服務名稱就是在 /etc/services 裡面記載的囉!那如果我需要將所有的項目都列出來呢?例如說:有哪些 port 目前正在監聽呢?!
[root@test root]# netstat -a
AActive Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:pop3 *:* LISTEN
tcp 0 0 *:imap *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 20 192.168.1.2:ssh 192.168.1.11:1391 ESTABLISHED
udp 0 0 *:1238 *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 10 [ ] DGRAM 768 /dev/log
unix 2 [ ] DGRAM 304058
unix 2 [ ] DGRAM 303994
unix 2 [ ] DGRAM 303972
unix 2 [ ] DGRAM 70794
unix 2 [ ] DGRAM 70743
unix 2 [ ] DGRAM 27533
unix 2 [ ] DGRAM 895
unix 2 [ ] DGRAM 785
如上所示,加入 -a ( all )就是說將所有在機器上所有的 port 的狀態列出的意思,不過,服務的名稱已經使用 /etc/services 裡面的名稱了,而不是使用 port 的數字!如上所示,目前我主機上面的服務共開啟了:『 pop3、imap、ftp、ssh、smtp 』等服務 (就是在 tcp 封包裡頭的具有 LISTEN 的那幾個咚咚囉!) 至於已經建立的服務就只有 ssh 這一個囉!那如果我想要知道 port 的號碼呢?呵呵,就使用底下的指令吧!
[root@test root]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 20 192.168.1.2:22 192.168.1.11:1391 ESTABLISHED
udp 0 0 0.0.0.0:1238 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 10 [ ] DGRAM 768 /dev/log
unix 2 [ ] DGRAM 304058
unix 2 [ ] DGRAM 303994
unix 2 [ ] DGRAM 303972
unix 2 [ ] DGRAM 70794
unix 2 [ ] DGRAM 70743
unix 2 [ ] DGRAM 27533
unix 2 [ ] DGRAM 895
unix 2 [ ] DGRAM 785
如上所示,我接通的服務通道只有 22 這一個,而其他的您可以參照上面的指令輸出結果來對照,所以您就可以知道囉:pop3 為 110 而 imap 為 143 呵呵!就是這樣囉!因此,透過此一指令,就可以輕易的瞭解目前主機的運作狀況與服務狀態囉!當然囉, netstat 的用途不止於此,您可以使用 man netstat 來查閱一番喔!相信對您的主機會有更大的瞭解呦!
相信有不少的朋友都會有這個困擾,就是要怎樣刪除已經建立的連線呢?因為總有些不速之客會連到您的主機來進行一些破壞的工作!或者是您根本不想讓對方連線過來!呵呵!還記得 鳥哥的 Linux 私房菜--基礎學習篇內的資源管理 裡面提到的幾個常用的指令吧!?那就是找出那個連線程序的 PID ,然後給他 kill 掉就是了!簡單呀!不過,大問題是『我要怎樣找出連線的 PID 呀!?』呵呵!由於 PID 的管理與整體的系統資源有關,這個時候,雖然可以使用 netstat 來觀察 PID ,不過只有 root 可以觀察到連線狀態的 PID 號碼呦!( 註:還記得資源管理提及的 PID 概念嗎?就是說,在 Linux 系統之內,每個『程序』系統都會給予一個號碼來管理!這個就是 PID 囉!)
[root@test root]# netstat -ap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ssh *:* LISTEN 32149/sshd
tcp 0 284 140.116.141.19:ssh 192.168.1.11:1391 ESTABLISHED 24751/sshd
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 7 [ ] DGRAM 944 509/syslogd /dev/log
unix 2 [ ] DGRAM 3035915 16648/xinetd
unix 2 [ ] DGRAM 739227 5951/pppoe
unix 2 [ ] DGRAM 739189 5949/pppd
unix 2 [ ] DGRAM 1070 628/crond
unix 2 [ ] DGRAM 953 514/klogd
unix 2 [ ] STREAM CONNECTED 690 1/init [3]
看到上面那個斜體字的連線建立的網路狀態了嗎?嘿嘿!最後面一欄就是顯示那個 PID/Program name ,那個 PID ( 上面是 24751 )也就是我們要來砍掉的啦!這個時候,如果要將該連線砍掉時,就直接以 kill 來做吧!
[root@test root]# kill -9 24751
這樣就能將該連線給他『踢出去』您的主機啦!! ^_^""
--------------------------------------------------------------------------------
使用 nmap 套件:注意安全!
在本機上面觀察 port 最好是使用 netstat 啦!因為他安全又可靠!但是,由於可能有某些 port 會尋找不到,或者不曉得那些 port 是幹嘛用的,尤其是 /etc/services 裡頭沒有提到的幾個 port 對應的服務!這個時候怎麼辦?!沒關係,不要緊,我們這個時候可以使用那個很流行的『黑客指令』,就是 nmap 這個東西啦!nmap 的套件說明之名稱為:『Network exploration tool and security scanner』,顧名思義,這個東西是被系統管理員用來管理系統安全性查核的工具!他的具體描述當中也提到了, nmap 可以經由內部自行定義的幾個 port 對應的指紋資料,來查出該 port 的服務為何,所以我們也可以藉此瞭解我們主機的 port 到底是幹嘛用的!如果您是安裝 Linux 是 Red Hat 版本的話,那麼這個 nmap 套件應該已經安裝妥當了,萬一沒有這個套件的話,也可以來到底下的網站下載:
http://linux.vbird.org/download/#nmap
[root@test root]# nmap <掃瞄類型> <掃瞄參數> <Hosts 位址與範圍>
參數說明:
<掃瞄類型>:主要的掃瞄類型有底下幾種:
-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 :這種是變形的主機範圍啦!很好用吧!
範例:
例題一:掃瞄單一部電腦!
[root@test root]# nmap localhost
# 沒有加上任何參數,由 nmap 的預設參數來進行掃瞄
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on vbird.adsldns.org (127.0.0.1):
(The 1539 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
# 由上面可以看出我的系統目前共有 21, 22, 23 這三個 port 開放!而且
# 各 port 對應的服務也被查出來了!
例題二:掃瞄單一部電腦的較少數 port 號碼!
[root@test root]# nmap -p 1024-65535 localhost
# 僅掃瞄較少數的 port 啦!
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on pc510.ev.ncku.edu.tw (127.0.0.1):
(The 64511 ports scanned but not shown below are in state: closed)
Port State Service
3306/tcp open mysql <==只有這個 port 被找出來囉!
Nmap run completed -- 1 IP address (1 host up) scanned in 11 seconds
例題三:直接以 Ping 的方式掃瞄數個電腦!
[root @test /root]# nmap -PT 192.168.1.171-177
# 看到了吧!掃瞄一個區段的活著的電腦!
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on linux172 (192.168.1.172):
(The 1536 ports scanned but not shown below are in state: closed)
Port State Service
110/tcp open pop-3
135/tcp open loc-srv
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1025/tcp open listen
1110/tcp open nfsd-status
Interesting ports on linux174 (192.168.1.174):
(The 1537 ports scanned but not shown below are in state: closed)
Port State Service
110/tcp open pop-3
135/tcp open loc-srv
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1025/tcp open listen
Interesting ports on linux176 (192.168.1.176):
(The 1537 ports scanned but not shown below are in state: closed)
Port State Service
110/tcp open pop-3
135/tcp open loc-srv
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1025/tcp open listen
Nmap run completed -- 7 IP addresses (3 hosts up) scanned in 1 second
瞧!我要偵測的只有七部電腦,所以這七部電腦只會回應給我囉!而其中只有三部有啟動,所以當然就只會有三段回應啦!這個方式蠻適合一次掃瞄您的子網域內的所有電腦呢! ^_^"
請特別留意,這個 nmap 的功能相當的強大,也是因為如此,所以很多剛在練習的黑客會使用這個軟體來進行偵測別人的電腦,這個時候請您特別留意,目前很多的人已經都有『特別的方式』來進行登錄的工作!例如以 TCP_Wrappers ( /etc/hosts.allow, /etc/hosts.deny ) 的功能來記錄曾經偵測過該 port 的主機 IP!這個軟體用來『偵測自己機器的安全性』是很不錯的一個工具,但是如果用來偵測別人的主機,可是可能會『吃上官司』的!特別留意!!
--------------------------------------------------------------------------------
如何關閉或啟動一個埠口:
既然已經知道了有多少個 port 被啟動或關閉,那麼接著下來當然就是要將一些不安全的服務給他關閉囉!呵呵!那麼該如何關閉呢?請注意:『開或關一個 port 的方式是:開啟或關閉一個服務即可!』例如您要關閉 port 21 這個較為危險的 ftp 的埠口,那麼就是將 wu-ftp 或者是 proftp 關掉就對啦!關掉他自然就連同 port 也關掉囉! ^_^"" 所以說,當您偵測完了 port 之後,接著下來就是找出該 port 的對應的服務,將該服務給關掉,就會把 port 關啦!嗯!我們來試試看關掉一個 25 port 好了!由於 25 port 是由 sendmail 來進行 smtp 的啟動的,那麼我們就先來啟動他:
[root@test root]# /etc/rc.d/init.d/sendmail start
Starting sendmail: [ OK ]
[root@test root]# netstat -an|more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.2:22 192.168.1.11:3175 ESTABLISHED
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 8 [ ] DGRAM 944 /dev/log
unix 2 [ ] DGRAM 3161529
unix 2 [ ] DGRAM 3160038
unix 2 [ ] DGRAM 739227
unix 2 [ ] DGRAM 739189
unix 2 [ ] DGRAM 1070
unix 2 [ ] DGRAM 953
unix 2 [ ] STREAM CONNECTED 690
# 看!那個 127.0.0.1:25 出現了!!
[root@test root]# /etc/rc.d/init.d/sendmail stop
Shutting down sendmail: [ OK ]
那如果要關閉的話,就停止 sendmail 呀!直接以上面的方式關閉呀!這樣就好囉!這樣您再以 netstat -an 看一下,呵呵! port 25 就被關掉喔!很簡單吧!當然,您也可以藉由 netstat -anp 找到 PID 之後,以 kill 指令來關閉也是可以的!
OK!那麼啟動服務的 scripts 路徑在哪裡?如果您還記得『 鳥哥的 Linux 私房菜 -- 基礎學習篇內的認識服務 』那一篇文章的時候,那麼應該就會記得我們目前的幾個 port 啟動的路徑預設都放置在:
/etc/rc.d/init.d
/etc/xinetd.d
這兩個路徑底下,那個 /etc/rc.d/init.d 是以 RPM 來安裝套件的時候,一定會存在的目錄,這個目錄記錄了所有的服務的啟動之 scripts ,這也就是剛剛為何我會以 /etc/rc.d/init.d/sendmail start 來啟動我的 sendmail 服務的原因囉!至於那個 /etc/xinetd.d 目錄下的檔案,就是掛在 xinetd 這個 super daemon 服務底下的服務套件啦!最常見的有 FTP, Telnet, POP3, IMAP 等等,都是由 xinetd 統一統籌來進行整理!所以,當您要啟動 telnet 時,就直接到 /etc/xinetd.d 裡面去,然後將 telnet 這個檔案的 disable = yes 改成 disable = no ,然後『重新啟動 xinetd 這個服務!』沒錯!我沒有寫錯!就是 xinetd !因為我剛剛提過啦,由於 telnet 是由 xinetd 統一統籌的,所以要啟動 telnet 自然就是將 xinetd 重新啟動即可!
/etc/rc.d/init.d/xinetd restart
如何!不難吧!簡單的很!好了,那麼除了直接以檔案名稱來啟動關閉之外,有沒有其他較為簡易的方式來啟動的啦!?當然有!就是使用 service 這個指令說!例如要重新啟動 xinetd ,可以這麼寫:(註: service 這個指令並非所有的 Linux distribution 都存在,僅有 Red Hat 及 Mandrake 上面才會發現這個指令喔!)
service xinetd restart
--------------------------------------------------------------------------------
設定開機時啟動服務的方法:
上一小節提到的都是立刻生效的服務啟動或關閉的方法,那麼有沒有方法可以在開機啟動的時候就設定不要啟動呢?您還記得在 基礎學習篇--Linux 開機關機程序 那一篇文章嗎?開機的程序在經歷了:
BIOS
MBR
Linux Loader
Kernel, init ( 取得 run-level ),
/etc/rc.d/,
/etc/modules.conf,
/etc/rc.d/rc[0-6].d,
/etc/rc.d/rc.local
等等程序後,就是開機完畢啦!那個系統就成功的啟動啦!而其中啟動服務的項目在哪裡呢?呵呵!就是在第七步驟,以我為例,通常我都是以文字界面 登入我的系統,文字界面的 run-level 為 3 ,所以這個時候我就可以在 /etc/rc.d/rc3.d 裡頭找到我的服務的啟動項目啦!就是 S 開頭的檔案!這些相關的概念如果忘記的話,請在前往 基礎學習篇--開機關機程序 那一章節去讀一讀去!那麼如果不要啟動一些服務的話,很簡單呀!就是將該服務的對應檔案( 指 S 開頭的檔案 )刪除就可以啦! ^_^""
但是我要自己一個檔案一個檔案去刪除他嗎?!呵呵!當然不需要啦! Red Hat 與 Mandrake 等較流行的 Linux distribution 很細心的寫了幾支程式來幫您搞定他!那就是:
ntsysv:Red Hat
setup: Red Hat
chkconfig:Red Hat, Mandrake
這三支程式的使用方式我已經在基礎學習篇介紹過了,這裡就不再囉唆囉!請前往基礎學習篇--好用的系統工具 裡頭看看吧!
那麼是否要將所有 Linux 預設的服務都關閉呢?呵呵!請注意呦!『不是將所有的服務都關掉就是安全的!』因為系統還有很多的項目是『一定要啟動的!』否則將會反而變的不安全呢!底下列出來一些完全沒有對外開放 port 的,但卻是系統必需要的服務項目,這些項目請『務必』不要關閉了!
服務名稱 服務內容說明
===============================================================================
atd 在 例行性命令 裡頭提到的,單一次預約命令執行的服務,務必啟動!
cron 在 例行性命令 裡頭提到的,循環執行的命令,務必啟動!
iptables 這個是防火牆軟體,無論如何,先啟動他吧!
keytables 設定鍵盤的上面的字母的格式!當然需要讀入了!不然如何控制!
network 您總該不會不想要有網路吧?!所以這個也請啟動囉!
random 快速的將系統的狀態在隨機的時間內存到映象檔當中,對於系統
相當重要!因為在開機之後,系統會迅速的回復到關機之前的狀態!
syslog 在 系統登錄檔 裡面提過很多次了!相當重要的服務!務必啟動!
xinetd 對啦!另一個服務管理員 super daemon!也是必須要啟動的項目之一!
xfs 如果您是使用 run-level 為 5 的圖形介面,那麼這個也必須要啟動啦
沒錯!不要懷疑!只要這些就可以啦!這幾個服務是必須要啟動的!至於其他服務則都先不用啟動!例如 sendmail 啦!其他林林總總的資料,都先擺著!我們會在後續的章節當中提到如何啟動這些服務的啦!
--------------------------------------------------------------------------------
安全性: 關閉所有對外開放的 port
在您安裝了 Linux 之後呢,相信有很多的朋友會開始想要作一些很炫的服務,例如 WWW 或者是 mail 亦或是 FTP 的服務,但是,這些服務都有潛在性的危險喔,很多的駭客就是利用您開啟的這些服務來進行網站的破壞!基本上,比較麻煩的是『特洛伊木馬』這一類的後門程式,以您的網站做為中繼站去攻擊駭客想要攻擊的目標。所以囉,灌完了 Linux 之後,先將一些不必要的程式或服務移除吧!以保障您的網路安全!其中,更重要的則是將所有的對外的 port 都先關起來!有需要的才開啟!好了,利用我們剛剛提到的幾個方法將您的對外的 port 都關起來吧!
1. 使用 ntsysv 設定開機時啟動的服務項目:
[root@test root]# ntsysv
只要選擇底下幾個服務即可(注意!我是以 Red Hat 的文字介面為基礎的)
atd, cron, iptables, keytables, network, random, syslog, xinetd
如果是 Mandrake 的話,就得要使用 chkconfig 了!
2. 重新開機讓設定生效:
[root@test root]# reboot
3. 觀察目前的 port 開啟多少個?
[root@test root]# netstat -an | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 7 [ ] DGRAM 944 /dev/log
unix 2 [ ] DGRAM 3162963
unix 2 [ ] DGRAM 739227
unix 2 [ ] DGRAM 739189
unix 2 [ ] DGRAM 1070
unix 2 [ ] DGRAM 953
unix 2 [ ] STREAM CONNECTED 690
這樣一來,所有的對外窗口將暫時的全部關閉了!好了,準備要來玩架站囉!一個一個的啟動我們的 port 吧! ^_^
zt from:鸟哥