Networking
如何阻止網際網路訪問但允許程序中的本地主機連接
我有一個在 docker 中執行 2 個程序的 python 程序:
- 我自己的伺服器在 8080 監聽
- 在 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 時仍然出現同樣的錯誤
我使用使用者組解決了這個問題
- 添加一個組“no-external-internet”並將您的使用者添加到其中
sudo addgroup no-external-internet sudo adduser $USER no-external-internet
- 添加 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;
- 使用使用者組執行您的子程序:
sg no-external-internet "your command to run child process"