Linux

限制 localhost:TCP 埠上的入站訪問

  • November 1, 2018

由於我無法控制的原因,我有一個綁定到 TCP“localhost:$PORT”的二進製文件。(Unix 套接字綁定會使這個問題變得毫無意義)。

如果我理解正確,這意味著雖然沒有網路機器可以連接,但機器上的其他使用者(包括非特權守護程序使用者)可以連接到這個埠。

有什麼方法可以讓我指定只有二進製文件執行為 $ me should be allowed to connect to this port? I can become root in order to specify the configuration, but the listening binary and the connecting binaries both run as the non-root $ 我的使用者

iptables 中有一個ownermatch 擴展,但它只能在 OUTPUT 和 POSTROUTING 鏈中使用。因此,您可以像這樣在 iptables OUTPUT 鏈的開頭添加兩個規則(需要 root 訪問權限):

iptables -I OUTPUT 1 -o lo -p tcp --dport $PORT -m owner --uid-owner $me -j ACCEPT
iptables -I OUTPUT 2 -o lo -p tcp --dport $PORT -j DROP
  • 規則 1:如果數據包通過 TCP 從環回介面傳出並且具有目標埠 $ PORT and packet owner is $ 我,讓它過去(並且不要在這個鏈中處理任何進一步的規則)。
  • 規則 2:如果數據包通過 TCP 從環回介面傳出並具有目標埠 $ PORT but it did not match rule 1 (i.e. packet is owned by anyone other than $ 我),放下它。

如果您的系統有一些為您管理 iptables 設置的服務(例如ufw,對於 Debian/Ubuntu 或firewalldRedHat/Fedora 系統),您可能需要配置該服務來為您創建這些 iptables 規則,而不是直接手動添加它們。

引用自:https://unix.stackexchange.com/questions/479012