進行中のインターネットアクセスをブロックし、ローカルホスト接続を許可する方法

進行中のインターネットアクセスをブロックし、ローカルホスト接続を許可する方法

Dockerで2つのプロセスを実行するPythonプログラムがあります。

  1. 私のサーバーは8080を受信します。
  2. 8000を受信するアプリケーション

2番目のプロセスへのインターネットアクセスをブロックしようとしています。unshareコマンドを使用してこれを達成できます。

ただし、私のサーバー(最初のプロセス)は2番目のプロセスを呼び出す必要があります。このコマンドはまた、localhost接続をブロックするようです。

最初のプロセスで127.0.0.1:8000を呼び出すと

HTTPConnectionPool(host='0.0.0.0', port=8000): url: /api/v1/upload 最大再試行回数を超えました(NewConnectionError接続): [Errno 111] 接続が拒否されました。 '))"

試してみてip link set dev lo up127.0.0.1にpingを送信できましたが、127.0.0.1:8000に電話しようとすると、同じエラーが発生します。

ベストアンサー1

usergroupを使用してこの問題を解決しました。

  1. 「no-external-internet」グループを追加し、ここにユーザーを追加します。

    sudo addgroup no-external-internet
    sudo adduser $USER no-external-internet
    
  2. {PORT}から{HOST}へのトラフィックを許可し、他のすべてのアウトバウンド接続を拒否するiptablesルールを追加します。

    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; 
    
  3. ユーザーグループを使用して子プロセスを実行します。

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

おすすめ記事