GNU/Linux >> Belajar Linux >  >> Debian

Cara Memasang Set Aturan Inti ModSecurity 3 &OWASP dengan Nginx di Debian 11 Bullseye

ModSecurity, sering disebut sebagai Modsec, adalah firewall aplikasi web sumber terbuka gratis (WAF) . ModSecurity dibuat sebagai modul untuk Apache HTTP Server. Namun, sejak awal, WAF telah berkembang dan sekarang mencakup serangkaian kemampuan penyaringan permintaan dan respons HyperText Transfer Protocol untuk berbagai platform seperti Microsoft IIS, Nginx, dan tentu saja, Apache.

Bagaimana WAF bekerja, mesin ModSecurity ditempatkan di depan aplikasi web, memungkinkan mesin untuk memindai koneksi HTTP yang masuk dan keluar. ModSecurity paling sering digunakan bersama dengan OWASP Core Rule Set (CRS) , seperangkat aturan sumber terbuka yang ditulis dalam bahasa SecRules ModSecurity dan sangat dihormati di antara industri keamanan.

Set Aturan OWASP dengan ModSecurity hampir dapat membantu melindungi server Anda dari:

  • Agen pengguna yang buruk
  • DDOS
  • Skrip lintas situs web
  • Injeksi SQL
  • Pembajakan sesi
  • Ancaman Lain

Dalam tutorial berikut, Anda akan mempelajari cara menginstal ModSecurity dengan Nginx di desktop atau server Debian 11 Bullseye.

Prasyarat

  • OS yang Disarankan: Debian 11 Bullseye.
  • Akun pengguna: Akun pengguna dengan sudo atau akses root.
  • Paket yang Diperlukan: tercantum di seluruh tutorial

Perbarui Sistem Operasi

Perbarui Debian . Anda sistem operasi untuk memastikan semua paket yang ada mutakhir:

sudo apt update && sudo apt upgrade -y

Tutorial akan menggunakan perintah sudo dan dengan asumsi Anda memiliki status sudo .

Untuk memverifikasi status sudo di akun Anda:

sudo whoami

Contoh keluaran yang menunjukkan status sudo:

[joshua@debian~]$ sudo whoami
root

Untuk menyiapkan akun sudo yang ada atau baru, kunjungi tutorial kami di Menambahkan Pengguna ke Sudoers di Debian .

Untuk menggunakan akun root , gunakan perintah berikut dengan kata sandi root untuk masuk.

su

Instal Paket CURL &UNZIP

Tutorial ini menggunakan perintah curl dan unzip selama bagian tertentu. Untuk memastikan ini terinstal, jalankan perintah berikut di terminal Anda:

sudo apt install curl unzip -y

Instal Nginx Terbaru

Pertama, Anda perlu menginstal Nginx, dan disarankan untuk melakukannya dengan versi Nginx stabil atau arus utama terbaru. Sebelum melanjutkan, disarankan untuk menghapus semua pemasangan yang ada dari Nginx dan instal Nginx stable atau versi arus utama . terbaru .

Hapus Instalasi Nginx yang Ada

Hentikan layanan Nginx saat ini:

sudo systemctl stop nginx

Sekarang hapus instalasi Nginx yang ada sebagai berikut:

apt-get purge nginx -y && sudo apt autoremove nginx -y

Impor Repositori &Instal Nginx Terbaru

Untuk menggunakan versi terbaru dari nginx mainline atau stable, Anda harus mengimpor repositori terlebih dahulu.

Untuk mengimpor repositori arus utama:

curl -sSL https://packages.sury.org/nginx-mainline/README.txt | sudo bash -x

Untuk mengimpor repositori yang stabil:

curl -sSL https://packages.sury.org/nginx/README.txt | sudo bash -x

Perbarui repositori Anda untuk mencerminkan perubahan baru:

apt update

Sekarang Anda telah menginstal repositori Nginx dan perbarui daftar repositori, instal Nginx dengan yang berikut:

apt install nginx-core nginx-common nginx nginx-full

Perhatikan bahwa Anda mungkin diminta untuk menyimpan atau mengganti /etc/nginx/ yang ada nginx.conf file konfigurasi selama instalasi. Disarankan untuk menyimpan file konfigurasi Anda saat ini dengan menekan (n) . Salinan akan dibuat terlepas dari versi pengelola, dan Anda juga dapat memeriksanya di masa mendatang.

Tambahkan Kode Sumber Nginx ke Repositori

Hanya biner yang diinstal saat menginstal versi terbaru dari jalur utama Nginx atau stabil secara default. Namun, Anda akan memerlukan sumber untuk mengompilasi Modsecurity lebih lanjut dalam tutorial.

Pertama, buka file konfigurasi di /etc/apt/sources.list.d dengan nano seperti di bawah ini:

Saluran Utama:

nano /etc/apt/sources.list.d/nginx-mainline.list

Stabil:

nano /etc/apt/sources.list.d/nginx.list

Baik di jalur utama maupun stabil, saat Anda membuka file, Anda hanya akan melihat satu baris sebagai berikut:

#Mainline File#
deb-src https://packages.sury.org/nginx-mainline/ bullseye main
#Stable File#
deb-src https://packages.sury.org/nginx/ bullseye main

Di bawah baris asli, tambahkan baris berikut:

Saluran Utama:

deb-src https://packages.sury.org/nginx-mainline/ bullseye main

Stabil:

deb-src https://packages.sury.org/nginx-mainline/ bullseye main

Contoh tampilannya (Hanya Contoh Mainline):

Unduh Sumber Nginx

Anda perlu mengunduh kode sumber Nginx untuk mengkompilasi modul dinamis ModSecurity . Untuk melakukan ini, Anda perlu mengunduh dan menyimpan paket sumber di lokasi direktori /etc/local/src/nginx .

Membuat dan Mengonfigurasi Direktori

Buat lokasi sebagai berikut:

mkdir /usr/local/src/nginx && cd /usr/local/src/nginx

Opsional – Tetapkan izin ke direktori jika diperlukan seperti di bawah ini:

chown username:username /usr/local/src/ -R 

Instal Dependensi dan Jalankan Download

Selanjutnya, unduh paket sumber dengan yang berikut:

apt install dpkg-dev -y && sudo apt source nginx

Catatan, Anda akan melihat pesan kesalahan berikut seperti di bawah ini:

dpkg-source: info: extracting nginx in nginx-1.21.1
dpkg-source: info: unpacking nginx_1.21.1.orig.tar.gz
dpkg-source: info: unpacking nginx_1.21.1-1+0~20210802.31+debian11~1.gbp08d591.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying 0001-Make-sure-signature-stays-the-same-in-all-nginx-buil.patch
dpkg-source: info: applying 0002-define_gnu_source-on-other-glibc-based-platforms.patch
W: Download is performed unsandboxed as root as file 'nginx_1.21.1-1+0~20210802.31+debian11~1.gbp08d591.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

Ini dapat diabaikan dengan aman.

Verifikasi Versi Sumber

Selanjutnya, buat daftar file direktori dengan ls perintah sebagai berikut:

ls

Anda akan melihat output berikut di /usr/src/local/nginx . Anda direktori:

nginx-1.21.1
nginx_1.21.1-1+0~20210802.31+debian11~1.gbp08d591.debian.tar.xz
nginx_1.21.1-1+0~20210802.31+debian11~1.gbp08d591.dsc
nginx_1.21.1.orig.tar.gz
nginx_1.21.1.orig.tar.gz.asc

Selanjutnya, konfirmasikan bahwa paket sumber sama dengan versi Nginx Anda yang terinstal di sistem operasi Debian Anda. Untuk melakukannya, gunakan nginx -v berikut ini perintah sebagai berikut:

sudo nginx -v

Sumber yang Anda unduh harus cocok dengan versi biner yang diinstal pada sistem Anda.

Contoh:

nginx version: nginx/1.21.1

Instal libmodsecurity3 untuk ModSecurity

Paket libmodsecurity3 adalah bagian sebenarnya dari WAF yang melakukan pemfilteran HTTP untuk aplikasi web Anda. Pada Debian 11, Anda dapat menginstal ini dari repositori default Debian 11. Namun, ini tidak disarankan seperti pada kebanyakan versi stabil, dan sering kali tertinggal. Sebagai gantinya, Anda akan mengkompilasi dari sumber yang jauh lebih mutakhir sebagai berikut.

Klon Repsoitory ModSecurity dari Github

Langkah pertama adalah mengkloning dari Github, dan jika Anda belum menginstal git, Anda perlu menjalankan perintah berikut:

apt install git -y

Selanjutnya, clone repositori GIT libmodsecurity3 sebagai berikut:

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

Setelah dikloning, Anda perlu CD ke direktori:

cd /usr/local/src/ModSecurity/

