グローバルIPがついたサーバーでDockerを動かすとして

ここ最近Dockerの話題ばかりであれですが、Dockerfileを作ったりはまだです。今まですべてローカルで試していたので、ここらへんで外のサーバーに設置してみようかと。

外のサーバーって何?って簡単に説明すると、グローバルIPがついてて
インターネット環境があれば、世界中のどこでも誰でもアクセスできるサーバーです。

Dockerのセキュリティって?

外部につながったものを触るならセキュリティは一番気をつけたいところ。
おなじKernel3系のCentOS7とかの場合、新しいfirewalldというものが動いてますが

# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since 水 2014-07-16 17:50:22 JST; 3h 50min ago
  Process: 3513 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
 Main PID: 3123 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─3123 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

 7月 16 17:50:22 dockerkencho systemd[1]: Started firewalld - dynamic firewall daemon.
 7月 16 17:50:43 dockerkencho systemd[1]: Reloading firewalld - dynamic firewall daemon.
 7月 16 17:50:43 dockerkencho systemd[1]: Reloaded firewalld - dynamic firewall daemon.

設定方法とかは割愛するけど、coreosにはこいつがありません。

# systemctl status firewalld
● firewalld.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

でも

SSHしか動いてないので鍵認証オンリーにしておけばそれだけでいいかと。

 

何かないの?

iptablesは設定できますが、たとえば設定してみてポートスキャンした場合。

Not shown: 991 filtered ports
PORT    STATE  SERVICE
22/tcp  open   ssh
25/tcp  closed smtp
80/tcp  closed http
110/tcp closed pop3
143/tcp closed imap
465/tcp closed smtps
587/tcp closed submission
993/tcp closed imaps
995/tcp closed pop3s

Nmap done: 1 IP address (1 host up) scanned in 58.18 seconds

こんな感じで出てしまいますので、これがいいのか悪いのかは・・・分からん。

ただ以前のように、service iptables saveで保存できないぽいので再起動するとまた設定が必要です。iptables-saveしても戻るので。
そんな訳で、SSHを鍵認証にしておけば別途他に何かする必要もないのではと思います。

KVMと大きな違いが、KVMはハイパーバイザから動かしている仮想サーバーのプロセスを見ると、QEMUというプロセス単体になりますが、Dockerの場合はコンテナーが動かしているプロセスがそのままあります。どういう事かというとコンテナーのhttpdがホストのtopで見れます。

Mem:   1022240k total,   954780k used,    67460k free,     1256k buffers
Swap:        0k total,        0k used,        0k free,   418216k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4933 48        20   0  416m  19m 8604 S  2.3  2.0   0:00.22 httpd
 4938 48        20   0  414m  16m 8236 S  2.0  1.7   0:00.07 httpd
 4934 48        20   0  415m  17m 7936 S  1.7  1.8   0:00.09 httpd
 4939 48        20   0  416m  18m 7936 S  1.7  1.9   0:00.19 httpd
 4417 core      20   0 63916 3612 2840 S  0.3  0.4   0:00.21 sshd
 4898 27        20   0  490m  60m  11m S  0.3  6.0   0:00.15 mysqld
    1 root      20   0 22040 4828 3008 S  0.0  0.5   0:04.18 systemd

上のtop画面はCoreOSのものですが、コンテナーのhttpdとmysqldがあります。
コンテナーのリスクは本体のリスクになりえるということでしょう。

無防備なコンテナーが動いている場合はもちろんダメなので、コンテナー側(サービス動いてるやつ)でしっかり守ろうという事

 

WordPressのプラグインなんかでも多いと思うけど、簡単に使えるようになる代償としてクラックされやすいというか、Dockerコンテナーの場合は初めからされているケースがあるだろうし、普及の仕方によっては、もしかしたらあぶないサーバーが増えてしまうんじゃないかなぁと思ったり。

こないだDocker Hub Registry公式のCentOS6を使わずに(あるのに気付かずだが)どこかのだれかのイメージをDLして使った訳だけども、これから色々増えてくるにあたって十分に気を付けたいところ。

成り行きまかせでプログラムを落として、ときにどこかのサーバーを傷つけたとしても、そのたび心痛めている時代じゃないとか悲しいよね。

野良リポジトリとか使うときは気を付けて。

 

最低限のインストール手順

最初はターミナルからではなく、手打ちになるのでサクッと。

$ sudo vi /etc/systemd/network/static.network
[Match]
Name=ens*

[Network]
Address=IPアドレス/CIDR表記のサブネット
Gateway=ゲートウェイ
DNS=DNSのIP

このファイルを作ってネットワークを再起動します。

systemctl restart systemd-networkd

これでpingも通るはず。

$ sudo passwd core

これでターミナルでつながるはず。

あとはcloud-configを投入するのですが、ローカル時とちがってDHCPではないはずだから、ネットワークの設定は必須。
あとcoreユーザーを使わない場合は、グループの設定が必須です。やっておかないとsudoできずに積みます。
公開鍵を用意しておくのも忘れずに。

この3点に注意すればひとまず大丈夫だと思う。coreosの公式サイトをみるとめちゃくちゃ設定項目があるので、突き詰めていくとすごいのだろう。

てな感じです。

 

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *