GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

DockerコンテナにApacheを使用してModSecurityをインストールする

ModSecurityは、無料のオープンソースで最も人気のあるWebアプリケーションファイアウォール(WAF)であり、さまざまなレイヤー7攻撃からWebアプリケーションを保護します。これは、Apache Webサーバーの監視、ロギング、および要求のフィルタリング用に設計されました。 SQLインジェクション、クロスサイトスクリプティング、トロイの木馬、悪意のあるユーザーエージェント、セッションハイジャックなど、いくつかの攻撃を検出して阻止するコアルールセットが付属しています。

このチュートリアルでは、Dockerコンテナ内にApacheを使用してModSecurity3をインストールする方法を紹介します。

要件
  • Ubuntu20.04を実行しているサーバー。
  • ルートパスワードはサーバーで構成されています。
はじめに

まず、システムを最新バージョンに更新することをお勧めします。次のコマンドで更新できます:

 apt-get update -y 

システムが最新になったら、システムにいくつかの依存関係をインストールする必要があります。次のコマンドですべてをインストールできます:

 apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y 

すべての依存関係がインストールされたら、次のステップに進むことができます。

Dockerをインストールする

次に、DockerCEをシステムにインストールする必要があります。デフォルトでは、最新バージョンのDockerはUbuntuのデフォルトリポジトリに含まれていません。そのため、Docker公式リポジトリをAPTに追加する必要があります。

まず、次のコマンドを使用してDockerGPGキーをダウンロードして追加します。

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add-

次に、次のコマンドを使用してDockerCEリポジトリをAPTソースリストに追加します。

 echo "deb [arch =amd64] https://download.docker.com/linux/ubuntu $(lsb_release -sc)stable"> /etc/apt/sources.list.d/docker-ce.list 

リポジトリが追加されたら、次のコマンドでリポジトリを更新します。

 apt-get update -y 

リポジトリが更新されたら、次のコマンドを使用して最新バージョンのDockerCEをインストールします。

 apt-get install docker-ce -y 

Docker CEをインストールした後、次のコマンドを使用して、インストールされているDockerCEのバージョンを確認します。

 docker --version 

次の出力が得られるはずです:

 Dockerバージョン20.10.6、ビルド370c289 

次のコマンドを使用して、Dockerサービスのステータスを確認することもできます。

 systemctl status docker 

次の出力が得られるはずです:

? docker.service-Dockerアプリケーションコンテナエンジンロード済み:ロード済み(/lib/systemd/system/docker.service;有効;ベンダープリセット:有効)アクティブ:Sun 2021-05-16 06:49:29 UTC以降アクティブ(実行中)。 38秒前TriggeredBy:? docker.socketドキュメント:https://docs.docker.comメインPID:8964(dockerd)タスク:8メモリ:40.6M CGroup:/system.slice/docker.service ?? 8964 / usr / bin / dockerd -H fd :// --containerd =/ run / containerd / containerd.sockMay 16 06:49:29 ubuntu2004 dockerd [8964]:time ="2021-05-16T06:49:29.365433228Z" level =warning msg="カーネルはスワップメモリ​​をサポートしていませんli>5月16日06:49:29ubuntu2004dockerd [8964]:time ="2021-05-16T06:49:29.365916961Z" level =warning msg="カーネルはcgroupblkiow>5月16日をサポートしていません06:49:29 ubuntu2004 dockerd [8964]:time ="2021-05-16T06:49:29.366112111Z" level =warning msg="カーネルはcgroupblkiowをサポートしていませんw>5月16日06:49:29ubuntu2004dockerd [ 8964]:time ="2021-05-16T06:49:29.366653374Z" level =info msg ="Loading container:start。" May 16 06:49:29 ubuntu2004 dockerd [8964]:time ="2021-05-16T06 :49:29.498790388Z "level =info msg ="デフォルトのブリッジ(docker0)にはI> May 16 06:49:29 ubuntu2004 dockerd [8964]:time ="2021-05-16T06:49:2が割り当てられています9.576691602Z "level =info msg ="コンテナの読み込み:完了。"5月16日06:49:29ubuntu2004 dockerd [8964]:time =" 2021-05-16T06:49:29.610542206Z "level =info msg="Dockerデーモン"commit =8728dd2graphdriver(s)=o> May 16 06:49:29 ubuntu2004 dockerd [8964]:time =" 2021-05-16T06:49:29.611668583Z "level =info msg="デーモンが初期化を完了しました"5月16 06:49:29 ubuntu2004 systemd [1]:Dockerアプリケーションコンテナエンジンを開始しました。5月16日06:49:29 ubuntu2004 dockerd [8964]:time ="2021-05-16T06:49:29.690496888Z" level =info msg =「APIlistenon/run/docker.sock」行1-21/21(END)

終了したら、次のステップに進むことができます。

ModSecurity用のDockerfileを作成する

次に、Ubuntuコンテナ内にModSecurityをインストールするためのDockerfileを作成する必要があります。

