介紹
A port is a communication endpoint. Within an operating system, a port is opened or closed to data packets for specific processes or network services.
通常,端口識別分配給特定的網絡服務。這可以通過手動配置服務以使用不同的端口來更改,但通常情況下,可以使用默認值。
前1024個端口(端口號0
到1023
)被稱為著名端口號,保留用於最常用的服務。這些包括SSH(端口號22
)、HTTP(端口號80
)、HTTPS(端口號443
)。
1024以上的端口號被稱為臨時端口號。
- 端口號
1024
到49151
稱為註冊/用戶端口號。 - 端口號
49152
到65535
稱為動態/私有端口號。
在本教程中,您將在Linux上打開一個臨時端口,因為最常見的服務使用著名端口號。
使用DigitalOcean App Platform從GitHub部署應用程序。讓DigitalOcean專注於擴展您的應用程序。
先決條件
要完成此教程,您將需要:
- 熟悉使用終端機。
列出所有開放的埠口
在Linux上開放埠口之前,必須檢查所有已開放的埠口列表,並選擇一個不在該列表中的臨時埠口進行開放。
使用netstat
命令列出所有開放的埠口,包括網路層中最常見的TCP和UDP協議,這些協議用於封包傳輸。
- netstat -lntu
這將輸出:
- 所有監聽中的插座(
-l
) - 埠口號碼(
-n
) - TCP埠口(
-t
) - UDP埠口(
-u
)
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:5432 :::* LISTEN
tcp6 0 0 ::1:6379 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
注意:如果您的發行版中沒有netstat
,您可以使用ss
命令通過檢查監聽插座來顯示已開放的埠口。
使用ss
命令列出具有開放埠口的監聽插座以驗證您是否正在接收一致的輸出:
- ss -lntu
這將輸出:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::1]:5432 0.0.0.0:*
tcp LISTEN 0 128 [::1]:6379 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 0.0.0.0:*
這幾乎與netstat
輸出相同。
在 Linux 上開放端口以允許 TCP 連接
現在,打開一個已關閉的端口,使其聆聽 TCP 連接。
為了本教程的目的,您將打開端口 4000
。但是,如果該端口在您的系統中未打開,請隨意選擇另一個已關閉的端口。只需確保它大於 1023
。
使用 netstat
命令確保端口 4000
沒有被使用:
- netstat -na | grep :4000
或使用 ss
命令:
- ss -na | grep :4000
輸出必須保持空白,從而確認它目前未被使用,以便您可以手動將端口規則添加到系統 iptables 防火牆中。
對於 Ubuntu 用戶和基於 ufw
的系統
使用 ufw
– UncomplicatedFirewall 的命令行客戶端。
您的命令將類似於:
- sudo ufw allow 4000
參考您的發行版的 如何設置 ufw
防火牆設置。
注意:
- Ubuntu 14.0.4:“允許特定端口範圍”
- Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4:「允許其他連接/特定端口範圍」
- Debian 9/10/11:「允許其他連接/特定端口範圍」
對於 CentOS 和基於 firewalld
的系統
使用 firewall-cmd
– 用於 firewalld
守護程序的命令行客戶端。
您的命令將類似於:
- firewall-cmd --add-port=4000/tcp
參考您的發行版的 如何設置 firewalld
注意:
- CentOS 7/8:「設置應用程式的規則/開放區域的端口」
- Rocky Linux 8/9:「設置應用程式的規則/開放區域的端口」
對於其他 Linux 發行版
使用 iptables
更改系統的 IPv4 封包篩選規則。
- iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
參考您的發行版的 如何使用 iptables
設置防火牆
注意:
- Ubuntu 12.04:「基本防火牆」
- Ubuntu 14.04:「接受其他必要連接」
測試新開啟的 TCP 連接埠
現在您已成功開啟新的 TCP 連接埠,是時候測試它了。
首先,啟動 netcat (nc
) 並在埠號 (-p
) 4000
上監聽 (-l
),同時將 ls
的輸出發送到任何連接的客戶端:
- ls | nc -l -p 4000
現在,當客戶端在埠號 4000
上建立了 TCP 連接後,他們將收到 ls
的輸出。現在暫時不要關閉此會話。
在同一台機器上打開另一個終端會話。
由於您已經開啟了一個 TCP 連接埠,請使用 telnet
檢查 TCP 連通性。如果該命令不存在,請使用您的套件管理器安裝它。
輸入您的伺服器 IP 和埠號(在此示例中為 4000
),然後運行此命令:
- telnet localhost 4000
此命令試圖在 localhost
的埠號 4000
上開啟一個 TCP 連接。
您將收到類似於此的輸出,指示已與監聽程序(nc
)建立了連接:
OutputTrying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh
ls
的輸出(在此示例中為 while.sh
)也已發送到客戶端,表明已成功建立了 TCP 連接。
使用 nmap
檢查端口(-p
)是否開放:
- nmap localhost -p 4000
該命令將檢查開放的端口:
OutputStarting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
4000/tcp open remoteanything
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
端口已打開。您已成功在Linux系統上打開新的端口。
注意:nmap
僅列出當前有應用程序正在聆聽的已打開端口。如果您沒有使用任何正在聆聽的應用程序,例如netcat,這將顯示端口4000
為關閉,因為該端口上目前沒有應用程序正在聆聽。同樣,telnet
也不起作用,因為它也需要一個正在聆聽的應用程序來綁定。這就是為什麼nc
是如此有用的工具的原因。它在一個簡單的命令中模擬這樣的環境。
但這只是暫時的,因為每次重新啟動系統時更改都會被重置。
持久化規則
本文介紹的方法只會在系統關閉或重新啟動之前暫時更新防火牆規則。因此,在重新啟動後需要重複相同步驟才能再次打開相同的端口。
對於ufw
防火牆
ufw
的規則在重新啟動時不會重置。這是因為它已整合到啟動過程中,內核使用ufw
通過應用適當的配置文件保存防火牆規則。
對於firewalld
您需要應用--permanent
標誌。
請參閱如何設置您的發行版的firewalld
。
注意:
- CentOS 7/8:“為應用程序設置規則”
- Rocky Linux 8/9:“為應用程序設置規則”
對於iptables
您需要保存配置規則。這些教程建議使用iptables-persistent
。
請參閱如何使用iptables
設置防火牆以了解您的發行版。
注意:
- Ubuntu 12.04:“保存Iptables規則”
- Ubuntu 14.04:“保存您的Iptables配置”
總結
在本教程中,您學會了如何在Linux上開啟新的端口並設置為接受連接。您還使用了netstat
、ss
、telnet
、nc
和nmap
。
繼續學習,查看Iptables防火牆的工作原理、Iptables和Netfilter架構的深入解析、理解套接字和使用Top、Netstat、Du和其他工具監控伺服器資源。
Source:
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux