無(wú)論是要解決網(wǎng)絡(luò)連接問(wèn)題還是配置防火墻,第一件事是要檢查系統(tǒng)實(shí)際打開(kāi)了哪些端口或者是應(yīng)用監(jiān)聽(tīng)那些端口。
監(jiān)聽(tīng)端口是應(yīng)用程序監(jiān)聽(tīng)的計(jì)算機(jī)系統(tǒng)的端口。通過(guò)ss
,netstat
或lsof
命令查詢系統(tǒng)網(wǎng)絡(luò)命名空間,你可以得到的應(yīng)用程序正在監(jiān)聽(tīng)端口名單。
每個(gè)監(jiān)聽(tīng)端口都可以被防火墻允許或關(guān)閉/阻止/過(guò)濾/轉(zhuǎn)發(fā)。一般而言,開(kāi)放端口是一個(gè)網(wǎng)絡(luò)端口,它接受來(lái)自遠(yuǎn)程計(jì)算機(jī)傳入數(shù)據(jù)包。
例如,如果你正在運(yùn)行著Web服務(wù)器并監(jiān)聽(tīng)80
,443
端口,這些端口在防火墻上是對(duì)所有人開(kāi)放。
除非被IPS封鎖,使用瀏覽器將能夠訪問(wèn)Web服務(wù)器的站點(diǎn)。在這種情況下,80
和443
都是開(kāi)放端口。
開(kāi)放端口可能會(huì)帶來(lái)安全風(fēng)險(xiǎn),因?yàn)楣粽呖梢允褂妹總€(gè)開(kāi)放端口來(lái)進(jìn)行漏洞攻擊或執(zhí)行其他類型的攻擊。您應(yīng)該只打開(kāi)應(yīng)用程序所需的端口,關(guān)閉未使用的端口。
nmap 掃描開(kāi)放端口
Nmap是功能強(qiáng)大的網(wǎng)絡(luò)掃描工具,可以掃描單個(gè)主機(jī)和大型網(wǎng)絡(luò)。它主要用于安全審核和滲透測(cè)試。nmap
是端口掃描的首選工具。
除端口掃描外,nmap
還可以檢測(cè)Mac地址,操作系統(tǒng)類型,內(nèi)核版本等。在本節(jié)中,我們僅說(shuō)明如何使用nmap掃描端口。
nmap的-sT
選項(xiàng)可以掃描TCP端口,-p-
掃描TCP協(xié)議的所有端口,即0-65535。如果不使用-p-
,nmap
將僅掃描前1000個(gè)端口。
如果你需要掃描UDP端口,請(qǐng)使用-sU
代替-sT
。如果需要更多信息,請(qǐng)?jiān)L問(wèn)nmap手冊(cè)頁(yè),并了解此工具的功能。
以下nmap命令示例將會(huì)掃描IP地址是10.10.8.8
計(jì)算機(jī)已打開(kāi)的端口,確定哪些端口正在監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)的TCP/UDP連接。
sudo nmap -sT -p- 10.10.8.8 #tcp
sudo nmap -sU -p- 10.10.8.8 #UDP
Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-09 23:10 CEST
Nmap scan report for 10.10.8.8
Host is up (0.0012s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds
輸出顯示,計(jì)算機(jī)打開(kāi)的端口包括22
,80
以及8069
端口。
netcat 掃描打開(kāi)端口
Netcat或nc
是一個(gè)命令行工具,可以基于TCP或UDP協(xié)議通過(guò)網(wǎng)絡(luò)連接讀取和寫(xiě)入數(shù)據(jù)。
使用netcat命令可以掃描單個(gè)端口或端口范圍。默認(rèn)是掃描TCP協(xié)議的端口,要掃描UDP端口,請(qǐng)使用nc
的-u
選項(xiàng)。
你可使用nc
的-z
選項(xiàng)指示僅掃描已打開(kāi)的端口,并且使用-v
選項(xiàng)用于獲取更多詳細(xì)信息。1
如果需要獲得已打開(kāi)且可成功連接的端口,則可以使用grep命令過(guò)濾結(jié)果。
例如命令nc -z -v 10.10.8.8 20-80
將會(huì)掃描IP地址是10.10.8.8
的遠(yuǎn)程計(jì)算機(jī),范圍在20-80的TCP端口。
nc -z -v 10.10.8.8 20-80
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded #tcp端口
nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded #udp端口
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
...
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
Bash 偽設(shè)備掃描端口
檢查某個(gè)端口是打開(kāi)還是關(guān)閉的另一種方法是使用Bash檢查/dev/tcp/..
或/dev/udp/..
目錄中的偽設(shè)備。
在/dev/$PROTOCOL/$HOST/$IP
偽設(shè)備運(yùn)行命令時(shí),Bash將在指定端口打開(kāi)到指定主機(jī)的TCP或UDP連接。
使用偽設(shè)備連接到端口時(shí)的默認(rèn)超時(shí)時(shí)間非常長(zhǎng),因此我們使用timeout
命令在5秒后終止測(cè)試命令。如果建立了端口連接,則測(cè)試命令將返回true。
以下if..else語(yǔ)句將檢查kernel.org
打開(kāi)是否打開(kāi)端口443
,如果建立到kernel.org
端口的連接,則測(cè)試命令將返回true。
如果你需要使用檢查指定端口范圍,您也可以使用for循環(huán)來(lái)達(dá)到這一目的。
if timeout 5 bash -c '/dev/null'
then
echo "Port is open"
else
echo "Port is closed"
fi
for PORT in {20..80}; do
timeout 1 bash -c "$PORT &>/dev/null" && echo "port $PORT is open"
done
for循環(huán)
port 22 is open
port 80 is open
結(jié)論
我們?yōu)槟故玖藥追N可用于掃描開(kāi)放端口的工具。還有其他工具和方法來(lái)檢查打開(kāi)的端口,例如,您可以使用Python socket
模塊curl
,telnet
或wget
等。
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209327 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7488瀏覽量
87849 -
端口
+關(guān)注
關(guān)注
4文章
963瀏覽量
32051
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論