banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

UbuntuにおけるDockerのインストールとテスト環境の迅速な構築

なぜ 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"]
}

このミラーアドレスには以下の推奨があります:

image

image

モザイクがかかっている部分が加速器アドレスです。

速度の推奨:自分で wordpress を引っ張ってみたところ、阿里云と DaoCloud の速度はほぼ同じで、他は少し劣ります。個人的には DaoCloud の使用をお勧めします。

その後、Docker サービスを再起動します:service docker restart これで、wordpress を引っ張ってテストできます:docker pull wordpress

WordPress のサンプルテスト環境を構築する#

公式の Docker イメージを使用できますdocker pull wpscanteam/vulnerablewordpress

image

プルが完了したら実行し、ポート 80 と 3306 を転送します。

docker run --name vulnerablewordpress -d -p 80:80 -p 3306:3306 wpscanteam/vulnerablewordpress

image

IP を開くと WordPress のインストール画面に入れます:

image

自分で WordPress と MySQL5.6 を使って構築することもできます。指示を学ぶついでに、チュートリアルは以下の通りです:

  1. ミラーアドレスを設定した後、WordPress イメージを引っ張ります docker pull wordpress と MySQL5.6 イメージを引っ張ります docker pull mysql:5.6

引っ張りのイメージ:

image

  1. 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が返されます。

image

  1. MySQL にログインしてデータベースを作成します。
docker exec -it testmysql mysql -uroot -p
#ここでのtestmysqlは前のMySQLコンテナの名前です。

以前設定した root パスワード (a123456) を入力してデータベースにログインします:

image

  1. データベースを作成します。

create database wordpress;

ctrl+D を押すか、quit; と入力して退出します。

image

  1. WordPress コンテナを作成します。MySQL コンテナを作成するのと似ています。
docker run --name testwordpress --link testmysql:db -p 80:80 -d wordpress:latest
#パラメータの説明:
#80:80 コンテナの80ポートとホストの80ポートを相互接続
#testmysql:db WordPressコンテナをMySQLコンテナに接続し、dbというエイリアスを付けます。

image

  1. ブラウザでホストの IP を開くと、WordPress のインストール画面にリダイレクトされます:

image

  • ユーザー名 (MySQL の root ユーザー)
  • パスワード (設定した MySQL の root パスワードを覚えていますか?)
  • データベースホスト(先ほど設定したエイリアスを覚えていますか?)

image

他はデフォルトのままで、インストールが完了しました:

image

これで侵入テスト環境が構築されました。

記事の冒頭で言及した記事から 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
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。