iptables は、docker の実行中にポートを追加、削除、表示、変更、および変更します

まず、ファイアウォールをインストールして起動します

  1. [root@linux ~]# /etc/init.d/iptables start  

iptables を使用してルールを追加して保存すると、これらのルールはファイルの形式でディスクに保存されます。centos を例に取ると、ファイル アドレスは /etc/sysconfig/iptables です。ルールを追加、変更、削除できます。 /etc/sysconfig/iptables ファイルを直接変更することもできます。

次に、ファイアウォール ルールを追加します

1、フィルターテーブルを追加

  1. [root@linux ~]# iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT //ポート 21 を開く  

エクスポートのためにiptables -P OUTPUT ACCEPTを開くので、エクスポートのためにポートを開く必要はありません。

2、natテーブルを追加します

  1. [root@linux ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE  

送信元アドレス 192.168.10.0/24 のマスカレード パケット

3、デフォルトでは -A が最後に挿入されますが、指定した位置に -I を挿入できます

  1. [root@linux ~]# iptables -I INPUT 3 -p tcp -m tcp --dport 20 -j ACCEPT  
  2.   
  3. [root@linux ~]# iptables -L -n --line-number  
  4. チェーン INPUT (ポリシー DROP)  
  5. num ターゲット プロト オプト ソース 宛先  
  6. 1 すべて受け入れる -- 0.0.0.0/0 0.0.0.0/0  
  7. 2 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmp タイプ 8  
  8. 3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 //-指定された位置に挿入  
  9. 4 tcp を受け入れる -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22  
  10. 5 tcp を受け入れる -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80  
  11. 6 すべてを受け入れる -- 0.0.0.0/0 0.0.0.0/0 状態 RELATED,ESTABLISHED  
  12. 7 すべてを削除 -- 0.0.0.0/0 0.0.0.0/0 状態 INVALID,NEW  
  13. 8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 // デフォルトでは最後に -A が挿入されます  
  14.   
  15. チェーン転送 (ポリシー ACCEPT)  
  16. num ターゲット プロト オプト ソース 宛先           
  17.   
  18. チェーン出力 (ポリシー ACCEPT)  
  19. num ターゲット プロト オプト ソース 宛先  

第三に、iptable ルールを確認します

1、フィルターテーブルを表示します

  1. [root@linux ~]# iptables -L -n --line-number |grep 21 //--line-number はルールのシリアル番号を表示でき、削除するときに便利です。  
  2. 5 tcp を受け入れる -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:21  

-t を追加しない場合、デフォルトはフィルター テーブルであり、表示、追加、削除はすべて

2、NATテーブルを確認する

  1. [root@linux ~]# iptables -t nat -vnL POSTROUTING --line-number  
  2. チェーン ポストルーティング (ポリシー ACCEPT 38 パケット、2297 バイト)  
  3. num pkts バイト ターゲット プロト オプトイン ソース 宛先  
  4. 1 0 0 マスカレードすべて -- * * 192.168.10.0/24 0.0.0.0/0  

第四に、ルールを変更する

  1. [root@linux ~]# iptables -R INPUT 3 -j DROP //ルール 3 を DROP に変更  

5. iptables ルールを削除する

  1. [root@linux ~]# iptables -D INPUT 3 //入力の 3 番目のルールを削除  
  2.   
  3. [root@linux ~]# iptables -t nat -D POSTROUTING 1 //nat テーブル内の postrouting の最初のルールを削除します  
  4.   
  5. [root@linux ~]# iptables -F INPUT //フィルターテーブルのルールをすべてクリア INPUT  
  6.   
  7. [root@linux ~]# iptables -F //すべてのルールをクリア  
  8.   
  9. [root@linux ~]# iptables -t nat -F POSTROUTING //nat テーブルのルールをすべてクリアします POSTROUTING  

6、デフォルトのルールを設定する

  1. [root@linux ~]# iptables -P INPUT DROP //フィルターテーブルを設定します INPUT のデフォルトルールは DROP です  

追加、削除、変更はすべて /etc/init.d/iptables に保存する必要があります。上記は最も基本的な操作の一部であり、これらを柔軟に使用するには、実際の操作にある程度の時間がかかります。

応用:

ホストの iptables ポート マッピングを変更する docker ポート マッピングは docker テクノロジーでは実装されず、ホストの iptables を通じて実装されます。ポート マッピングは、ルーターでルーティング ポート マッピングを設定するのと同様に、ブリッジを制御することによって行われます。

コンテナのポート 8000 がホストのポート 9000 にマッピングされている場合は、まず iptabes が設定しているルールを確認します。

sudo iptables -t nat -vnL

結果の 1 つ:

Chain DOCKER (参考文献 2)

pkts バイト ターゲット プロト オプトイン ソース 宛先

98 5872 すべてを返す -- docker0 * 0.0.0.0/0 0.0.0.0/0

237 14316 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 ~:172.17.0.3:8000

docker が DOKCER というカスタム チェーンを作成したことがわかります。そして、ポート 8000 を開いたコンテナの IP は 172.17.0.3 です。

また、inspect コマンドを使用してコンテナ IP を表示することもできます。

docker Inspection [containerId] |grep IPAddress

8081->81 などの別のポート マッピングを追加し、このチェーンにルールを追加します。

sudo iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:81

間違いを犯した場合、または修正したい場合は、最初に表示する行番号を表示します。

sudo iptables -t nat -vnL DOCKER --line-number

削除ルール 3

sudo iptables -t nat -D DOCKER 3
 

iptables を変更してマップされたポートを追加します。
ホスト上で次のコマンドを実行して目的を達成します。

iptables -A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 1521 -j ACCEPT
1
iptables -t nat -A DOCKER ! -i br0 -p tcp -m tcp - -dport 11522 -j DNAT --to-destination 172.17.0.2:1521
1
重要なパラメータの説明:

172.17.0.2: Docker 内の Docker コンテナの IP。「docker Inspection `container_name` | grep IPAddress」で取得できます。 1521:
コンテナ内のアプリケーションによって公開されるポート
11522: コンテナ内のアプリケーションのポートホストのポートにマッピングされます
 

  永続的な iptables を保存します。

コマンド iptables を書き込んだ後、次の操作を実行します。

 1. sudo su
 2. iptables-save > /etc/iptables.rules
 3. In /etc/network/if-pre-up.d/iptables,put:

 #!/bin/sh
 iptables-restore < /etc/iptables.rules
 exit 0

 4. After, in /etc/network/if-post-down.d/iptables,put:
 #!/bin/sh
 iptables-save -c > /etc/iptables.rules
 if [ -f /etc/iptables.rules ]; then
 iptables-restore < /etc/iptables.rules
 fi
 exit 0
 5. After, give permission to the scripts:
 sudo chmod +x /etc/network/if-post-down.d/iptables
 sudo chmod +x /etc/network/if-pre-up.d/iptables

おすすめ

転載: blog.csdn.net/a1058926697/article/details/130833974