Instal Ketergantungan libmodsecurity3

Untuk mengkompilasi, Anda perlu menginstal dependensi berikut sebagai berikut:

sudo apt install gcc make build-essential autoconf automake libtool libcurl4-openssl-dev liblua5.3-dev libfuzzy-dev ssdeep gettext pkg-config libpcre3 libpcre3-dev libxml2 libxml2-dev libcurl4 libgeoip-dev libyajl-dev doxygen -y

Sekarang untuk menyelesaikannya, instal submodul GIT berikut sebagai berikut:

git submodule init

Kemudian perbarui submodul:

git submodule update

Membangun Lingkungan ModSecurity

Langkah selanjutnya sekarang sebenarnya adalah membangun lingkungan terlebih dahulu. Gunakan perintah berikut:

./build.sh

Selanjutnya, jalankan perintah configure:

./configure

Catatan, Anda mungkin akan melihat kesalahan berikut:

fatal: No names found, cannot describe anything.

Anda dapat dengan aman mengabaikan ini dan melanjutkan ke langkah berikutnya.

Mengkompilasi Kode Sumber ModSecurity

Sekarang Anda telah membangun dan mengonfigurasi lingkungan untuk libmodsecurity3, sekarang saatnya untuk mengompilasinya dengan perintah make .

make

Trik praktis adalah dengan menentukan -j karena ini dapat secara signifikan meningkatkan kecepatan kompilasi jika Anda memiliki server yang kuat. Misalnya, server LinuxCapable memiliki 6 CPU, dan saya dapat menggunakan semua 6 atau setidaknya menggunakan 4 hingga 5 untuk meningkatkan kecepatan.

make -j 6

Setelah mengkompilasi kode sumber, sekarang jalankan perintah instalasi di terminal Anda:

make install

Catatan, penginstalan dilakukan di /usr/local/modsecurity/, yang akan Anda rujuk nanti dalam panduan ini.

Instal Konektor ModSecurity-nginx

Konektor ModSecurity-nginx adalah titik koneksi antara nginx dan libmodsecurity. Pada dasarnya, ini adalah komponen yang berkomunikasi antara Nginx dan ModSecurity (libmodsecurity3) .

Klon Repsoitory ModSecurity-nginx dari Github

Mirip dengan langkah sebelumnya mengkloning repositori libmodsecurity3, Anda perlu mengkloning repositori konektor lagi menggunakan perintah berikut:

sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/

Instal Ketergantungan ModSecurity-nginx

Selanjutnya, direktori CD masuk ke direktori source Nginx sebagai berikut:

cd /usr/local/src/nginx/nginx-1.21.1

Catatan, ganti versi panduan dengan versi Nginx saat ini di sistem Anda.

Sekarang, jalankan perintah di terminal Debian Anda untuk menginstal dependensi yang diperlukan:

apt build-dep nginx && sudo apt install uuid-dev -y

Selanjutnya, Anda akan mengkompilasi Konektor ModSecurity-nginx modul hanya dengan –dengan-compat tandai sebagai berikut:

./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

Sekarang buat (buat) modul dinamis dengan perintah berikut:

make modules

Selanjutnya, saat berada di direktori source Nginx, gunakan perintah berikut untuk memindahkan modul dinamis yang baru saja Anda buat yang disimpan di lokasi objs/ngx_http_modsecurity_module.so dan salin ke /usr/share/nginx/modules direktori.

sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

Anda dapat menyimpan modul dinamis di mana saja, selama Anda menentukan jalur lengkapnya saat memuat.

Muat dan Konfigurasikan Konektor ModSecurity-nginx dengan Server Web Nginx

Sekarang setelah Anda mengkompilasi modul dinamis dan menempatkannya dengan tepat, Anda perlu mengedit /etc/nginx/nginx.conf Anda file konfigurasi untuk menjalankan ModSecurity dengan server web Nginx Anda.

Aktifkan ModSecurity di nginx.conf

Pertama, Anda perlu menentukan load_module dan jalur ke modul modsecurity Anda.

Buka nginx.conf dengan editor teks apa pun. Untuk tutorialnya, nano akan digunakan:

sudo nano /etc/nginx/nginx.conf

Selanjutnya, tambahkan baris berikut ke file di dekat bagian atas:

load_module modules/ngx_http_modsecurity_module.so;

Jika Anda telah menemukan modul di tempat lain, pastikan untuk menyertakan path lengkapnya.

Sekarang tambahkan kode berikut di bawah HTTP {} bagian sebagai berikut:

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf;