まず、ディレクトリを/ optに変更し、 modsec_rules.confを作成します。 次のコマンドでファイルを作成します:

 cd / opt 
nano modsec_rules.conf

次の行を追加します:

インクルード"/etc/apache2/modsecurity.d/modsecurity.conf"インクルード"/etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf"インクルード"/etc/apache2/modsecurity.d/ owasp-crs / rules/*。conf"

ファイルを保存して閉じてから、次のコマンドを使用して別のファイルを作成します。

 nano 000-default.conf 

次の行を追加します:

  modsecurity_rules_file /etc/apache2/modsecurity.d/modsec_rules.confServerAdmin[メール保護]DocumentRoot/ var / www / html ErrorLog $ {APACHE_LOG_DIR} /error.log CustomLog $ {APACHE_LOG_DIR} /access.logの組み合わせ

終了したら、ファイルを保存して閉じます。 Dockerfileは、ビルドプロセス中に上記のファイルをDockerコンテナにコピーします。

最後に、次のコマンドを使用してDockerfileを作成します。

 nano Dockerfile 

次の行を追加します:

#DockerコンテナにModsecurityをインストールします; FROMubuntu:latestARG DEBIAN_FRONTEND =noninteractive#システムを更新/アップグレードしますRUNapt-get update -y#必要な依存関係をインストールしますRUNapt-get install -y g ++ flex bison curl apache2-dev \ doxygen libyajl -dev ssdeep liblua5.2-dev \ libgeoip-dev libtool dh-autoreconf \ libcurl4-gnutls-dev libxml2 libpcre ++-dev \ libxml2-dev git wget tar apache2#LibModsecurityのダウンロードRUN wget https://github.com/SpiderLabs/ModSecurity /releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz#ダウンロードしたファイルを抽出RUNtarxzf modsecurity-v3.0.4.tar.gz &&rm -rf modsecurity-v3.0.4.tar.gz#コンパイルしてLibModsecurityRUNのインストールcdmodsecurity-v3.0.4&&\ ./build.sh &&./configure &&\ make &&make install#ModSecurityのインストール-Apache ConnectorRUN cd〜 &&git clone https://github.com/SpiderLabs/ModSecurity-apacheRUN cd 〜/ ModSecurity-apache &&\ ./autogen.sh &&\ ./configure --with-libmodsecurity =/ usr / local / modsecurity / &&\ make &&\ make install#ApacをロードしますModSecurityコネクタModuleRUNecho"LoadModule security3_module /usr/lib/apache2/modules/mod_security3.so">> /etc/apache2/apache2.conf#ModSecurityRUNmkdirを構成します/etc/apache2/modsecurity.d&&\cpmodsecurity-v3。 0.4/modsecurity.conf-推奨/etc/apache2/modsecurity.d/modsecurity.conf&&\ cp modsecurity-v3.0.4 / unicode.mapping /etc/apache2/modsecurity.d/ &&\ sed -i's / SecRuleEngine DetectionOnly / SecRuleEngine On /'/etc/apache2/modsecurity.d/modsecurity.confADD modsec_rules.conf /etc/apache2/modsecurity.d/# UbuntuRUN git clonehttps://github.comにOWASPModSecurityコアルールセット(CRS)をインストールします/SpiderLabs/owasp-modsecurity-crs.git /etc/apache2/modsecurity.d/owasp-crs &&\ cp /etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf.example / etc / apache2 / modsecurity.d / owasp-crs / crs-setup.conf#ModSecurityRUNmvをアクティブ化/etc/apache2/sites-available/000-default.conf/etc/apache2/sites-available/000-default.conf.oldADD 000-default .conf / etc / apache2 / sites-available / EXPOSE 80CMD apach ectl -D FOREGROUND 

終了したら、ファイルを保存して閉じます。

上記のファイルは、Ubuntuイメージをダウンロードし、すべての依存関係をインストールし、ModSecurityをダウンロードしてコンパイルし、ModSecurityと連携するようにApacheを構成します。

この時点で、 Dockerfile 準備ができています。これで、次のステップに進むことができます。

ApacheModSecurityイメージをビルドしてコンテナを起動します

次に、ディレクトリを/ optに変更し、次のコマンドを使用してApacheModSecurityのDockerイメージをビルドします。

 cd / opt 
dockerbuild。

ビルドプロセスが完了すると、次の出力が表示されます。

ステップ13/17:git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /etc/apache2/modsecurity.d/owasp-crs &&cp/etc/apache2/modsecurity.dを実行します/owasp-crs/crs-setup.conf.example /etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf--->00dfa2a5cd23で実行中'/etc/apache2/modsecurity.d/owasp-にクローンを作成crs'...中間コンテナの削除00dfa2a5cd23--->b38c1d874d2fステップ14/17:RUN mv /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.old --->12c9e6d2c559で実行中中間コンテナの削除12c9e6d2c559--->899e26019297ステップ15/17:追加000-default.conf / etc / apache2 / sites-available / ---> eb11751afd6cステップ16/17:EXPOSE80--->実行中in2f4ba47e2b66中間コンテナの削除2f4ba47e2b66--->dd59b0ac7c7cステップ17/17:CMD apachectl -D FOREGROUND--->98b8cc77df0fで実行中中間コンテナの削除98b8cc77df0f--->f603dbc38018 

