まず、ファイアウォールをインストールして起動します
- [root@linux ~]# /etc/init.d/iptables start
iptables を使用してルールを追加して保存すると、これらのルールはファイルの形式でディスクに保存されます。centos を例に取ると、ファイル アドレスは /etc/sysconfig/iptables です。ルールを追加、変更、削除できます。 /etc/sysconfig/iptables ファイルを直接変更することもできます。
次に、ファイアウォール ルールを追加します
1、フィルターテーブルを追加
- [root@linux ~]# iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT //ポート 21 を開く
エクスポートのためにiptables -P OUTPUT ACCEPTを開くので、エクスポートのためにポートを開く必要はありません。
2、natテーブルを追加します
- [root@linux ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
送信元アドレス 192.168.10.0/24 のマスカレード パケット
3、デフォルトでは -A が最後に挿入されますが、指定した位置に -I を挿入できます
- [root@linux ~]# iptables -I INPUT 3 -p tcp -m tcp --dport 20 -j ACCEPT
- [root@linux ~]# iptables -L -n --line-number
- チェーン INPUT (ポリシー DROP)
- num ターゲット プロト オプト ソース 宛先
- 1 すべて受け入れる -- 0.0.0.0/0 0.0.0.0/0
- 2 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmp タイプ 8
- 3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 //-指定された位置に挿入
- 4 tcp を受け入れる -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
- 5 tcp を受け入れる -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
- 6 すべてを受け入れる -- 0.0.0.0/0 0.0.0.0/0 状態 RELATED,ESTABLISHED
- 7 すべてを削除 -- 0.0.0.0/0 0.0.0.0/0 状態 INVALID,NEW
- 8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 // デフォルトでは最後に -A が挿入されます
- チェーン転送 (ポリシー ACCEPT)
- num ターゲット プロト オプト ソース 宛先
- チェーン出力 (ポリシー ACCEPT)
- num ターゲット プロト オプト ソース 宛先
第三に、iptable ルールを確認します
1、フィルターテーブルを表示します
- [root@linux ~]# iptables -L -n --line-number |grep 21 //--line-number はルールのシリアル番号を表示でき、削除するときに便利です。
- 5 tcp を受け入れる -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:21
-t を追加しない場合、デフォルトはフィルター テーブルであり、表示、追加、削除はすべて
2、NATテーブルを確認する
- [root@linux ~]# iptables -t nat -vnL POSTROUTING --line-number
- チェーン ポストルーティング (ポリシー ACCEPT 38 パケット、2297 バイト)
- num pkts バイト ターゲット プロト オプトイン ソース 宛先
- 1 0 0 マスカレードすべて -- * * 192.168.10.0/24 0.0.0.0/0
第四に、ルールを変更する
- [root@linux ~]# iptables -R INPUT 3 -j DROP //ルール 3 を DROP に変更
5. iptables ルールを削除する
- [root@linux ~]# iptables -D INPUT 3 //入力の 3 番目のルールを削除
- [root@linux ~]# iptables -t nat -D POSTROUTING 1 //nat テーブル内の postrouting の最初のルールを削除します
- [root@linux ~]# iptables -F INPUT //フィルターテーブルのルールをすべてクリア INPUT
- [root@linux ~]# iptables -F //すべてのルールをクリア
- [root@linux ~]# iptables -t nat -F POSTROUTING //nat テーブルのルールをすべてクリアします POSTROUTING
6、デフォルトのルールを設定する
- [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