HANYA Contoh:

Jika Anda telah menemukan modul di tempat lain, pastikan untuk menyertakan path lengkapnya.

Simpan nginx.conf berkas (CTRL+O), lalu keluar dari (CTRL+X) .

Membuat dan Mengonfigurasi Direktori dan File untuk ModSecurity

Anda perlu membuat direktori untuk menyimpan file konfigurasi dan aturan mendatang, OWASP CRS untuk tutorialnya.

Gunakan perintah berikut untuk membuat /etc/nginx/modsec direktori sebagai berikut:

sudo mkdir /etc/nginx/modsec/

Sekarang, Anda perlu menyalin kembali contoh file konfigurasi ModSecurity dari direktori GIT kloning kami:

sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

Menggunakan editor teks favorit Anda, buka file modsecurity.conf sebagai berikut:

sudo nano /etc/nginx/modsec/modsecurity.conf

Secara default, konfigurasi ModSecurity memiliki mesin aturan yang ditetapkan sebagai (DetectionOnly) , yang dengan kata lain, menjalankan ModSecurity dan mendeteksi semua perilaku jahat tetapi tidak memblokir tindakan atau melarang dan mencatat semua transaksi HTTP yang ditandainya. Ini hanya boleh digunakan jika Anda memiliki banyak positif palsu atau telah meningkatkan pengaturan tingkat keamanan ke tingkat yang ekstrim dan pengujian untuk melihat apakah ada kesalahan positif terjadi.

Untuk mengubah perilaku ini menjadi (aktif) , temukan yang berikut ini di baris 7 :

SecRuleEngine DetectionOnly

Ubah baris ini untuk mengaktifkan ModSecurity:

SecRuleEngine On

Sekarang, Anda perlu menemukan yang berikut ini, yang terletak di baris 224 :

# Log everything we know about a transaction.
SecAuditLogParts ABIJDEFHZ

Ini tidak benar dan perlu diubah. Ubah baris menjadi berikut:

SecAuditLogParts ABCEFHJKZ

Sekarang simpan modsecurity.conf file menggunakan (CTRL+O) lalu keluar dari (CTRL+X) .

Bagian selanjutnya adalah membuat file berikut modsec-config.conf . Di sini Anda akan menambahkan modsecurity.conf file bersama dan kemudian pada aturan lain seperti OWASP CRS , dan jika Anda menggunakan WordPress, WPRS CRS kumpulan aturan.

Gunakan perintah berikut untuk membuat file dan membukanya:

sudo nano /etc/nginx/modsec/modsec-config.conf

Setelah di dalam file, tambahkan baris berikut:

Include /etc/nginx/modsec/modsecurity.conf

Simpan modsec-config.conf file dengan (CTRL+O) lalu (CTRL+X) keluar.

Terakhir, salin unicode.mapping ModSecurity file dengan CP perintah sebagai berikut:

sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

Sekarang sebelum melanjutkan, Anda harus menjalankan layanan Nginx Anda dengan perintah terminal berikut:

sudo nginx -t

Jika Anda telah mengatur semuanya dengan benar, Anda akan mendapatkan output berikut:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Untuk mengaktifkan perubahan, mulai ulang layanan Nginx Anda menggunakan perintah systemctl:

sudo systemctl restart nginx

Instal Set Aturan Inti OWASP untuk ModSecurity

ModSecurity sendiri tidak melindungi server web Anda, dan Anda harus memiliki aturan. Salah satu aturan yang paling terkenal, dihormati, dan terkenal adalah kumpulan aturan CRS OWASP. Aturan adalah yang paling banyak digunakan di antara server web dan WAF lainnya, dan sebagian besar sistem serupa lainnya mendasarkan sebagian besar aturan mereka dari CRS ini. Memasang kumpulan aturan ini akan secara otomatis memberi Anda sumber perlindungan yang hebat terhadap sebagian besar ancaman yang muncul di Internet dengan mendeteksi pelaku jahat dan memblokirnya.

Menggunakan perintah wget, unduh arsip OWASP CRS 3.3.2 sebagai berikut:

wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.zip

Bagi mereka yang ingin hidup di tepi, Anda dapat mengunduh build nightly. Hanya gunakan nightly jika Anda siap untuk terus mengkompilasi ulang dan memeriksa CoreRuleSet Github sesering mungkin untuk pembaruan dan lebih percaya diri dalam mencari tahu masalah. Secara teknis malam hari bisa lebih aman tetapi berpotensi menimbulkan masalah.