次のコマンドを使用して、すべてのDockerイメージを一覧表示できるようになりました。

docker画像

次の出力が得られるはずです:

リポジトリタグ画像ID作成サイズf603dbc3801832秒前2.48GBubuntu最新7e0aa2d69a153週間前72.7MB  

次に、上記の出力から最初のイメージIDを選択し、次のコマンドを使用してApacheModSecurityコンテナーを起動します。

 docker run --name modsec-apache -ditp 80:80 f603dbc38018 

次の出力が得られるはずです:

 40eb0e77e61635c3cee2bfaffbd9489bc7d20aa3e1befb52749de079aaadb528 

これで、次のコマンドを使用して実行中のコンテナーを確認できます。

 docker ps 

次の出力が得られるはずです:

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES40eb0e77e616 f603dbc38018 "/ bin / sh-c'apachec…"17秒前アップ15秒0.0.0.0:80->80/ tcp、:::80-> 80 / tcp modsec -apache 

ご覧のとおり、ModSecurityコンテナが起動し、ポート80でリッスンしています。

ModSecurityを確認する

この時点で、ModSecurityコンテナが実行されています。次に、ModSecurityルールが悪意のあるリクエストをブロックするかどうかをテストします。

これを行うには、ターミナルを開き、次のコマンドを実行します。

 curl localhost?doc =/ bin / ls 

次の出力が表示されます。

 <!DOCTYPE HTML PUBLIC "-// IETF // DTD HTML 2.0 // EN">  403禁止

禁止

このリソースにアクセスする権限がありません。


Apache / 2.4.41(Ubuntu)サーバー(ローカルホストポート80)

403Forbidden」が表示されます 「エラー。ModSecurityが上記のリクエストをブロックしたため。

詳細については、Apacheログを確認することもできます。

これを行うには、まず、次のコマンドを使用してコンテナに接続します。

 docker exec -it modsec-apache / bin / bash 

接続すると、次のシェルを取得する必要があります:

 [メール保護]:/#

次に、次のコマンドを使用してApacheログを確認します。

 tail -f /var/log/apache2/error.log 

ModSecurityが悪意のあるリクエストをブロックしたことがわかります:

 [Sun May 16 07:24:54.456327 2021] [mpm_event:notice] [pid 15:tid 140204464299072] AH00489:Apache / 2.4.41(Ubuntu)が構成されました-通常の操作を再開します[Sun May 16 07:24: 54.456352 2021] [core:notice] [pid 15:tid 140204464299072] AH00094:コマンドライン:'/ usr / sbin / apache2 -D FOREGROUND' [Sun May 16 07:25:36.680515 2021] [:error] [pid 16: tid 140204216108800] [client 172.17.0.1:45298] ModSecurity:警告。 "Operator` PmFromFile'とパラメーター`unix-shell.data'を変数`ARGS:doc'(値: `/ bin / ls')[file"/etc/apache2/modsecurity.d/owasp-crs/rules/と照合しましたREQUEST-932-APPLICATION-ATTACK-RCE.conf "] [line" 496 "] [id" 932160 "] [rev" "] [msg"リモートコマンド実行:Unixシェルコードが見つかりました "] [data"一致したデータ:bin / lsがARGS:doc内で見つかりました:/ bin / ls "] [severity" 2 "] [ver" OWASP_CRS / 3.2.0 "] [maturity" 0 "] [accuracy" 0 "] [tag" application-multi "] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level / 1"] [tag "OWASP_CRS"] [tag "OWASP_CRS / WEB_ATTACK / COMMAND_INJECTION"] [tag "WASCTC / WASC-31"] [tag "OWASP_TOP_10 / A1"] [tag "PCI / 6.5.2"] [hostname "172.17.0.2"] [uri "/"] [unique_id "162114993662.860969"] [ref "o1,6v10,7t:urlDecodeUni、t:cmdLine、t:normalizePath、t:lowercase"] 
結論

おめでとう!これで、Dockerコンテナ内にModSecurityが正常にインストールされました。 Docker環境にこのソリューションを実装するための十分な知識が得られたことを願っています。ご不明な点がございましたら、お気軽にお問い合わせください。


Docker
  1. Dockerを使用してWireguardVPNサーバーをインストールする

  2. Dockerを使用してJenkinsをインストールする方法

  3. Dockerを使用してWordPressをインストールする方法

  1. ElasticStackを使用したコンテナインスツルメンテーション

  2. Apache を使用して Ubuntu 22.04 に phpMyAdmin をインストールする

  3. Docker Compose、Nginx、SSL を使用した Apache で WordPress をインストールする

  1. UbuntuにDockerでWordPressをインストールする方法

  2. LinodeにDockerを使用してnginxコンテナをデプロイする方法

  3. DockerコンテナにVimをインストールする方法