
我想將一些 Linux 服務設定為非標準連接埠 - 最高有效連接埠號碼是多少?
答案1
(2^16)-1,或0-65,535(-1是因為連接埠0被保留且不可用)。 (編輯是因為 o_O Tync 提醒我我們不能使用端口 0,而 Steve Folly 提醒我你要求的是最高端口,而不是端口數量)
但你可能會以錯誤的方式處理這個問題。有人支持或反對非標準端口。我說,除了最隨意的掃描器之外,它們是無關緊要的,並且可以透過使用最新的軟體和適當的防火牆技術以及強密碼來阻止最隨意的掃描器。換句話說,安全最佳實踐。
答案2
1-65535可用,1-1023範圍內的連接埠是特權個:應用程式需要以 root 身分執行才能偵聽這些連接埠。
答案3
儘管 1-65535 是合法的 TCP 端口,但 1-1023 確實用於眾所周知的端口服務。如果您自己的服務在建立臨時連接埠後啟動,您可能會遇到隨機問題。對於可能不知道的人來說,臨時連接埠是那些為遠端端點(或類似的東西)在本地連接的連接埠。因此,如果您編寫一個偵聽連接埠 20001 的 TCP 服務。但是有一天,您的服務可能會啟動並嘗試綁定到 20001,但它會失敗,因為它被視為臨時連接埠。有一個解決方案。您必須讓管理員或您自己更改伺服器上的系統臨時連接埠範圍策略。在 Linux 系統上,分兩步驟完成:
- 動態地
- 永久
必須執行這兩個步驟,除非您計劃重新啟動(在這種情況下不需要動態步驟)。若要將範圍設為 40000 到 65535,請執行下列操作:
動態的
echo 40000 65535 > /proc/sys/net/ipv4/ip_local_port_range
或者
sysctl -w net.ipv4.ip_local_port_range="40000 65535"
永恆的
將以下內容加入 /etc/sysctl.conf 中:
net.ipv4.ip_local_port_range = 40000 65535
若要讀取目前設定或確認變更:
/sbin/sysctl net.ipv4.ip_local_port_range
輸出將是這樣的:
net.ipv4.ip_local_port_range = 9000 65500
確保您了解伺服器的用途。過度減小範圍可能會導致其他問題。
快樂編碼! (或無論你做什麼)
答案4
所有說 65,535 的人都是對的。
然而!透過一些仔細的核心可調參數操作,您可以告訴 linux 使用更多。一些商業 UNIX 系統可以在技術上越界連接埠上運行服務,不會有任何問題。繞過一些防火牆/ACL 保護網路的超級簡單方法! :P
我曾經在 tcp/99999 上運行第二個 telnet 伺服器,它總是對我有用。即使在典型的特權連接埠 (1-1024) 被 ACL 或網路防火牆阻止的情況下也是如此。
幾乎沒有人掃描監聽 65,535 以上的連接埠。大多數網路設備無法檢查定義範圍(0-65535)以外的任何內容,並盲目轉送流量,除非規則另有指示。現在我們已經有了 64 位元系統,從技術上講,上限就是 64 位元邊界。並不意味著網路會傳遞流量,但通常它們確實會傳遞任何沒有規則可以丟棄或拒絕的內容。