Untuk pengguna pemula, gunakan versi stabil dan jangan gunakan versi di bawah.

wget https://github.com/coreruleset/coreruleset/archive/refs/tags/nightly.zip

Instal Unzip paket jika Anda belum menginstal ini di server Anda:

sudo apt install unzip -y

Sekarang buka zip master.zip arsipkan sebagai berikut:

sudo unzip v3.3.2.zip -d /etc/nginx/modsec

Seperti sebelumnya, seperti modsecurity.conf contoh konfigurasi, OWASP CRS dilengkapi dengan contoh file konfigurasi yang perlu Anda ganti namanya. Yang terbaik adalah menggunakan CP perintah dan simpan cadangan untuk masa mendatang jika Anda perlu memulai ulang lagi.

sudo cp /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf

Untuk mengaktifkan aturan, buka /etc/nginx/modsec/modsec-config.conf menggunakan editor teks apa pun lagi:

sudo nano /etc/nginx/modsec/modsec-config.conf

Setelah berada di dalam file lagi, tambahkan dua baris tambahan berikut:

Include /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.2/rules/*.conf

Simpan file (CTRL+O) dan keluar (CTRL+X) .

Seperti sebelumnya, Anda perlu menguji setiap penambahan baru ke layanan Nginx Anda sebelum membuatnya aktif:

sudo nginx -t

Anda harus mendapatkan output berikut yang berarti semuanya berfungsi dengan benar:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Mulai ulang layanan Nginx Anda untuk mengaktifkan perubahan sebagai berikut:

sudo systemctl restart nginx

Menggunakan dan Memahami OWASP CRS

OWASP CRS memiliki cukup banyak opsi, pengaturan default, bagaimanapun, di luar kotak, akan segera melindungi sebagian besar server tanpa merugikan pengunjung asli Anda dan bot SEO yang bagus. Di bawah ini, beberapa area akan dibahas untuk membantu menjelaskan. Bacaan lebih lanjut akan lebih baik untuk menyelidiki semua opsi dalam file konfigurasi itu sendiri karena mereka memiliki sedikit data teks untuk menjelaskan apa itu.

Buka CRS-setup.conf your Anda file sebagai berikut:

nano /etc/nginx/modsec/coreruleset-3.4-dev/crs-setup.conf

Catatan, ini adalah konfigurasi versi dev dengan item tambahan dibandingkan dengan versi 3.3.

Dari sini, Anda dapat mengubah sebagian besar pengaturan CRS OWASP Anda.

Skor OWASP CRS

Untuk memecahnya, ModSecurity memiliki dua mode:

Mode Pemberian Skor Anomali

# -- [[ Anomaly Scoring Mode (default) ]] --
# In CRS3, anomaly mode is the default and recommended mode, since it gives the
# most accurate log information and offers the most flexibility in setting your
# blocking policies. It is also called "collaborative detection mode".
# In this mode, each matching rule increases an 'anomaly score'.
# At the conclusion of the inbound rules, and again at the conclusion of the
# outbound rules, the anomaly score is checked, and the blocking evaluation
# rules apply a disruptive action, by default returning an error 403.

Mode Mandiri

# -- [[ Self-Contained Mode ]] --
# In this mode, rules apply an action instantly. This was the CRS2 default.
# It can lower resource usage, at the cost of less flexibility in blocking policy
# and less informative audit logs (only the first detected threat is logged).
# Rules inherit the disruptive action that you specify (i.e. deny, drop, etc).
# The first rule that matches will execute this action. In most cases this will
# cause evaluation to stop after the first rule has matched, similar to how many
# IDSs function.

Penskoran Anomali umumnya merupakan mode terbaik untuk digunakan oleh sebagian besar pengguna.

Ada empat tingkat paranoia:

  • Paranoia Tingkat 1 – Tingkat default dan direkomendasikan untuk sebagian besar pengguna.
  • Paranoia Tingkat 2 – Khusus pengguna tingkat lanjut.
  • Paranoia Tingkat 3 – Hanya pengguna ahli.
  • Paranoia Tingkat 4 – Tidak direkomendasikan sama sekali, kecuali untuk keadaan luar biasa.
# -- [[ Paranoia Level Initialization ]] ---------------------------------------
#
# The Paranoia Level (PL) setting allows you to choose the desired level
# of rule checks that will add to your anomaly scores.
#
# With each paranoia level increase, the CRS enables additional rules
# giving you a higher level of security. However, higher paranoia levels
# also increase the possibility of blocking some legitimate traffic due to
# false alarms (also named false positives or FPs). If you use higher
# paranoia levels, it is likely that you will need to add some exclusion
# rules for certain requests and applications receiving complex input.
#
# - A paranoia level of 1 is default. In this level, most core rules
#   are enabled. PL1 is advised for beginners, installations
#   covering many different sites and applications, and for setups
#   with standard security requirements.
#   At PL1 you should face FPs rarely. If you encounter FPs, please
#   open an issue on the CRS GitHub site and don't forget to attach your
#   complete Audit Log record for the request with the issue.
# - Paranoia level 2 includes many extra rules, for instance enabling
#   many regexp-based SQL and XSS injection protections, and adding
#   extra keywords checked for code injections. PL2 is advised
#   for moderate to experienced users desiring more complete coverage
#   and for installations with elevated security requirements.
#   PL2 comes with some FPs which you need to handle.
# - Paranoia level 3 enables more rules and keyword lists, and tweaks
#   limits on special characters used. PL3 is aimed at users experienced
#   at the handling of FPs and at installations with a high security
#   requirement.
# - Paranoia level 4 further restricts special characters.
#   The highest level is advised for experienced users protecting
#   installations with very high security requirements. Running PL4 will
#   likely produce a very high number of FPs which have to be
#   treated before the site can go productive.
#
# All rules will log their PL to the audit log;
# example: [tag "paranoia-level/2"]. This allows you to deduct from the
# audit log how the WAF behavior is affected by paranoia level.
#
# It is important to also look into the variable
# tx.enforce_bodyproc_urlencoded (Enforce Body Processor URLENCODED)
# defined below. Enabling it closes a possible bypass of CRS.

Uji CRS OWASP di Server Anda

Untuk menguji apakah OWASP CRS berfungsi di server Anda, buka Browser Internet Anda dan gunakan yang berikut ini:

https://www.yourdomain.com/index.html?exec=/bin/bash

Anda akan menerima 403 kesalahan terlarang. Jika tidak, maka satu langkah terlewatkan.

Masalah paling umum tidak ada untuk mengubah DetectionOnly untuk Aktif, seperti yang dibahas sebelumnya dalam tutorial.

Menangani Positif Palsu &Pengecualian Aturan Kustom

Salah satu tugas yang sering kali tidak pernah berakhir adalah berurusan dengan kesalahan positif, ModSecurity dan OWASP CRS melakukan pekerjaan yang baik bersama-sama, tetapi itu mengorbankan waktu Anda, tetapi dengan perlindungan, Anda mendapatkannya sepadan. Sebagai permulaan, jangan pernah meninggikan level paranoia sebagai aturan utama.

Aturan praktis yang baik adalah menjalankan aturan yang ditetapkan selama beberapa minggu hingga bulan dengan hampir tidak ada kesalahan positif, lalu naikkan, misalnya, paranoia level 1 ke paranoia level 2, jadi Anda tidak kebanjiran satu ton secara bersamaan.

Tidak termasuk Aplikasi yang diketahui Positif Palsu

Modsecurity, secara default, dapat memasukkan tindakan sehari-hari ke daftar putih yang mengarah ke kesalahan positif seperti di bawah ini:

#SecAction \
# "id:900130,\
#  phase:1,\
#  nolog,\
#  pass,\
#  t:none,\
#  setvar:tx.crs_exclusions_cpanel=1,\
#  setvar:tx.crs_exclusions_dokuwiki=1,\
#  setvar:tx.crs_exclusions_drupal=1,\
#  setvar:tx.crs_exclusions_nextcloud=1,\
#  setvar:tx.crs_exclusions_phpbb=1,\
#  setvar:tx.crs_exclusions_phpmyadmin=1,\
#  setvar:tx.crs_exclusions_wordpress=1,\
#  setvar:tx.crs_exclusions_xenforo=1"

Untuk mengaktifkan, misalnya, WordPress, phpBB, dan phpMyAdmin saat Anda menggunakan ketiganya, batalkan komentar pada baris dan tinggalkan (1) nomor utuh, ubah layanan lain yang tidak Anda gunakan, misalnya, Xenforo ke (0) karena Anda tidak ingin memasukkan aturan ini ke daftar putih.

Contoh di bawah ini:

SecAction \
 "id:900130,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.crs_exclusions_cpanel=0,\
  setvar:tx.crs_exclusions_dokuwiki=0,\
  setvar:tx.crs_exclusions_drupal=0,\
  setvar:tx.crs_exclusions_nextcloud=0,\
  setvar:tx.crs_exclusions_phpbb=1,\
  setvar:tx.crs_exclusions_phpmyadmin=1,\
  setvar:tx.crs_exclusions_wordpress=1,\
  setvar:tx.crs_exclusions_xenforo=0"

Anda juga dapat memodifikasi sintaks, yang akan lebih bersih. Misalnya:

SecAction \
 "id:900130,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.crs_exclusions_phpbb=1,\
  setvar:tx.crs_exclusions_phpmyadmin=1,\
  setvar:tx.crs_exclusions_wordpress=1"

Seperti yang Anda lihat, opsi yang tidak diperlukan dihapus, dan ditambahkan (“) di akhir WordPress untuk sintaks yang benar.

Mengecualikan Aturan di Sebelum CRS

Untuk menangani pengecualian khusus, pertama-tama, Anda perlu mengubah nama dari REQUEST-900-EXCLUSION-RULES-BEFORE-CRS-SAMPLE.conf file dengan perintah cp sebagai berikut:

sudo cp /etc/nginx/modsec/coreruleset-3.4-dev/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /etc/nginx/modsec/coreruleset-3.4-dev/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf

Satu hal yang perlu diingat, saat membuat aturan pengecualian, masing-masing harus memiliki id: dan unik, atau ketika Anda menguji layanan Nginx Anda, Anda akan mendapatkan kesalahan. Contoh “id:1544,phase:1,log,allow,ctl:ruleEngine=off” , id 1544 tidak dapat digunakan untuk aturan kedua.

Misalnya, beberapa REQUEST_URI akan meningkatkan hasil positif palsu. Contoh di bawah ini adalah dua dengan Google pagespeed beacon dan plugin WMUDEV untuk WordPress:

SecRule REQUEST_URI "@beginsWith /wp-load.php?wpmudev" "id:1544,phase:1,log,allow,ctl:ruleEngine=off"

SecRule REQUEST_URI "@beginsWith /ngx_pagespeed_beacon" "id:1554,phase:1,log,allow,ctl:ruleEngine=off"

Seperti yang Anda lihat, URL apa pun yang dimulai dengan jalur akan diizinkan secara otomatis.

Opsi lainnya adalah memasukkan alamat IP ke daftar putih, beberapa cara yang dapat Anda lakukan untuk mengatasinya:

SecRule REMOTE_ADDR "^195\.151\.128\.96" "id:1004,phase:1,nolog,allow,ctl:ruleEngine=off"
## or ###
SecRule REMOTE_ADDR "@ipMatch 127.0.0.1/8, 195.151.0.0/24, 196.159.11.13" "phase:1,id:1313413,allow,ctl:ruleEngine=off"

@ipMatch dapat digunakan lebih luas untuk subnet. Jika Anda ingin menolak subnet atau alamat IP berubah, izinkan untuk menyangkal. Dengan sedikit pengetahuan, Anda juga dapat membuat daftar hitam dan daftar putih dan mengonfigurasinya dengan fail2ban . Kemungkinannya seringkali tidak terbatas.

Salah satu contoh terakhir adalah menonaktifkan hanya aturan yang memicu kesalahan positif, tidak mencakup seluruh jalur yang diizinkan, seperti yang Anda lihat dengan contoh REQUEST_URI pertama. Namun, ini membutuhkan lebih banyak waktu dan pengujian. Misalnya, Anda ingin menghapus aturan 941000 dan 942999 dari area /admin/ Anda karena terus memicu pemblokiran dan pemblokiran palsu untuk tim Anda, temukan di file log modsecurity Anda ID aturan, lalu nonaktifkan hanya ID itu dengan RemoveByID seperti contoh di bawah ini:

SecRule REQUEST_FILENAME "@beginsWith /admin" "id:1004,phase:1,pass,nolog,ctl:ruleRemoveById=941000-942999"

Contoh dapat ditemukan di halaman wiki ModSecurity GIT; LinuxCapable akan, di masa depan, membuat tutorial pada bagian ini karena ada cukup banyak untuk dibahas.

Opsional – Sertakan Project Honeypot

Panci Proyek Madu adalah sistem terdistribusi pertama dan satu-satunya untuk mengidentifikasi spammer dan robot spam yang mereka gunakan untuk mengikis alamat dari situs web Anda. Dengan menggunakan sistem Project Honey Pot, Anda dapat memasang alamat yang diberi tag khusus ke waktu dan alamat IP pengunjung situs Anda. Jika salah satu dari alamat ini mulai menerima email, kami dapat mengetahui bahwa pesan tersebut adalah spam, saat yang tepat saat alamat tersebut diambil, dan alamat IP yang mengumpulkannya.

ModSecurity dapat memiliki opsi untuk mengintegrasikan Project Honeypot, yang akan menanyakan database dan memblokir semua alamat yang ada di daftar hitam HoneyPot. Perhatikan, menggunakan ini dapat menyebabkan kesalahan positif, tetapi secara keseluruhan dianggap sangat andal dibandingkan dengan alternatif serupa.

Langkah 1. Buat akun akun gratis.

Langkah 2. Setelah Anda mendaftar dan masuk, di dasbor, temukan baris (Kunci API http:BL Anda) dan klik dapatkan satu .

Langkah 3. Kembali ke file CRS-setup.conf dengan membukanya menggunakan editor teks:

sudo nano /etc/nginx/modsec/coreruleset-3.3.3/crs-setup.conf

Langkah 4. Temukan baris yang dimulai dengan #SecHttpBlKey, yang ada di jalur 629.

#SecHttpBlKey XXXXXXXXXXXXXXXXX
#SecAction "id:900500,\
#  phase:1,\
#  nolog,\
#  pass,\
#  t:none,\
#  setvar:tx.block_search_ip=1,\
#  setvar:tx.block_suspicious_ip=1,\
#  setvar:tx.block_harvester_ip=1,\
#  setvar:tx.block_spammer_ip=1"

Langkah 5. Change the SecHttpBlKey XXXXXXXXXXXXXXXXX with your key from Project HoneyPot.

Contoh:

SecHttpBlKey amhektvkkupe

Step 6. Next, uncomment all the lines to enable the rule. To deactivate a rule, instead of (1), put (0) instead if you wish to have any of the rules disabled. By default, block_search_ip=0 is for search engine bots, do not enable this unless you want Bing, Google, and other good bots coming to your site.

SecHttpBlKey amhektvkkupe
SecAction "id:900500,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.block_search_ip=0,\
  setvar:tx.block_suspicious_ip=1,\
  setvar:tx.block_harvester_ip=1,\
  setvar:tx.block_spammer_ip=1"

Note, do not use amhektvkkupe. Use your key instead!

Step 7. Test Nginx to make sure no errors have occurred with the following:

sudo nginx -t

Example output if all correct:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Now restart your Nginx service:

sudo systemctl restart nginx

WordPress WPRS Rule Set for ModSecurity

Another option for WordPress users is to install and run alongside your OWASP CRS rule set, a well-known project entitled WPRS rule set. As this is optional and isn’t for everyone, the tutorial will not cover it in this section. However, if you would like to install this for extra protection if you use WordPress on your server, please visit our tutorial on Installing WordPress ModSecurity Rule Set (WPRS).

Create ModSecurity LogRotate File

Given how many lines and information it can log, ModSecurity will grow quite quickly. As you are compiling the module and it isn’t installed through any official repository from Debian, you will need to create your own log rotate file.

First, create and open your ModSecurity rotate file modsec :

sudo nano /etc/logrotate.d/modsec

Add the following code:

/var/log/modsec_audit.log
{
        rotate 31
        daily
        missingok
        compress
        delaycompress
        notifempty
}

This will keep logs for 31 days. If you prefer to have less, change 31 to say 7 days equally a week’s worth of logs. You should be rotating daily for ModSecurity. If you need to review the log files having a weekly file will be a disaster to sift through, given how large it will be.


Debian
  1. Cara Menginstal Nginx di Debian 9

  2. Cara Menginstal Nginx di Debian 8 (Jessie)

  3. Cara Menginstal Nginx di Debian 9 (Peregangan)

  1. Cara Menginstal InvoicePlane dengan Nginx di Debian 9

  2. Cara Menginstal AbanteCart dengan Nginx dan SSL di Debian 11

  3. Cara Instal Grav CMS dengan Nginx di Debian 9

  1. Cara Menginstal Nginx di Debian 11

  2. Cara Memasang Aturan Inti OWASP yang Ditetapkan pada Modsecurity dengan Nginx di Ubuntu 20.04

  3. Cara Menginstal Docker di Debian 11 (Bullseye)