Linux
限制 localhost:TCP 埠上的入站訪問
由於我無法控制的原因,我有一個綁定到 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 中有一個
owner
match 擴展,但它只能在 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 或firewalld
RedHat/Fedora 系統),您可能需要配置該服務來為您創建這些 iptables 規則,而不是直接手動添加它們。