ここ最近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の公式サイトをみるとめちゃくちゃ設定項目があるので、突き詰めていくとすごいのだろう。
てな感じです。