技術部開発課にてインフラ周りを担当している飯田です。
前回に引き続き「社内の誰もがPC内で完結する攻撃遮断くんの管理画面」を目指して、ローカル開発環境にDockerを適用していこうと思います。今回からはDockerのコンテナを実際に稼動させていきます。
現時点では、Dockerでのコンテナ化対象は下記にすることにします。
1. MySQL
2. Elasticsearch
3. Ruby on Rails
4. 監視センター(攻撃遮断くん/攻撃見えるくん)
※前回の記事では「WAFセンター」と記載していましたが、「監視センター」という表現の方が正しいようなので今後は「監視センター」と記載します。
これらをDockerのコンテナで稼働させ、遮断くん/見えるくんの管理画面を表示させるまでを順次行っていきます。
言わずと知れたRDBですね。攻撃遮断くんのシステムにおいても、お客様情報等を保存しています。Dockerに公式のコンテナが存在しているので利用します。
$ docker pull mysql
タグを指定せずに”latest”のコンテナイメージを取得しました。MySQLサーバのコンテナを起動してみます。
$ docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=csc mysql
“root”ユーザのパスワードだけを指定しています。ではMySQLクライアントから接続を行ってみましょう。ローカル環境にMySQLクライアントをインストールしていれば直接接続することも可能ですが、今回はMySQLクライアント用にもコンテナを起動してコンテナ間でのアクセスをしてみます。ちなみにローカルのMySQLクライアントからアクセスするには、MySQLサーバのコンテナ起動時にポートのオプション(-p)を指定するのが必要です。
$ docker run -it --rm --link mysql:mysql mysql mysql -hmysql -uroot -p Enter password: csc Your MySQL connection id is 4 Server version: 5.7.16 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>
接続ができました。現時点での”latest”におけるMySQLのVersionが”5.7.16″であることがわかります。コマンドの実行に”mysql”という文字列が少々多すぎて混乱しそうなので、変更して下記のように実行することもできます。
$ docker run -it --rm --link mysql:server mysql mysql -hserver -uroot -p
実際にローカル環境での運用を考えるとすると、MySQLのデータディレクトリをコンテナの外に出しておいた方が良いといった事など考えるべき点は多々ありますが、今回はお試しという事で考慮していません。また、以前は”–link”オプションを使用しなくても同じネットワーク上に存在するコンテナ間では名前解決できていた気がするのですが、今回試していたVersionでは名前解決ができていなかったので指定しています。
こちらも言わずと知れた全文検索エンジンですね。攻撃遮断くんのシステムにおいては、管理画面に表示する攻撃状況や検知履歴といったものを保存しています。こちらも公式のコンテナが存在しているので利用します。
$ docker pull elasticsearch
タグを指定せずに”latest”のコンテナイメージを取得しました。実際に稼動しているVersionと合わせた方が良さそうですが、Versionに依存する機能は使われていないはずなので今は気にしません。問題があった時にはVersionを合わせるようにしようと思いますが、こういったお手軽さもDockerの良い点ではないでしょうか。では実際にElasticsearchのコンテナを起動します。
$ docker run -d --name elasticsearch -p 9200:9200 elasticsearch
MySQLの時はクライアントもコンテナで起動して確認しましたが、Elasticsearchは`curl`コマンドで確認を行いたいのでローカル環境からアクセス可能となるように9200番ポートをオプションで指定しています。`curl`コマンドで確認してみます。
$ curl http://localhost:9200/ { "name" : "Rock", "cluster_name" : "elasticsearch", "cluster_uuid" : "GG8IbiwXTvKe0cK8PqFpXg", "version" : { "number" : "2.4.1", "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16", "build_timestamp" : "2016-09-27T18:57:55Z", "build_snapshot" : false, "lucene_version" : "5.5.2" }, "tagline" : "You Know, for Search" } $
Elasticsearchが稼動していることが確認できると思います。
ここまででDockerのコンテナは下記のように稼動しています。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9583660553bf elasticsearch "/docker-entrypoint.s" 2 minutes ago Up 2 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp elasticsearch 9e253345da08 mysql "docker-entrypoint.sh" 2 hours ago Up 2 hours 3306/tcp mysql $
続いてRuby on Railsを、と進めようと思いますが少々長くなってしまったのでまた次回にしたいと思います。
CyberSecurityTIMESを運営している弊社サイバーセキュリティクラウドでは、Webセキュリティ対策のソフトウェア「攻撃遮断くん」を提供しております。専門家によるサポートも充実しております。お気軽にお問合せください。
「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。
https://www.shadan-kun.com/
この記事と一緒に読まれています
“Docker”を使ってみよう〜Ruby on Rails編〜
2016.12.01
セキュリティ対策
Apacheモジュール mod_dumpost をご紹介します!
2016.06.21
セキュリティ対策
Apache Struts2の脆弱性で広がるサイバー攻撃の被害
2017.03.30
セキュリティ対策
2019.08.20
セキュリティ対策
2016.05.19
セキュリティ対策
2019.09.10
セキュリティ対策