Pembaruan: Jawaban saat ini sepenuhnya diperbarui.
Menurut diskusi ini saya membuat repositori GitHub bernama WWW Security Assistant . Ada cabang, yang disebut ask_ubuntu
, didedikasikan untuk jawaban ini. Semua referensi, yang sebelumnya tersedia di sini , dihapus karena batas karakter - mereka tersedia di GitHub.
Berikut adalah beberapa cara yang dilihat secara berlebihan, yang terlibat dalam mekanisme lengkap, cara meningkatkan keamanan Apache2 di dalam Ubuntu 16.04.
Daftar Isi:
- Script Asisten Keamanan WWW (WSAS) ► Iptables
- Iptables - Konfigurasi Dasar - Simpan dan Kembalikan
- ModEvasive untuk Apache2
- ModEvasive ► WSAS ► Iptables
- ModSecurity 2.9 untuk Apache2
- ModSecurity OWASP Core Rule Set 3.x
- ModSecurity Rules Whitelisting
- Aturan ModSecurity ► WSAS ► Iptables
- ModSecurity dan File Log Apache
- File Log ModSecurity ► Fail2Ban ► Iptables
- ModSecurity GuardianLog ► Wali HTTPD ► WSAS ► Iptables
- ModSecurity GuardianLog ► Analisis Kustom HTTPD ► WSAS ► Iptables
Selain itu, katakanlah selalu baik menggunakan HTTPS:
Skrip Asisten Keamanan WWW ► Iptables
Di sini disajikan skrip www-security-assistant.bash
. Ini bisa membantu Anda dengan penanganan alamat IP berbahaya. Script memiliki dua mode.
Mode otomatis
Ketika program eksternal, seperti Apache mod_security
, memberikan $IP
alamat berbahaya . Dalam hal ini, sintaks yang memanggil skrip, harus:
www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst
Dalam mode ini, skrip menyediakan dua tahap tindakan dan untuk setiap tindakan , skrip akan mengirim email ke administrator.
Tahap pertama: untuk beberapa 'pelanggaran' pertama , sumber $IP
akan diblokir untuk jangka waktu yang sama dengan nilai $BAN_TIME
. Mode ini menggunakan perintah at
.
Tahap kedua: ketika jumlah pelanggaran dari tertentu $IP
menjadi sama dengan nilai $LIMIT
, $IP
alamat ini akan diblokir secara permanen melalui Iptables dan akan ditambahkan ke $BAN_LIST
.
Mode manual
Mode ini menerima opsi berikut:
www-security-assistant.bash <ip-address>
--DROP "log notes"
Membuat entri ke dalam file /var/www-security-assistant/iptables-DROP.list
dan menghasilkan aturan sebagai:
iptables -A GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Membuat entri ke dalam file /var/www-security-assistant/iptables-DROP-CLEAR.list
, menghapus aturan Iptables tertentu, menghapus $IP
dari sejarah dan dari $BAN_LIST
:
iptables -D GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
Hanya membuat entri ke dalam file /var/www-security-assistant/iptables-ACCEPT.list
.
www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
Membuat entri ke dalam file /var/www-security-assistant/iptables-ACCEPT.list
dan menghasilkan aturan sebagai:
iptables -A GUARDIAN -s $IP -j ACCEPT
Ketergantungan
Penggunaan skrip iptables-save.sh
dan iptables
rantai GUARDIAN
, dijelaskan di bagian selanjutnya. Ini akan membuat dan memelihara beberapa file di dalam $WORK_DIR
:
www-security-assistant.history
- berisi data untuk pelanggaran IP sebelumnya.
www-security-assistant.mail
- konten email terakhir yang dikirim oleh skrip.
iptables-ACCEPT.list
; iptables-DROP.list
dan iptables-DROP-CLEAR.list
.
Skrip memerlukan konfigurasi minimal untuk mengirim email:
sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com
Jika ada layanan HTTPS yang dikonfigurasi, sertifikat TLS-nya dapat digunakan dalam layanan Postfix.
Selain itu script menggunakan at
: sudo apt install at
.
Instalasi
Buat direktori kerja, sebut saja itu /var/www-security-assistant
. Unduh www-security-assistant.bash
dan buat itu dapat dieksekusi:
sudo mkdir /var/www-security-assistant
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
Jadikan www-security-assistant.bash
sebagai perintah khusus:
sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
Berikan izin untuk www-data
menjalankan www-security-assistant.bash
tanpa kata sandi melalui sudo
. Gunakan perintah berikut untuk membuat dan mengedit file baru dengan aman dengan sudoers
aturan tambahan ' ':
sudo visudo -f /etc/sudoers.d/www-security-assistant
Tambahkan baris berikut di dalam file - simpan file dan keluar:
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
Tweak www-security-assistant.bash
. Ubah setidaknya nilai variabel $EMAIL_TO
.
Pemeriksaan
Tunjukkan diri Anda $AGENT
dan periksa apakah MODE Otomatis berfungsi dengan baik:
www-security-assistant.bash 192.168.1.177 Guardian
Kemudian periksa email Anda, ketik iptables -L GUARDIAN -n
, tinjau file www-security-assistant.history
dan www-security-assistant.mail
. Jalankan perintah di atas 5 kali dan tinjau file iptables-DROP.list
dan iptables-CURRENT.conf
.
Periksa apakah MODE Manual berfungsi dengan baik - tambahkan localhost Anda ke Daftar Putih:
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
Kemudian periksa file tersebut iptables-ACCEPT.list
.
Bagian lain dari tutorial ini adalah bagaimana mengintegrasikan www-security-assistant
dengan sistem Anda.
Iptables - Konfigurasi Dasar - Simpan dan Kembalikan
Konfigurasi dasar
Silakan baca manual ini sebelum menambahkan aturan berikut.
sudo iptables -F
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
Sebelum Anda melakukan tindakan selanjutnya, buka koneksi SSH baru dan coba masuk ke sistem Anda untuk memeriksa apakah semuanya berfungsi dengan baik!
Simpan dan Kembalikan
Ini dapat dicapai melalui skrip khusus, yang akan menyimpan dan mengembalikan iptables
coning selama proses stop-start (atau reboot) sistem. (Jika kita menggunakan UFW untuk mengatur aturan Iptables, langkah ini tidak diperlukan.)
printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore
Buat rantai baru
Buat rantai baru, panggil GUARDIAN
dan masukkan sebagai nomor 3 ke INPUT
rantai:
sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN
Pemeriksaan
Nyalakan ulang sistem dan periksa konfigurasinya. Silakan gunakan sudo systemctl reboot
(jangan gunakan opsi gaya reboot -f
). Ketika sistem kembali online kami dapat memeriksa apakah rantai yang baru dibuat ada oleh:
sudo iptables -L GUARDIAN -n
ModEvasive untuk Apache2
ModEvasive adalah modul manuver pengelakan untuk Apache untuk memberikan tindakan pengelakan jika terjadi serangan HTTP DoS atau DDoS atau serangan brute force. Baca lebih banyak...
Instalasi
Pasang dan aktifkan modul:
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
Buat Direktori Log dan buat aksesnya untuk www-data
:
sudo mkdir -p /var/log/apache2_mod_evasive
sudo chown www-data /var/log/apache2_mod_evasive
Sesuaikan konfigurasi dasar - batalkan komentar dan edit arahan tertentu dalam file konfigurasi:
/etc/apache2/mods-enabled/evasive.conf
Restart Apache: sudo systemctl restart apache2.service
.
Pemeriksaan
- Buka halaman web dari server Anda dan segarkan jendela browser beberapa kali secara intensif (tekan
F5
) - Anda harus mendapatkan 403 pesan kesalahan Terlarang . Ke dalam direktori log, akan dihasilkan file kunci baru. File ini harus dihapus untuk deteksi pelanggaran lebih lanjut dari alamat IP ini.
ModEvasive ► WSAS ► Iptables
Di sini kita akan mengkonfigurasi mod_evasive
untuk berbicara iptables
melalui www-security-assistant.bash
, dibuat di bagian di atas.
Edit /etc/apache2/mods-available/evasive.conf
dengan cara ini:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify your@email.foo
DOSLogDir "/var/log/apache2_mod_evasive"
DOSSystemCommand "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
</IfModule>
Buat file log dan Restart Apache:
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
Untuk menguji konfigurasi ini kita dapat mensimulasikan serangan DDOS melalui F5
metode, yang disebutkan di atas, atau kita dapat menggunakan perintah sebagai ab
, hping3
, dll
Perhatian: Hati-hati karena iptables
aturan, yang digunakan dalam WSAS, akan DROP semua koneksi baru dari sumber $IP
, termasuk koneksi SSH Anda. Adalah baik untuk memiliki cara cadangan untuk terhubung ke server selama pengujian. Anda dapat mengubah aturan ini hanya untuk bekerja dengan port HTTP / HTTPS.
ModSecurity 2.9 untuk Apache2
ModSecurity adalah mesin firewall aplikasi web yang memberikan perlindungan sangat sedikit sendiri. Agar bermanfaat, ModSecurity harus dikonfigurasikan dengan aturan. Untuk memungkinkan pengguna memanfaatkan ModSecurity sepenuhnya, Trustwave's Spider Labs menyediakan aturan sertifikasi gratis yang ditetapkan ... Baca selengkapnya ...
Instalasi
Pasang dan aktifkan modul:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
Buat file konfigurasi:
sudo cp /etc/modsecurity/modsecurity.conf-recomended /etc/modsecurity/modsecurity.conf
Baca dan edit /etc/modsecurity/modsecurity.conf
dengan cermat! Tambahkan atau ubah setidaknya arahan berikut:
# -- Rule engine initialization ----------------------------------------------
SecRuleEngine On
# -- Debug log configuration -------------------------------------------------
SecDebugLogLevel 2
SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
# -- Audit log configuration -------------------------------------------------
SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
# -- Guardian log configuration -------------------------------------------------
SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
File tersebut /etc/apache2/mods-enabled/security2.conf
melibatkan /etc/modsecurity/modsecurity.conf
konfigurasi Apache. Pada tahap ini security2.conf
akan terlihat seperti ini:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
Buat Direktori Log:
sudo mkdir -p /var/log/apache2_mod_security
Atur rotasi log. Pertama-tama buat file config:
sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec
Kemudian edit file baru dengan cara ini:
/var/log/apache2_mod_security/*.log { … }
Mulai ulang Apache.
Pemeriksaan
Buat file konfigurasi tambahan di /etc/modsecurity
, panggil misalnya z-customrules.conf
, dan tambahkan aturan berikut sebagai kontennya:
# Directory traversal attacks
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
Restart server: sudo systemctl restart apache2.service
. Buka browser Anda dan ketik https://example.com/?abc=../
. Hasilnya adalah: 403 Terlarang . Periksa file log /var/log/apache2_mod_security
untuk lebih jelasnya.
Untuk membuatnya lebih menyenangkan, tempatkan skrip issues.php
di lokasi yang sesuai di dalam Anda DocumentRoot
(di sini saya anggap sebagai tempat ini /var/www/html
):
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php
Kemudian ubah aturan di atas dengan cara berikut:
# Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"
Restart Apache, lalu buka browser Anda dan ketik https://example.com/?abc=../
;-) Idenya dipinjam dari skrip SE BotLovin.cs
.
Edit /etc/modsecurity/z-customrules.conf
sekali lagi dan komentari (nonaktifkan) aturan - ini hanya contoh uji dan dicakup oleh OWASP CRS, dijelaskan di bagian selanjutnya.
Berikut adalah contoh lain di mana kami akan mengalihkan semua wp-admin
permintaan halaman, tetapi kecuali ini dari alamat IP tertentu (perhatikan chain
):
# Block wp-admin access
SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"
Di sini kita memiliki dua tindakan mengganggu: (1) deny, status:403
dan (2) redirect:'/issues.php'
. Sebenarnya kita tidak memerlukan deny
tindakan karena akan ditimpa oleh redirect
tindakan.
ModSecurity OWASP Core Rule Set 3.x
Di Ubuntu 16.04 Anda dapat menginstal 2.x CSR: apt install modsecurity-crs
. Di sini kita akan menginstal CSR 3.x , petunjuk rinci disediakan dalam manual Instalasi ( git
diperlukan).
Instalasi
Klon CSR dalam folder /usr/share/modsecurity-crs.3
:
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
Tingkatkan dan perpanjang otomatis basis data GeoIP. (GeoIP DB tidak lagi disertakan dengan CRS. Sebagai gantinya Anda disarankan untuk mengunduhnya secara rutin.) Skrip util/upgrade.py
membawa fungsionalitas ini. Anda dapat menggunakannya sebagai berikut di cron - sudo crontab -e
:
0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
Buat file konfigurasi:
sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
Baca dan edit file-file ini dengan cermat! Batalkan komentar setidaknya SecGeoLookupDB
arahan:
SecGeoLookupDB util/geo-location/GeoIP.dat
Terapkan konfigurasi Apache. Edit /etc/apache2/mods-available/security2.conf
dengan cara ini:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
</IfModule>
Simpan file dan kemudian restart Apache.
ModSecurity Rules Whitelisting
Daftar putih dari ModSecurity Rules dapat dilakukan melalui arahan ModSec berikut, yang dapat digunakan di seluruh sistem atau dalam konfigurasi virtual host, juga secara global, untuk direktori tertentu atau pencocokan lokasi:
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
Nonaktifkan mod_security2
untuk PhpMyAdmin. Ubah /etc/phpmyadmin/apache.conf
dengan cara ini:
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
Nonaktifkan aturan khusus untuk direktori tertentu:
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
Nonaktifkan aturan secara global. Untuk tujuan ini kita harus menambahkan arahan kita di suatu tempat di file konfigurasi Apache: /etc/modsecurity/z-customrules.conf
adalah tempat yang bagus.
Nonaktifkan aturan dalam seluruh konfigurasi Apache:
SecRuleRemoveById 973301 950907
Daftar putih alamat IP sehingga dapat melewati ModSecurity:
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
Nonaktifkan aturan dalam kecocokan Direktori:
<Directory /var/www/mediawiki/core>
SecRuleRemoveById 973301 950907
</Directory>
Perbarui tindakan aturan dengan ID-nya dalam Pencocokan lokasi:
<LocationMatch "/index.php.*">
SecRuleUpdateActionById 973301 "pass"
SecRuleUpdateActionById 950907 "pass"
</LocationMatch>
Dalam contoh di atas, kami menganggap itu 973301
dan 950907
merupakan ID aturan yang menghalangi pekerjaan normal aplikasi web kami. Kita dapat menemukan aturan karena ini dengan menganalisis modsec_audit.log
.
Aturan ModSecurity ► WSAS ► Iptables
Di sini diberikan beberapa contoh lagi bagaimana cara membuat SecRules kustom, juga bagaimana kita dapat memanggil WWW Security Assistant Script (WSAS) melalui mereka.
Pengaturan awal
Kami membutuhkan skrip startup tambahan - modsecurity-assistant.sh
. Alasannya adalah, exec
tindakan ModSecurity memiliki sintaks yang terlalu sederhana dan terbatas.
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh
Jika Anda melihat ke dalam skrip Anda akan melihat beberapa variabel yang diekspor oleh ModSecurity. Ini adalah: $REQUEST_URI
, $ARGS
, $SERVER_NAME
, $REMOTE_ADDR
, $REMOTE_HOST
dan $UNIQUE_ID
. Variabel lain dijelaskan di dalam skrip.
Buat aturan khusus dan panggil skrip kami melaluinya
Pertama mari kita membuat aturan yang akan mengeksekusi modsecurity-assistant.sh
(dan memanggil www-security-assistant.bash
) ketika URI permintaan berisi kata yang termasuk dalam daftar hitam kami. Buka /etc/modsecurity/z-customrules.conf
dan tambahkan baris berikut ke bawah:
# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
"id:150, log, t:lowercase, chain, \
drop, deny, status:403, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"setenv:REMOTE_HOST=%{REMOTE_HOST}, \
setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
REQUEST_URI
- variabel ini berisi URI lengkap dari permintaan saat ini. Aturan culd menjadi lebih luas:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
akan membaca file modsecurity-uri-black.list
yang berisi daftar frasa, di mana setiap frasa atau kata tertentu ditempatkan ke baris baru. Anda dapat mengumpulkan kata dan frasa menarik dari file log. Jika ada kecocokan khusus antara REQUEST_URI
dan daftar pola kami aturan akan diterapkan. File mungkin kosong, tetapi Anda harus membuatnya ( touch
).
The log
tindakan akan membuat entri log dalam file log untuk aturan ini dengan id:150
.
drop
, deny
(dengan status
) dan redirect
tindakan termasuk dalam kelompok tindakan yang mengganggu , mereka harus berada di awal aturan chain
(jika ada rantai). Tindakan kedua akan menimpa yang pertama dan yang ketiga akan menimpa yang kedua, jadi Anda harus memilih mana yang ingin Anda lakukan dan dapat menghapus yang lain.
chain
tindakan akan memanggil aturan rantai berikutnya, perhatikan bahwa aturan kedua, tidak memiliki id
.
REMOTE_ADDR
berisi alamat IP dari permintaan.
@ipMatchFromFile
akan file modsecurity-ip-white.list
yang berisi daftar putih alamat IP, dipisahkan pada baris baru. Entri CIDR juga dapat diterima. Karena tindakan yang mengganggu selalu terletak di aturan utama rantai itu akan diterapkan, tetapi ketika IP tertentu dalam daftar putih ini exec
tindakan tidak akan diterapkan. File mungkin kosong, tetapi Anda harus membuatnya ( touch
).
exec
tindakan akan memanggil skrip eksternal kami. Tindakan ini tidak mengganggu dan akan dieksekusi ketika aturan saat ini mengembalikan true. Ketika tindakan ini diterapkan, IP jarak jauh akan diproses melalui skrip kami.
setenv
tindakan ini akan mengekspor variabel internal tertentu =%{...}
sebagai envvars, nama yang diekspor dapat berbeda dari internal. Beberapa variabel harus diekspor secara manual, beberapa lainnya diekspor secara otomatis - mungkin itu adalah bug kecil (dalam beberapa kasus ekspor manual dengan nama yang sama, misalnya setenv:REQUEST_URI=%{REQUEST_URI}
, akan menyebabkan nilai kosong dari variabel yang diekspor).
Pemeriksaan
Mari kita asumsikan Anda tidak memiliki Joomla di server Anda, edit file modsecurity-uri-black.list
dan tambahkan baris dengan konten /joomla
. Kemudian ketikkan browser Anda https://exemple.com/joomla
. Anda harus diarahkan dan diblokir melalui Iptables. Kosongkan catatan sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, tambahkan IP Anda modsecurity-ip-white.list
dan lakukan latihan lagi. Sekarang Anda harus diarahkan, tetapi tidak diblokir.
Hubungkan skrip kami dengan OWASP Core Rule Set 3.x
Untuk melakukan itu, kami akan memperbarui tindakan default dari Aturan Mode Anomali (949110 dan 959100). Untuk tujuan ini, edit file /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
dan tambahkan baris berikutnya ke bawah:
# -- Anomaly Mode - Update actions by ID -----
#
SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#
SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
"id:'999010', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"id:'999020', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
Pemeriksaan
Jangan lupa untuk me-restart (atau memuat ulang) Apache untuk menerapkan perubahan konfigurasi. Jangan lupa untuk menghapus catatan secara berkala selama tes, jika tidak, Anda dapat diblokir secara permanen :-)
Simulasikan serangan traversal direktori:
https://example.com/?abc=../../../ # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../ # This should pass because of the whitelist rule
Simulasikan serangan SQL Injection:
https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo
ModSecurity dan File Log Apache
Server web Apache dapat dikonfigurasi untuk memberikan administrator informasi penting tentang cara kerjanya ... Jalan utama untuk memberikan umpan balik kepada administrator adalah melalui penggunaan file log. Baca lebih banyak...
ModSecurity memiliki mekanisme logging yang kuat. Dengan arahan SecGuardianLog
itu menyediakan feed log yang dirancang khusus untuk bekerja dengan skrip eksternal.
Saat ini satu-satunya alat yang diketahui bekerja dengan wali logging adalah
httpd-guardian
, yang merupakan bagian dari proyek alat Apache httpd . The httpd-guardian
Alat ini dirancang untuk mempertahankan terhadap serangan penolakan layanan. Ini menggunakan blacklist tool
untuk berinteraksi dengan ... iptables-based firewall, secara dinamis daftar hitam alamat IP yang menyinggung. Baca lebih banyak...
File Log ModSecurity ► Fail2Ban ► Iptables
Dimungkinkan untuk men-setup Fail2Ban untuk penguraian data file log Apache. modsec_audit.log
mungkin merupakan pilihan terbaik, tetapi lihat juga bagian di mana kita berbicara tentang SecGuardianLog
.
Perhatikan bahwa SecAuditLogRelevantStatus
dalam /etc/modsecurity/modsecurity.conf
komentar. Kalau tidak, semua orang yang menerima halaman kesalahan 404 akan diblokir oleh fail2ban.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
Saat ini Fail2Ban tidak diterapkan dengan cara apa pun dalam proyek ini.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
httpd-guardian
- mendeteksi serangan DoS dengan memonitor permintaan Apache Security, Copyright (C) 2005 Ivan Ristic - dirancang untuk memonitor semua permintaan server web melalui mekanisme logging pipa. Ini melacak jumlah permintaan yang dikirim dari setiap alamat IP ... httpd-wali dapat memancarkan peringatan atau menjalankan skrip untuk memblokir alamat IP ...
Script ini dapat digunakan dengan mekanisme logging Apache2 , atau dengan
ModSecurity (lebih baik).
Instalasi dan Pengaturan dalam Keadaan Saat Ini
Unduh httpd-guardian
dan buat itu dapat dieksekusi:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl
Baca baris 98-119
untuk melihat bagaimana skrip terhubung dengan skrip WSAS kami.
Terapkan perubahan berikut dalam konfigurasi Apache ( /etc/modsecurity/modsecurity.conf
), lalu mulai kembali:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
Pemeriksaan
Untuk menguji skrip, nonaktifkan ModEvasive ( sudo a2dismod evasive
jangan lupa untuk mengaktifkannya nanti) dan restart Apache. Kemudian tail
log exec:
tail -F /var/www-security-assistant/www-security-assistant.execlog
Dan dari contoh lain melakukan serangan DoS, misalnya digunakan ab
dengan cara ini:
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
ModSecGuardianLog ► Analisis Kustom ► WSAS ► Iptables
Berikut ini disajikan skrip sederhana, disebut httpd-custom-analyze.bash
, itu bukan sesuatu yang istimewa tetapi bisa menjadi contoh yang bagus. Fitur-fiturnya dijelaskan dalam tubuh skrip.
Instalasi dan Pengaturan
Unduh httpd-custom-analyze.bash
dan buat itu dapat dieksekusi:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash
Terapkan perubahan berikut dalam konfigurasi Apache ( /etc/modsecurity/modsecurity.conf
) dan mulai kembali:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
Script akan memanggil WSAS ketika ambang tercapai - baca baris 86
dan 35
.
Untuk membuat kedua httpd-
skrip bekerja secara bersamaan, edit modsecurity.conf
dan pipa SecGuardianLog
untuk keduanya.
Untuk melakukan tes, ikuti tips dari bagian di atas.