GNU/Linux >> Belajar Linux >  >> Linux

Cara Instal ModSecurity dengan Nginx di Rocky Linux 8

ModSecurity adalah firewall aplikasi web sumber terbuka yang populer, gratis, yang digunakan untuk melindungi aplikasi web dari beberapa jenis serangan termasuk injeksi SQL, skrip lintas situs, dan penyertaan file lokal. Ini sering digunakan untuk melindungi situs web, cPanel, dan panel kontrol hosting lainnya. Meskipun ModSecurity terutama dirancang untuk server web Apache, ModSecurity juga dapat bekerja dengan server web Nginx.

Dalam posting ini, kami akan menunjukkan cara menginstal ModSecurity dengan Nginx di Rocky Linux 8.

Prasyarat

  • Server yang menjalankan Rocky Linux 8 di Atlantic.Net Cloud Platform
  • Kata sandi root yang dikonfigurasi di server Anda

Langkah 1 – Buat Server Cloud Atlantic.Net

Pertama, masuk ke Server Cloud Atlantic.Net Anda. Buat server baru, pilih Rocky Linux 8 sebagai sistem operasi dengan RAM minimal 2GB. Hubungkan ke Server Cloud Anda melalui SSH dan masuk menggunakan kredensial yang disorot di bagian atas halaman.

Setelah Anda masuk ke server Anda, jalankan perintah berikut untuk memperbarui sistem dasar Anda dengan paket terbaru yang tersedia.

dnf update -y

Langkah 2 – Instal Dependensi yang Diperlukan

Pertama, Anda perlu menginstal semua dependensi yang diperlukan di server Anda. Anda dapat menginstal semuanya dengan perintah berikut:

dnf install gcc-c++ flex bison yajl curl-devel curl zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config git wget openssl openssl-devel vim
dnf --enablerepo=powertools install doxygen yajl-devel -y

Selanjutnya, instal repositori EPEL dan Remi menggunakan perintah berikut:

dnf install epel-release https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y

Selanjutnya, instal GeoIP menggunakan perintah berikut:

dnf --enablerepo=remi install GeoIP-devel -y

Langkah 3 – Instal ModSecurity

Pertama, unduh ModSecurity versi terbaru menggunakan perintah berikut:

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity

Selanjutnya, ubah direktori ke ModSecurity dan instal modul lainnya dengan perintah berikut:

cd ModSecurity
git submodule init
git submodule update

Selanjutnya, kompilasi dan instal ModSecurity dengan perintah berikut:

./build.sh
./configure
make
make install

Langkah 4 – Instal Nginx dengan Dukungan LibModsecurity

Untuk mengaktifkan dukungan LibModsecurity di Nginx, Anda perlu mengompilasi Nginx dengan dukungan untuk LibModsecurity.

Pertama, unduh konektor ModSecurity-nginx menggunakan perintah berikut:

cd ../
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

Selanjutnya, unduh Nginx versi stabil terbaru dengan perintah berikut:

wget http://nginx.org/download/nginx-1.19.10.tar.gz

Selanjutnya, ekstrak file yang diunduh menggunakan perintah berikut:

tar xzf nginx-1.19.10.tar.gz

Selanjutnya, buat pengguna untuk Nginx dengan perintah berikut:

useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx

Selanjutnya, ubah direktori ke sumber Nginx dan kompilasi menggunakan perintah berikut:

cd nginx-1.19.10
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/root/ModSecurity-nginx

Selanjutnya, instal menggunakan perintah berikut:

make
make install

Selanjutnya, salin contoh file konfigurasi ModSecurity dan file pemetaan Unicode dengan perintah berikut:

cp /root/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /root/ModSecurity/unicode.mapping /usr/local/nginx/conf/

Selanjutnya, buat cadangan file konfigurasi Nginx:

cp /usr/local/nginx/conf/nginx.conf{,.bak}

Selanjutnya, edit file konfigurasi Nginx dengan perintah berikut:

nano /usr/local/nginx/conf/nginx.conf

Hapus semua baris dan tambahkan baris berikut:

user  nginx;
worker_processes  1;
pid        /run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  nginx.example.com;
        modsecurity  on;
        modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;
        access_log  /var/log/nginx/access_kifarunix-demo.log;
        error_log  /var/log/nginx/error_kifarunix-demo.log;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Simpan dan tutup file, lalu buat direktori log Nginx:

mkdir /var/log/nginx

Langkah 5 – Buat File Layanan Systemd untuk Nginx

Selanjutnya, Anda perlu membuat file layanan systemd untuk mengelola layanan Nginx. Anda dapat membuatnya menggunakan perintah berikut:

nano /etc/systemd/system/nginx.service

Tambahkan baris berikut:

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Simpan dan tutup file, lalu buat symlink biner Nginx menggunakan perintah berikut:

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

Selanjutnya, muat ulang daemon systemd untuk menerapkan perubahan:

systemctl daemon-reload

Selanjutnya, mulai layanan Nginx dan aktifkan untuk memulai saat reboot sistem:

systemctl enable --now nginx

Anda dapat memeriksa status Nginx dengan perintah berikut:

systemctl status nginx

Anda akan mendapatkan output berikut:

● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-11-08 09:59:48 UTC; 5s ago
  Process: 73046 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 73044 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 73043 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 73048 (nginx)
    Tasks: 2 (limit: 11411)
   Memory: 3.2M
   CGroup: /system.slice/nginx.service
           ├─73048 nginx: master process /usr/sbin/nginx
           └─73049 nginx: worker process

Nov 08 09:59:48 rockylinux systemd[1]: Starting The nginx HTTP and reverse proxy server...
Nov 08 09:59:48 rockylinux nginx[73044]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Nov 08 09:59:48 rockylinux nginx[73044]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Nov 08 09:59:48 rockylinux systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Nov 08 09:59:48 rockylinux systemd[1]: Started The nginx HTTP and reverse proxy server.

Langkah 6 – Aktifkan Aturan ModSecurity

Anda dapat mengaktifkannya dengan perintah berikut:

sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.conf

Juga, aktifkan log audit dengan perintah berikut:

sed -i 's#/var/log/modsec_audit.log#/var/log/nginx/modsec_audit.log#' /usr/local/nginx/conf/modsecurity.conf

Langkah 7 – Instal Set Aturan Inti ModSecurity OWASP

OWASP menyediakan aturan deteksi serangan umum untuk ModSecurity. Anda dapat mengunduhnya dengan perintah berikut:

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs

Selanjutnya, ganti nama file konfigurasi aturan OWASP menggunakan perintah berikut:

cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}

Selanjutnya, tentukan aturan OWASP di file konfigurasi ModSecurity:

echo -e "Include owasp-crs/crs-setup.conf\nInclude owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.conf

Selanjutnya, restart layanan Nginx untuk menerapkan perubahan:

systemctl restart nginx

Langkah 8 – Verifikasi ModSecurity

Pada titik ini, Nginx diinstal dan dikonfigurasi dengan dukungan ModSecurity. Sekarang saatnya untuk mengujinya.

Jalankan injeksi perintah berikut menggunakan perintah curl:

curl localhost/index.html?exec=/bin/bash

Jika semuanya baik-baik saja, Anda akan mendapatkan kesalahan “403 Forbidden” seperti yang ditunjukkan di bawah ini:

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.19.10</center>
</body>
</html>

Anda juga dapat memverifikasi log ModSecurity untuk informasi lebih lanjut:

tail -100 /var/log/nginx/modsec_audit.log

Anda akan melihat output berikut:

---imefFQJy---D--

---imefFQJy---E--
<html>\x0d\x0a<head><title>403 Forbidden</title></head>\x0d\x0a<body>\x0d\x0a<center><h1>403 Forbidden</h1></center>\x0d\x0a<hr><center>nginx/1.19.10</center>\x0d\x0a</body>\x0d\x0a</html>\x0d\x0a

---imefFQJy---F--
HTTP/1.1 403
Server: nginx/1.19.10
Date: Mon, 08 Nov 2021 10:00:55 GMT
Content-Length: 154
Content-Type: text/html
Connection: keep-alive

---imefFQJy---H--
ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/bash found within ARGS:exec: /bin/bash"] [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 "127.0.0.1"] [uri "/index.html"] [unique_id "1636365655"] [ref "o1,8v21,9t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]
ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [data ""] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "1636365655"] [ref ""]

Kesimpulan

Dalam panduan di atas, kami menjelaskan cara menginstal ModSecurity dengan Nginx di Rocky Linux 8. Server web Nginx Anda sekarang diamankan dengan ModSecurity WAF. ModSecurity dapat melindungi server Anda dari berbagai serangan. Mulai hosting VPS dari Atlantic.Net hari ini!


Linux
  1. Cara Menginstal Varnish 7 untuk Nginx di Rocky Linux 8

  2. Cara Menginstal Gulp.js di Rocky Linux 8

  3. Cara Menginstal Fail2ban dengan Firewalld di Rocky Linux 8

  1. Cara Instal Apache Tomcat 10 dengan Nginx di Rocky Linux 8

  2. Cara Menginstal Joomla dengan Nginx di Rocky Linux

  3. Cara Install Bahasa Pemrograman Rust di Rocky Linux 8

  1. Cara Menginstal Nginx dengan ModSecurity di Ubuntu 15.04

  2. Cara Install phpMyAdmin dengan Nginx di Linux Mint 19 / Linux Mint 18

  3. Cara Menginstal Bludit CMS dengan NGINX di Ubuntu 20.04