GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Instal ModSecurity dengan Apache di Docker Container

ModSecurity adalah firewall aplikasi web (WAF) gratis, sumber terbuka, dan terpopuler yang melindungi aplikasi web Anda dari berbagai serangan Layer 7. Itu dirancang untuk pemantauan server web Apache, logging, dan permintaan penyaringan. Muncul dengan Kumpulan Aturan Inti yang mendeteksi dan menghentikan beberapa serangan termasuk, injeksi SQL, skrip lintas situs, Trojan, agen pengguna yang buruk, pembajakan sesi, dan banyak lagi.

Dalam tutorial ini, saya akan menunjukkan cara menginstal ModSecurity 3 dengan Apache di dalam wadah Docker.

Persyaratan

  • Server yang menjalankan Ubuntu 20.04.
  • Kata sandi root dikonfigurasi di server Anda.

Memulai

Pertama, disarankan untuk memperbarui sistem Anda ke versi terbaru. Anda dapat memperbaruinya dengan perintah berikut:

apt-get update -y

Setelah sistem Anda mutakhir, Anda perlu menginstal beberapa dependensi ke sistem Anda. Anda dapat menginstal semuanya dengan perintah berikut:

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

Setelah semua dependensi terinstal, Anda dapat melanjutkan ke langkah berikutnya.

Instal Docker

Selanjutnya, Anda perlu menginstal Docker CE ke sistem Anda. Secara default, versi terbaru Docker tidak disertakan dalam repositori default Ubuntu. Jadi, Anda perlu menambahkan repositori resmi Docker ke APT.

Pertama, unduh dan tambahkan kunci GPG Docker dengan perintah berikut:

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

Selanjutnya, tambahkan repositori Docker CE ke daftar sumber APT dengan perintah berikut:

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

Setelah repositori ditambahkan, perbarui repositori dengan perintah berikut:

apt-get update -y

Setelah repositori diperbarui, instal versi terbaru Docker CE dengan perintah berikut:

apt-get install docker-ce -y

Setelah menginstal Docker CE, verifikasi versi Docker CE yang diinstal dengan perintah berikut:

docker --version

Anda akan mendapatkan output berikut:

Versi Docker 20.10.6, build 370c289

Anda juga dapat memeriksa status layanan Docker dengan perintah berikut:

systemctl status buruh pelabuhan

Anda akan mendapatkan output berikut:

? docker.service - Mesin Kontainer Aplikasi Docker Dimuat:dimuat (/lib/systemd/system/docker.service; diaktifkan; preset vendor:diaktifkan) Aktif:aktif (berjalan) sejak Sun 2021-05-16 06:49:29 UTC; 38 detik yang laluDipicu Oleh:? docker.socket Dokumen:https://docs.docker.com PID Utama:8964 (dockerd) Tugas:8 Memori: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="Kernel Anda melakukannya tidak mendukung memori swap li>16 Mei 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.365916961Z" level=warning msg="Kernel Anda tidak mendukung cgroup blkio w>16 Mei 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.366112111Z" level=warning msg="Kernel Anda tidak mendukung cgroup blkio w>16 Mei 06:49:29 ubuntu2004 dockerd[ 8964]:time="2021-05-16T06:49:29.366653374Z" level=info msg="Memuat wadah:mulai."16 Mei 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06 :49:29.498790388Z" level=info msg="Jembatan default (docker0) ditetapkan dengan I>16 Mei 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:2 9.576691602Z" level=info msg="Memuat wadah:selesai."16 Mei 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.610542206Z" level=info msg="Docker daemon " commit=8728dd2 graphdriver(s)=o>16 Mei 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.611668583Z" level=info msg="Daemon telah menyelesaikan inisialisasi"Mei 16 06:49:29 ubuntu2004 systemd[1]:Memulai Mesin Kontainer Aplikasi Docker. 16 Mei 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.690496888Z" level=info msg="API mendengarkan di /run/docker.sock"baris 21/21/21 (AKHIR)

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Buat Dockerfile untuk ModSecurity

Selanjutnya, Anda perlu membuat Dockerfile untuk menginstal ModSecurity di dalam wadah Ubuntu.

Pertama, ubah direktori ke /opt dan buat modsec_rules.conf file dengan perintah berikut:

cd /opt
nano modsec_rules.conf

Tambahkan baris berikut:

Sertakan "/etc/Apache2/modsecurity.d/modsecurity.conf"Sertakan "/etc/Apache2/modsecurity.d/owasp-crs/crs-setup.conf"Sertakan "/etc/apache2/modsecurity.d/ owasp-crs/rules/*.conf"

Simpan dan tutup file tersebut kemudian buat file lain dengan perintah berikut:

nano 000-default.conf

Tambahkan baris berikut:

 modsecurity pada modsecurity_rules_file /etc/apache2/modsecurity.d/modsec_rules.conf ServerAdmin [dilindungi email] DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR} /access.log digabungkan

Simpan dan tutup file setelah Anda selesai. Dockerfile akan menyalin file di atas ke wadah Docker selama proses pembuatan.

Terakhir, buat Dockerfile dengan perintah berikut:

nano Dockerfile

Tambahkan baris berikut:

# Instal Modsecurity dalam wadah Docker;DARI ubuntu:latestARG DEBIAN_FRONTEND=noninteractive# perbarui/upgrade sistem AndaRUN apt-get update -y# Instal Dependensi yang DiperlukanRUN apt-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# Unduh LibModsecurity RUN wget https://github.com/SpiderLabs/ModSecurity /releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz# Ekstrak FileRUN yang Diunduh tar xzf modsecurity-v3.0.4.tar.gz &&rm -rf modsecurity-v3.0.4.tar.gz# Kompilasi dan Instal LibModsecurityRUN cd modsecurity-v3.0.4 &&\ ./build.sh &&./configure &&\ make &&make install# Instal 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# Muat Apac dia ModSecurity Connector ModuleRUN echo "LoadModule security3_module /usr/lib/apache2/modules/mod_security3.so">> /etc/apache2/apache2.conf# Konfigurasi ModSecurityRUN mkdir /etc/apache2/modsecurity.d &&\cp modsecurity-v3. 0.4/modsecurity.conf-recommended /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/# Instal OWASP ModSecurity Core Rule Set (CRS) di UbuntuRUN 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# Aktifkan ModSecurityRUN mv /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

Simpan dan tutup file setelah Anda selesai.

File di atas akan mengunduh image Ubuntu, menginstal semua dependensi, mengunduh ModSecurity, mengompilasinya, dan mengonfigurasi Apache untuk bekerja dengan ModSecurity.

Pada titik ini, Dockerfile siap. Sekarang Anda dapat melanjutkan ke langkah berikutnya.

Buat Gambar Apache ModSecurity dan Mulai Wadah

Sekarang, ubah direktori ke /opt dan buat image Docker untuk Apache ModSecurity dengan perintah berikut:

cd /opt
build buruh pelabuhan .

Setelah proses build selesai, Anda akan mendapatkan output berikut:

Langkah 13/17 :JALANKAN 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 ---> Berjalan di 00dfa2a5cd23Cloning ke '/etc/apache2/modsecurity.d/owasp- crs'...Menghapus wadah perantara 00dfa2a5cd23 ---> b38c1d874d2fStep 14/17 :RUN mv /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.old ---> Berjalan di 12c9e6d2c559Menghapus wadah perantara 12c9e6d2c559 ---> 899e26019297Langkah 15/17 :ADD 000-default.conf /etc/apache2/sites-available/ ---> eb11751afd6cLangkah 16/17 :EXPOSE 80 ---> Running di 2f4ba47e2b66Menghapus wadah perantara 2f4ba47e2b66 ---> dd59b0ac7c7cLangkah 17/17 :CMD apachectl -D FOREGROUND ---> Menjalankan di 98b8cc77df0fMenghapus wadah perantara 98b8cc77df0f ---> f603dbc38018 berhasil dibuat 

Anda sekarang dapat membuat daftar semua gambar buruh pelabuhan menggunakan perintah berikut:

gambar buruh pelabuhan

Anda akan mendapatkan output berikut:

TAG REPOSITORY ID GAMBAR UKURAN YANG DIBUAT  f603dbc38018 32 detik yang lalu 2.48GBubuntu terbaru 7e0aa2d69a15 3 minggu yang lalu 72.7MB  

