web-dev-qa-db-ja.com

Ubuntu 16の特定のインターフェイスでDockerコンテナのデータベースへの接続を制限することは可能ですか?

いくつかのネットワークインターフェイスを備えたサーバー(Dockerコンテナで Percona を使用)にMySQLデータベースがあります。

私のシステムはUbuntu 16.04.2 LTSです。

ifconfig

eth0      Link encap:...
          inet addr:95.*.*.*

eth1      Link encap:...
          inet addr:10.*.*.*

ufwを使用したアクセスをeth0インターフェイス上のデータベースに制限し、eth1を許可することは可能ですか?

したがって、10.*.*.*:6603でDBにアクセスできますが、95.*.*.*:6603でアクセスすることはできません。

更新(2017年4月3日):

そのコマンドを使用してルールを追加しました。

Sudo ufw deny in on eth0 to any port 6603 from any proto tcp

状態:

$ Sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
6603/tcp on eth0           DENY        Anywhere
6603/tcp (v6) on eth0      DENY        Anywhere (v6)

しかし、拒否ルールにもかかわらず、MySQLクライアントを使用してDBに入力できます。

しかし、6603ポートはまだ開いています:

nmap -p 6603 95.85.54.75

Starting Nmap 7.01 ( https://nmap.org ) at 2017-03-04 16:14 UTC
Nmap scan report for 95.85.54.75
Host is up (0.0012s latency).
PORT     STATE SERVICE
6603/tcp open  unknown

Nmap done: 1 IP address (1 Host up) scanned in 0.65 seconds
2

問題は、Dockerがファイアウォールルールを改ざんすることでした。

これらの投稿によると(FW + Dockerの危険性Docker1.12 +を干渉しないように設定する方法IPTABLES/FirewallDを使用):

  • 次の内容のファイル/etc/docker/daemon.jsonを作成しました。

    {
        "iptables": false
    }
    
  • Ufwにルールを追加しました:

    Sudo ufw allow in on eth1 to any port 6603 
    

    ufwからの接続のみを許可します。

  • dockerデーモンを再起動します

    Sudo service docker stop
    Sudo service docker start
    

注:この修正は、docker run...で作成されたコンテナーに対してのみ機能します。 Docker Swarmで作成されたコンテナーの場合、この修正は機能しません。

1

ufwを使用する代わりに、MySQLを単一のインターフェースにバインドできます。

Mysqld構成ファイル(通常は/etc/mysql/my.cnfにあります)にはbind-addressというオプションがあり、単一のIPアドレス(たとえば10.0.4.25など)を設定して、MySQLがそのインターフェイスでのみリッスンするように強制できます。

ただし、弱いホストモデルを使用するホストでは(一部のLinuxディストリビューションのように)、防弾ソリューションではありません。あるインターフェースにバインドされたサービスに別のインターフェースから接続することが可能です。

1
jcbermu