Networking

如何阻止網際網路訪問但允許程序中的本地主機連接

  • November 23, 2021

我有一個在 docker 中執行 2 個程序的 python 程序:

  1. 我自己的伺服器在 8080 監聽
  2. 在 8000 監聽的應用程序

我正在嘗試阻止第二個程序的 Internet 訪問。我能夠使用unshare命令來實現這一點。

但是,我自己的伺服器(第一個程序)需要呼叫第二個程序。該命令似乎也阻止了本地主機連接。

當我從第一個程序呼叫 127.0.0.1:8000 時,我會得到

HTTPConnectionPool(host=‘0.0.0.0’, port=8000): url: /api/v1/upload 超出最大重試次數(由 NewConnectionError(’<urllib3.connection.HTTPConnection object at 0x7ffb48c59b20> 引起:無法建立新連接) :

$$ Errno 111 $$拒絕連接’))”

我試過ip link set dev lo up了,我可以 ping 127.0.0.1,但是當我嘗試呼叫 127.0.0.1:8000 時仍然出現同樣的錯誤

我使用使用者組解決了這個問題

  1. 添加一個組“no-external-internet”並將您的使用者添加到其中
sudo addgroup no-external-internet
sudo adduser $USER no-external-internet
  1. 添加 iptables 規則以接受來自 {PORT} 的 {HOST} 傳出流量並拒絕所有其他出站連接
sudo iptables -A OUTPUT -m owner --gid-owner no-external-internet -s {HOST} -p 
tcp --sport {PORT} -j ACCEPT; 
sudo iptables  -A OUTPUT -m owner --gid-owner no-external-internet -j REJECT; 
sudo ip6tables -A OUTPUT -m owner --gid-owner no-external-internet -j REJECT; 
  1. 使用使用者組執行您的子程序:

sg no-external-internet "your command to run child process"

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