Sekarang, pilih id gambar pertama dari output di atas dan mulai container Apache ModSecurity dengan perintah berikut:

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

Anda akan mendapatkan output berikut:

40eb0e77e61635c3cee2bfaffbd9489bc7d20aa3e1befb52749de079aaadb528

Anda sekarang dapat memverifikasi container yang sedang berjalan dengan perintah berikut:

docker ps

Anda akan mendapatkan output berikut:

PERINTAH GAMBAR ID PENAMPUNG NAMA PORT STATUS YANG DIBUAT40eb0e77e616 f603dbc38018 "/bin/sh -c 'apachec..." 17 detik yang lalu Naik 15 detik 0.0.0.0:80->80/tcp, :::80->80/tcp modsec -apache

Seperti yang Anda lihat, wadah ModSecurity dimulai dan mendengarkan pada port 80.

Verifikasi ModSecurity

Pada titik ini, wadah ModSecurity sedang berjalan. Sekarang, saatnya untuk menguji apakah aturan ModSecurity memblokir permintaan jahat atau tidak.

Untuk melakukannya, buka terminal Anda dan jalankan perintah berikut:

curl localhost?doc=/bin/ls

Anda akan melihat output berikut:

403 Terlarang

Terlarang

Anda tidak memiliki izin untuk mengakses resource ini.


Apache/2.4.41 (Ubuntu) Server di localhost Port 80

Anda akan melihat "403 Terlarang " kesalahan. Karena ModSecurity telah memblokir permintaan di atas.

Anda juga dapat memeriksa log Apache untuk informasi lebih lanjut.

Untuk melakukannya, pertama, sambungkan ke wadah dengan perintah berikut:

docker exec -it modsec-apache /bin/bash

Setelah Anda terhubung, Anda akan mendapatkan shell berikut:

[dilindungi email]:/#

Sekarang, periksa log Apache dengan perintah berikut:

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

Anda akan melihat bahwa ModSecurity telah memblokir permintaan jahat:

[Ming 16 Mei 07:24:54.456327 2021] [mpm_event:notice] [pid 15:tid 140204464299072] AH00489:Apache/2.4.41 (Ubuntu) dikonfigurasi -- melanjutkan operasi normal[Ming 16 Mei 07:24:54.456352 2021] [core:notice] [pid 15:tid 140204464299072] AH00094:Command line:'/usr/sbin/apache2 -D FOREGROUND'[Minggu 16 Mei 07:25:36.680515 2021] [:error] [pid 16:tid 140204216108800] [klien 172.17.0.1:45298] ModSecurity:Peringatan. Mencocokkan "Operator `PmFromFile' dengan parameter `unix-shell.data' terhadap variabel `ARGS:doc' (Nilai:`/bin/ls' ) [file "/etc/Apache2/modsecurity.d/owasp-crs/rules/ REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [baris "496"] [id "932160"] [rev ""] [msg "Eksekusi Perintah Jarak Jauh:Kode Shell Unix Ditemukan"] [data "Data yang Cocok:bin /ls ditemukan dalam ARGS:doc:/bin/ls"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [akurasi "0"] [tag "application-multi"] [tag "bahasa-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:huruf kecil"]

Kesimpulan

Selamat! Anda telah berhasil menginstal ModSecurity di dalam wadah Docker. Saya harap Anda sekarang memiliki cukup pengetahuan untuk mengimplementasikan solusi ini di lingkungan Docker. Jangan ragu untuk bertanya kepada saya jika Anda memiliki pertanyaan.


Docker
  1. Instal server Wireguard VPN dengan Docker

  2. Cara Menginstal Jenkins dengan Docker

  3. Cara menginstal WordPress menggunakan Docker

  1. Instal phpMyAdmin di Debian 11 dengan Apache

  2. Instal phpMyAdmin di Ubuntu 22.04 dengan Apache

  3. Instal WordPress dengan Docker Compose, Nginx, Apache dengan SSL

  1. Cara Menginstal WordPress dengan Docker di Ubuntu

  2. Instrumentasi Wadah dengan Tumpukan Elastis

  3. Cara Menyebarkan Wadah nginx dengan Docker di Linode