Ubuntu 16.04でDocker SwarmのLinuxファイアウォールを構成する方法

前書き

Docker SwarmはDockerの機能であり、Dockerホストとコンテナーを大規模に簡単に実行できます。 Docker Swarm、またはDockerクラスターは、_manager_ノードとして機能する1つ以上のDockerizedホストと、任意の数の_worker_ノードで構成されます。 このようなシステムをセットアップするには、Linuxファイアウォールを慎重に操作する必要があります。

Docker Swarmが正しく機能するために必要なネットワークポートは次のとおりです。

  • 安全なDockerクライアント通信用のTCPポート + 2376 +。 このポートは、Docker Machineが機能するために必要です。 Docker Machineは、Dockerホストのオーケストレーションに使用されます。

  • TCPポート + 2377 +。 このポートは、Docker Swarmまたはクラスターのノード間の通信に使用されます。 マネージャーノードでのみ開く必要があります。

  • ノード間の通信用のTCPおよびUDPポート「+7946 +」(コンテナネットワーク検出)。

  • オーバーレイネットワークトラフィック用のUDPポート + 4789 +(コンテナーの入力ネットワーク)。

この記事では、すべてのLinuxディストリビューションで利用可能なさまざまなファイアウォール管理アプリケーションを使用して、Ubuntu 16.04でLinuxファイアウォールを構成する方法を学びます。 それらのファイアウォール管理アプリケーションは、FirewallD、IPTables Tools、およびUFW(Uncomplicated Firewall)です。 UFWは、Ubuntu 16.04を含むUbuntuディストリビューションのデフォルトのファイアウォールアプリケーションです。 このチュートリアルでは3つの方法を扱いますが、それぞれが同じ結果をもたらすため、最もよく知っている方法を選択できます。

前提条件

この記事を進める前に、次のことを行う必要があります。

  • 少なくとも1つのSwarm Managerと1つのSwarm Workerを含む、クラスターを構成するホストをセットアップします。 チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-provision-and-manage-remote-docker-hosts-with-docker-machine-on-ubuntu-16-04[How Ubuntu 16.04でDocker Machineを使用してリモートDockerホストをプロビジョニングおよび管理するには]を設定します。

方法1-UFWを使用してDocker Swarmポートを開く

Dockerホストをセットアップしたばかりの場合、UFWはすでにインストールされています。 有効化して設定するだけです。 UbuntuでUFWを使用する方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-16-04 [このガイド]をご覧ください。 16.04。

Swarmマネージャーとして機能するノードで次のコマンドを実行します。

ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp

その後、UFWをリロードします。

ufw reload

UFWが有効になっていない場合は、次のコマンドを使用して有効にします。

ufw enable

これは必要ではないかもしれませんが、ファイアウォールを変更して再起動するたびにDockerデーモンを再起動することは決して痛いことはありません。

systemctl restart docker

次に、ワーカーとして機能する各ノードで、次のコマンドを実行します。

ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp

その後、UFWをリロードします。

ufw reload

UFWが有効になっていない場合は、有効にします。

ufw enable

次に、Dockerデーモンを再起動します。

systemctl restart docker

UFWを使用してDocker Swarmに必要なポートを開くために必要なことはこれだけです。

方法2-FirewallDを使用してDocker Swarmポートを開く

FirewallDは、Fedora、CentOS、およびそれらに基づく他のLinuxディストリビューションのデフォルトのファイアウォールアプリケーションです。 ただし、FirewallDは、Ubuntu 16.04などの他のLinuxディストリビューションでも使用できます。

UFWの代わりにFirewallDを使用する場合、まずUFWをアンインストールします。

apt-get purge ufw

次にFirewallDをインストールします。

apt-get install firewalld

実行されていることを確認します。

systemctl status firewalld

実行されていない場合は開始します。

systemctl start firewalld

次に、起動時に起動するように有効にします。

systemctl enable firewalld

Swarmマネージャーとなるノードで、次のコマンドを使用して必要なポートを開きます。

firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent

その後、ファイアウォールをリロードします。

firewall-cmd --reload

次に、Dockerを再起動します。

systemctl restart docker

次に、Swarmワーカーとして機能する各ノードで、次のコマンドを実行します。

firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent

その後、ファイアウォールをリロードします。

firewall-cmd --reload

次に、Dockerを再起動します。

systemctl restart docker

FirewallDを使用して、Docker Swarmに必要なポートを開くことに成功しました。

方法3-IPTablesを使用してDocker Swarmポートを開く

LinuxディストリビューションでIPtablesを使用するには、まず他のファイアウォールユーティリティをアンインストールする必要があります。 FirewallDまたはUFWから切り替える場合は、まずそれらをアンインストールします。

次に、IPtablesルールの自動読み込みを管理する `+ iptables-persistent +`パッケージをインストールします。

apt-get install iptables-persistent

次に、次のコマンドを使用して既存のルールをフラッシュします。

netfilter-persistent flush

これで、 `+ iptables +`ユーティリティを使用してルールを追加できます。 この最初のコマンドセットは、Swarmマネージャとして機能するノードで実行する必要があります。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT

すべてのコマンドを入力したら、ルールをディスクに保存します。

netfilter-persistent save

次に、Dockerを再起動します。

sudo systemctl restart docker

Swarmワーカーとして機能するノードで、次のコマンドを実行します。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT

これらの新しいルールをディスクに保存します。

netfilter-persistent save

次に、Dockerを再起動します。

sudo systemctl restart docker

IPTablesを使用してDocker Swarmに必要なポートを開くのに必要なことはそれだけです。 これらのルールの仕組みの詳細については、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-the-iptables-firewall-works[Iptables Firewallの仕組み]をご覧ください。

この方法を使用した後にFirewallDまたはUFWに切り替える場合、適切な方法は、最初にファイアウォールを停止することです。

sudo netfilter-persistent stop

次に、ルールをフラッシュします。

sudo netfilter-persistent flush

最後に、空になったテーブルをディスクに保存します。

sudo netfilter-persistent save

その後、UFWまたはFirewallDに切り替えることができます。

結論

FirewallD、IPTables Tools、UFWは、Linuxの世界における3つのファイアウォール管理アプリケーションです。 Docker Swarmのセットアップに必要なネットワークポートを開くためにそれぞれを使用する方法を学習しました。 どの方法を使用するかは、個人の好みの問題です。すべて同じように機能します。

Related