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 $IPalamat 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 $IPakan diblokir untuk jangka waktu yang sama dengan nilai $BAN_TIME. Mode ini menggunakan perintah at.
Tahap kedua: ketika jumlah pelanggaran dari tertentu $IPmenjadi sama dengan nilai $LIMIT, $IPalamat 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.listdan 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 $IPdari 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.listdan menghasilkan aturan sebagai:
iptables -A GUARDIAN -s $IP -j ACCEPT
Ketergantungan
Penggunaan skrip iptables-save.shdan iptablesrantai 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.listdan 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.bashdan 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.bashsebagai perintah khusus:
sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
Berikan izin untuk www-datamenjalankan www-security-assistant.bashtanpa kata sandi melalui sudo. Gunakan perintah berikut untuk membuat dan mengedit file baru dengan aman dengan sudoersaturan 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 $AGENTdan 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.historydan www-security-assistant.mail. Jalankan perintah di atas 5 kali dan tinjau file iptables-DROP.listdan 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-assistantdengan 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 iptablesconing 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 GUARDIANdan masukkan sebagai nomor 3 ke INPUTrantai:
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_evasiveuntuk berbicara iptablesmelalui www-security-assistant.bash, dibuat di bagian di atas.
Edit /etc/apache2/mods-available/evasive.confdengan 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 F5metode, yang disebutkan di atas, atau kita dapat menggunakan perintah sebagai ab, hping3, dll
Perhatian: Hati-hati karena iptablesaturan, 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.confdengan 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.confmelibatkan /etc/modsecurity/modsecurity.confkonfigurasi Apache. Pada tahap ini security2.confakan 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_securityuntuk lebih jelasnya.
Untuk membuatnya lebih menyenangkan, tempatkan skrip issues.phpdi 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.confsekali 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-adminpermintaan 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:403dan (2) redirect:'/issues.php'. Sebenarnya kita tidak memerlukan denytindakan karena akan ditimpa oleh redirecttindakan.
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 ( gitdiperlukan).
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.pymembawa 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 SecGeoLookupDBarahan:
SecGeoLookupDB util/geo-location/GeoIP.dat
Terapkan konfigurasi Apache. Edit /etc/apache2/mods-available/security2.confdengan 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_security2untuk PhpMyAdmin. Ubah /etc/phpmyadmin/apache.confdengan 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.confadalah 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 973301dan 950907merupakan 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, exectindakan 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_HOSTdan $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.confdan 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 ...
@pmFromFileakan membaca file modsecurity-uri-black.listyang 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_URIdan daftar pola kami aturan akan diterapkan. File mungkin kosong, tetapi Anda harus membuatnya ( touch).
The logtindakan akan membuat entri log dalam file log untuk aturan ini dengan id:150.
drop, deny(dengan status) dan redirecttindakan 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.
chaintindakan akan memanggil aturan rantai berikutnya, perhatikan bahwa aturan kedua, tidak memiliki id.
REMOTE_ADDR berisi alamat IP dari permintaan.
@ipMatchFromFileakan file modsecurity-ip-white.listyang 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 exectindakan tidak akan diterapkan. File mungkin kosong, tetapi Anda harus membuatnya ( touch).
exectindakan 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.
setenvtindakan 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.listdan 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.listdan 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.confdan 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 SecGuardianLogitu 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-guardianAlat ini dirancang untuk mempertahankan terhadap serangan penolakan layanan. Ini menggunakan blacklist tooluntuk 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.logmungkin merupakan pilihan terbaik, tetapi lihat juga bagian di mana kita berbicara tentang SecGuardianLog.
Perhatikan bahwa SecAuditLogRelevantStatusdalam /etc/modsecurity/modsecurity.confkomentar. 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-guardiandan 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-119untuk 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 evasivejangan lupa untuk mengaktifkannya nanti) dan restart Apache. Kemudian taillog exec:
tail -F /var/www-security-assistant/www-security-assistant.execlog
Dan dari contoh lain melakukan serangan DoS, misalnya digunakan abdengan 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.bashdan 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 86dan 35.
Untuk membuat kedua httpd-skrip bekerja secara bersamaan, edit modsecurity.confdan pipa SecGuardianLoguntuk keduanya.
Untuk melakukan tes, ikuti tips dari bagian di atas.