如何在 Linux 上開放端口

介紹

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個端口(端口號01023)被稱為著名端口號,保留用於最常用的服務。這些包括SSH(端口號22)、HTTP(端口號80)、HTTPS(端口號443)。

1024以上的端口號被稱為臨時端口號

  • 端口號102449151稱為註冊/用戶端口號
  • 端口號4915265535稱為動態/私有端口號

在本教程中,您將在Linux上打開一個臨時端口,因為最常見的服務使用著名端口號。

使用DigitalOcean App Platform從GitHub部署應用程序。讓DigitalOcean專注於擴展您的應用程序。

先決條件

要完成此教程,您將需要:

  • 熟悉使用終端機。

列出所有開放的埠口

在Linux上開放埠口之前,必須檢查所有已開放的埠口列表,並選擇一個不在該列表中的臨時埠口進行開放。

使用netstat命令列出所有開放的埠口,包括網路層中最常見的TCPUDP協議,這些協議用於封包傳輸。

  1. netstat -lntu

這將輸出:

  • 所有監聽中的插座(-l
  • 埠口號碼-n
  • TCP埠口-t
  • UDP埠口-u
Output
Active 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命令列出具有開放埠口的監聽插座以驗證您是否正在接收一致的輸出:

  1. ss -lntu

這將輸出:

Output
Netid 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 沒有被使用:

  1. netstat -na | grep :4000

或使用 ss 命令:

  1. ss -na | grep :4000

輸出必須保持空白,從而確認它目前未被使用,以便您可以手動將端口規則添加到系統 iptables 防火牆中。

對於 Ubuntu 用戶和基於 ufw 的系統

使用 ufw – UncomplicatedFirewall 的命令行客戶端。

您的命令將類似於:

  1. 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 守護程序的命令行客戶端。

您的命令將類似於:

  1. firewall-cmd --add-port=4000/tcp

參考您的發行版的 如何設置 firewalld

注意:

  • CentOS 7/8:「設置應用程式的規則/開放區域的端口」
  • Rocky Linux 8/9:「設置應用程式的規則/開放區域的端口」

對於其他 Linux 發行版

使用 iptables 更改系統的 IPv4 封包篩選規則。

  1. iptables -A INPUT -p tcp --dport 4000 -j ACCEPT

參考您的發行版的 如何使用 iptables 設置防火牆

注意:

  • Ubuntu 12.04:「基本防火牆」
  • Ubuntu 14.04:「接受其他必要連接」

測試新開啟的 TCP 連接埠

現在您已成功開啟新的 TCP 連接埠,是時候測試它了。

首先,啟動 netcat (nc) 並在埠號 (-p) 4000 上監聽 (-l),同時將 ls 的輸出發送到任何連接的客戶端:

  1. ls | nc -l -p 4000

現在,當客戶端在埠號 4000 上建立了 TCP 連接後,他們將收到 ls 的輸出。現在暫時不要關閉此會話。

在同一台機器上打開另一個終端會話。

由於您已經開啟了一個 TCP 連接埠,請使用 telnet 檢查 TCP 連通性。如果該命令不存在,請使用您的套件管理器安裝它。

輸入您的伺服器 IP 和埠號(在此示例中為 4000),然後運行此命令:

  1. telnet localhost 4000

此命令試圖在 localhost 的埠號 4000 上開啟一個 TCP 連接。

您將收到類似於此的輸出,指示已與監聽程序(nc)建立了連接:

Output
Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. while.sh

ls 的輸出(在此示例中為 while.sh)也已發送到客戶端,表明已成功建立了 TCP 連接。

使用 nmap 檢查端口(-p)是否開放:

  1. nmap localhost -p 4000

該命令將檢查開放的端口:

Output
Starting 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上開啟新的端口並設置為接受連接。您還使用了netstatsstelnetncnmap

繼續學習,查看Iptables防火牆的工作原理Iptables和Netfilter架構的深入解析理解套接字使用Top、Netstat、Du和其他工具監控伺服器資源

Source:
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux