なぜ Docker を使うのか?#
実際の学習では、異なる脆弱性環境をシミュレーションする必要がよくありますが、パブリックインスタンスを使用すると、多少のリスクが伴います。そのため、ローカルのシミュレーション環境を構築して脆弱性をテストするのは良い選択です。Docker はここ 2 年で非常に人気のあるオープンソースのコンテナエンジンであり、多くの Docker コンテナを使用したターゲット環境が新しい学習者のために提供されています。
この記事を書く理由:私は Docker の強力さをずっと知っていましたが、始めるための例が必要でした。
以下の 2 つの公式アカウントの記事:
は、私が Docker をインストールする決意を固めるきっかけとなりました。
なぜ Ubuntu なのか?#
一般的なテスト環境には Win10、Kali、Win7、Win2008、Win2003 などがありますが、Linux 環境として最も適しているのは Ubuntu です。
私たちの多くが普段使用する環境は Win10 です(MacOS の人は座ってください!)。では、Win10 に Docker をインストールするのはどうでしょうか?
Docker for Windows の公式ドキュメント:https://docs.docker.com/docker-for-windows/install/ には次のように書かれています。
Win10 の家庭版は Docker for Windows をサポートしていません。Win10 の他のバージョン、例えばプロフェッショナル版(私もこれをインストールしました)は、BIOS で仮想化機能を有効にする必要があります。私は何度も Docker for Windows を使おうとしましたが、Hyper-V を有効にすると、キャンパスネットワークのソフトウェアが「仮想環境でソフトウェアを実行できません」とエラーを出します。
そのため、インストール環境がサポートされていないマシンでは Docker Toolbox を使用するしかありません。ドキュメントのアドレス:https://docs.docker.com/toolbox/toolbox_install_windows/
Docker Toolbox は VirtualBox と一緒に使用する必要があります。それでは、なぜ Ubuntu で Docker をインストールするのか?
- 軽量のデスクトップ Linux ターゲットが必要
- 仮想マシンはスナップショットを頻繁に復元できる(Docker の存在によりスナップショットの煩雑さが大幅に軽減される)
- ただ使いたい!(ツンデレ顔)
Docker のインストール#
インストール#
ここでは少し怠けて、直接 su root で root アカウントに切り替えましたので、コマンドが異常に実行された場合は、前に sudo を追加してください。
- 必要なパッケージをインストールします(ここでは、あなたの Ubuntu がすでに国内の apt ミラーを設定していると仮定します):apt install docker.io
- インストールが完了したらバージョン情報を確認します:docker -v
- 権限を追加します(オプション):現在のユーザーを docker ユーザーグループに追加し、sudo なしで docker を実行できるようにします(再ログインが必要):sudo usermod -aG docker $USER
ミラーの加速設定#
Git と同様に、デフォルトのミラーはサーバーが海外にあるため、速度が非常に遅いので、国内のミラーに変更する必要があります。
最新バージョンの Docker の設定ファイルは /etc/docker/daemon.json で、デフォルトでは Docker をインストールした際には存在しません。vim で開くと自動的に作成されます。
vim /etc/docker/daemon.json に以下のコードを貼り付けます:
{
"registry-mirrors": ["http://example.m.daocloud.io"]
}
このミラーアドレスには以下の推奨があります:
- 网易加速器:http://hub-mirror.c.163.com
- 公式中国加速器:https://registry.docker-cn.com
- ustc のミラー:https://docker.mirrors.ustc.edu.cn
- 阿里云で自分のミラー加速器を設定できます:
- まず阿里開発者プラットフォームにログインします:https://dev.aliyun.com/search.html
- ログイン後、Docker イメージリポジトリに入ります:https://cr.console.aliyun.com/cn-hangzhou/mirrors、加速器タブを選択すると、システムが私たちのために専用の加速器アドレスを生成しているのが見えます:https://xxxxx.mirror.aliyuncs.com
- DaoCloud でも設定できます:
- DaoCloud のメインサイトで:https://www.daocloud.io/ 登録してログインします
- ホームページの右上にロケットボタンがあります:
- その後、広告画面がポップアップします:https://www.daocloud.io/mirror、見た目は広告ですが、実際には私たちのためにユニークな加速器アドレスが生成されています。下にスクロールして設定チュートリアルの部分を見つけます:
モザイクがかかっている部分が加速器アドレスです。
速度の推奨:自分で wordpress を引っ張ってみたところ、阿里云と DaoCloud の速度はほぼ同じで、他は少し劣ります。個人的には DaoCloud の使用をお勧めします。
その後、Docker サービスを再起動します:service docker restart これで、wordpress を引っ張ってテストできます:docker pull wordpress
WordPress のサンプルテスト環境を構築する#
公式の Docker イメージを使用できます:docker pull wpscanteam/vulnerablewordpress
プルが完了したら実行し、ポート 80 と 3306 を転送します。
docker run --name vulnerablewordpress -d -p 80:80 -p 3306:3306 wpscanteam/vulnerablewordpress
IP を開くと WordPress のインストール画面に入れます:
自分で WordPress と MySQL5.6 を使って構築することもできます。指示を学ぶついでに、チュートリアルは以下の通りです:
- ミラーアドレスを設定した後、WordPress イメージを引っ張ります
docker pull wordpress
と MySQL5.6 イメージを引っ張りますdocker pull mysql:5.6
引っ張りのイメージ:
- MySQL コンテナを作成します。
docker run --name testmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a123456 -d mysql:5.6
#パラメータの説明:
#MYSQL_ROOT_PASSWORD=a123456 MySQLのrootパスワードをa123456に設定
#testmysql コンテナ名をtestmysqlに設定します。この名前は後で使用するので覚えておいてください。生成後にIDが返されます。
- MySQL にログインしてデータベースを作成します。
docker exec -it testmysql mysql -uroot -p
#ここでのtestmysqlは前のMySQLコンテナの名前です。
以前設定した root パスワード (a123456) を入力してデータベースにログインします:
- データベースを作成します。
create database wordpress;
ctrl+D を押すか、quit; と入力して退出します。
- WordPress コンテナを作成します。MySQL コンテナを作成するのと似ています。
docker run --name testwordpress --link testmysql:db -p 80:80 -d wordpress:latest
#パラメータの説明:
#80:80 コンテナの80ポートとホストの80ポートを相互接続
#testmysql:db WordPressコンテナをMySQLコンテナに接続し、dbというエイリアスを付けます。
- ブラウザでホストの IP を開くと、WordPress のインストール画面にリダイレクトされます:
- ユーザー名 (MySQL の root ユーザー)
- パスワード (設定した MySQL の root パスワードを覚えていますか?)
- データベースホスト(先ほど設定したエイリアスを覚えていますか?)
他はデフォルトのままで、インストールが完了しました:
これで侵入テスト環境が構築されました。
記事の冒頭で言及した記事から WordPress イメージをダウンロードし、VirtualBox で構築するのはずっと便利ではありませんか?
よく使う Docker コマンド#
- docker version:バージョン番号を確認
- docker run hello-world:テストイメージをロードしてテスト
- docker images:現在どのイメージがあるかを確認
- docker ps:すべての実行中のコンテナを確認
- docker ps -a:すべてのコンテナを確認
- docker stop containerId(コンテナの ID):ID が xxx のコンテナを停止
- docker rm containerId(コンテナの ID):ID が xxx のコンテナを削除
- イメージ削除:
- すべてのコンテナを停止しなければ、イメージを削除できません:docker stop $(docker ps -a -q)
- すべてのコンテナを削除したい場合は、さらに次のコマンドを追加します:docker rm $(docker ps -a -q)
- イメージを削除するには、イメージの ID を指定して削除します:docker rmi
- タグのないイメージ、つまり ID がのイメージを削除したい場合は:docker rmi $(docker images | grep "^" | awk "{print $3}")
- すべてのイメージを削除したい場合は:docker rmi $(docker images -q)
- コンテナのポートマッピングを設定します:docker run [-P][-p]
- -P: コンテナのすべてのポートをマッピング
- -p: どのコンテナのポートをマッピングするかを指定
- いくつかの例:
- containerPort のみ指定して、ホストのポートをランダムにマッピング:docker run -p 80 -i -t /bin/bash
- hostPortでホストポートとコンテナポートを同時に指定:docker run -p 8080:80 -i -t /bin/bash
- ipで IP とコンテナのポートを指定:docker run -p 0.0.0.0:80 -i -t /bin/bash
- ip:hostPortで IP、ホストポート、コンテナポートを同時に指定:docker run -p 0.0.0.0:8080:80 -i -t /bin/bash