Saya menjatuhkan semua lalu lintas pada port kecuali pada 80 untuk server web saya.
Saya punya beberapa aturan seperti ini di iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Seseorang yang memiliki lebih banyak dapat berbagi? Saya tahu selalu peretas jahat masih memperbarui, tetapi beberapa dari mereka selalu mulai dengan kode yang sama. Saya perlu Drop koneksi berdasarkan beberapa kriteria. Berikut adalah beberapa log Apache (saya menghapus ips tetapi setiap serangan berasal dari yang sama):
Serangan 1: Ini saya tidak tahu apa yang coba dilakukan, tetapi membuatnya 50 kali dari ip yang sama
GET / HTTP/1.1 301 224 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1 302 3387 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Serangan 2: ini mencoba untuk mendapatkan informasi tentang server saja.
GET / HTTP/1.1 301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1 302 3228 http mywebsite Go-http-client/1.1
GET /es/ HTTP/1.1 200 40947 https mywebsite Go-http-client/1.1
Serangan 3: mereka mencoba mendapatkan akses ke kerentanan halaman login
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Serangan 4: ini mencoba mengakses cgi pada permintaan pertama, (lihat aturan iptables pertama saya untuk menjatuhkan ini)
GET /hndUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
Saya sangat baru dengan server 4 serangan ini hanya dari 12 jam terakhir ... Dapatkan ribuan per minggu.
Jawaban:
Berikut adalah beberapa cara yang dilihat secara berlebihan, yang terlibat dalam mekanisme lengkap, cara meningkatkan keamanan Apache2 di dalam Ubuntu 16.04.
Daftar Isi:
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: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 perintahat
.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: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
: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:Ketergantungan
Penggunaan skrip
iptables-save.sh
daniptables
rantaiGUARDIAN
, 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
daniptables-DROP-CLEAR.list
.Skrip memerlukan konfigurasi minimal untuk mengirim email:
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
. Unduhwww-security-assistant.bash
dan buat itu dapat dieksekusi:Jadikan
www-security-assistant.bash
sebagai perintah khusus:Berikan izin untuk
www-data
menjalankanwww-security-assistant.bash
tanpa kata sandi melaluisudo
. Gunakan perintah berikut untuk membuat dan mengedit file baru dengan aman dengansudoers
aturan tambahan ' ':Tambahkan baris berikut di dalam file - simpan file dan keluar:
Tweak
www-security-assistant.bash
. Ubah setidaknya nilai variabel$EMAIL_TO
.Pemeriksaan
Tunjukkan diri Anda
$AGENT
dan periksa apakah MODE Otomatis berfungsi dengan baik:Kemudian periksa email Anda, ketik
iptables -L GUARDIAN -n
, tinjau filewww-security-assistant.history
danwww-security-assistant.mail
. Jalankan perintah di atas 5 kali dan tinjau fileiptables-DROP.list
daniptables-CURRENT.conf
.Periksa apakah MODE Manual berfungsi dengan baik - tambahkan localhost Anda ke Daftar Putih:
Kemudian periksa file tersebut
iptables-ACCEPT.list
.Iptables - Konfigurasi Dasar - Simpan dan Kembalikan
Konfigurasi dasar
Silakan baca manual ini sebelum menambahkan aturan berikut.
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.)Buat rantai baru
Buat rantai baru, panggil
GUARDIAN
dan masukkan sebagai nomor 3 keINPUT
rantai:Pemeriksaan
Nyalakan ulang sistem dan periksa konfigurasinya. Silakan gunakan
sudo systemctl reboot
(jangan gunakan opsi gayareboot -f
). Ketika sistem kembali online kami dapat memeriksa apakah rantai yang baru dibuat ada oleh:ModEvasive untuk Apache2
Instalasi
Pasang dan aktifkan modul:
Buat Direktori Log dan buat aksesnya untuk
www-data
:Sesuaikan konfigurasi dasar - batalkan komentar dan edit arahan tertentu dalam file konfigurasi:
Restart Apache:
sudo systemctl restart apache2.service
.Pemeriksaan
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 berbicaraiptables
melaluiwww-security-assistant.bash
, dibuat di bagian di atas.Edit
/etc/apache2/mods-available/evasive.conf
dengan cara ini:Buat file log dan Restart Apache:
Untuk menguji konfigurasi ini kita dapat mensimulasikan serangan DDOS melalui
F5
metode, yang disebutkan di atas, atau kita dapat menggunakan perintah sebagaiab
,hping3
, dllPerhatian: 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
Instalasi
Pasang dan aktifkan modul:
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:File tersebut
/etc/apache2/mods-enabled/security2.conf
melibatkan/etc/modsecurity/modsecurity.conf
konfigurasi Apache. Pada tahap inisecurity2.conf
akan terlihat seperti ini:Buat Direktori Log:
Atur rotasi log. Pertama-tama buat file config:
Kemudian edit file baru dengan cara ini:
Mulai ulang Apache.
Pemeriksaan
Buat file konfigurasi tambahan di
/etc/modsecurity
, panggil misalnyaz-customrules.conf
, dan tambahkan aturan berikut sebagai kontennya:Restart server:
sudo systemctl restart apache2.service
. Buka browser Anda dan ketikhttps://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 AndaDocumentRoot
(di sini saya anggap sebagai tempat ini/var/www/html
):Kemudian ubah aturan di atas dengan cara berikut:
Restart Apache, lalu buka browser Anda dan ketik
https://example.com/?abc=../
;-) Idenya dipinjam dari skrip SEBotLovin.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 (perhatikanchain
):Di sini kita memiliki dua tindakan mengganggu: (1)
deny, status:403
dan (2)redirect:'/issues.php'
. Sebenarnya kita tidak memerlukandeny
tindakan karena akan ditimpa olehredirect
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
: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
:Buat file konfigurasi:
Baca dan edit file-file ini dengan cermat! Batalkan komentar setidaknya
SecGeoLookupDB
arahan:Terapkan konfigurasi Apache. Edit
/etc/apache2/mods-available/security2.conf
dengan cara ini: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:
Nonaktifkan
mod_security2
untuk PhpMyAdmin. Ubah/etc/phpmyadmin/apache.conf
dengan cara ini:Nonaktifkan aturan khusus untuk direktori tertentu:
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:
Daftar putih alamat IP sehingga dapat melewati ModSecurity:
Nonaktifkan aturan dalam kecocokan Direktori:
Perbarui tindakan aturan dengan ID-nya dalam Pencocokan lokasi:
Dalam contoh di atas, kami menganggap itu
973301
dan950907
merupakan ID aturan yang menghalangi pekerjaan normal aplikasi web kami. Kita dapat menemukan aturan karena ini dengan menganalisismodsec_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.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 memanggilwww-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
- variabel ini berisi URI lengkap dari permintaan saat ini. Aturan culd menjadi lebih luas:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
akan membaca filemodsecurity-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 antaraREQUEST_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 denganid:150
.drop
,deny
(denganstatus
) danredirect
tindakan termasuk dalam kelompok tindakan yang mengganggu , mereka harus berada di awal aturanchain
(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 memilikiid
.REMOTE_ADDR
berisi alamat IP dari permintaan.@ipMatchFromFile
akan filemodsecurity-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 iniexec
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, misalnyasetenv: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 Andahttps://exemple.com/joomla
. Anda harus diarahkan dan diblokir melalui Iptables. Kosongkan catatansudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, tambahkan IP Andamodsecurity-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: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:
Simulasikan serangan SQL Injection:
ModSecurity dan File Log Apache
ModSecurity memiliki mekanisme logging yang kuat. Dengan arahan
SecGuardianLog
itu menyediakan feed log yang dirancang khusus untuk bekerja dengan skrip eksternal.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 tentangSecGuardianLog
.Perhatikan bahwa
SecAuditLogRelevantStatus
dalam/etc/modsecurity/modsecurity.conf
komentar. Kalau tidak, semua orang yang menerima halaman kesalahan 404 akan diblokir oleh fail2ban.Saat ini Fail2Ban tidak diterapkan dengan cara apa pun dalam proyek ini.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
Instalasi dan Pengaturan dalam Keadaan Saat Ini
Unduh
httpd-guardian
dan buat itu dapat dieksekusi: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:Pemeriksaan
Untuk menguji skrip, nonaktifkan ModEvasive (
sudo a2dismod evasive
jangan lupa untuk mengaktifkannya nanti) dan restart Apache. Kemudiantail
log exec:Dan dari contoh lain melakukan serangan DoS, misalnya digunakan
ab
dengan cara ini: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:Terapkan perubahan berikut dalam konfigurasi Apache (
/etc/modsecurity/modsecurity.conf
) dan mulai kembali:Script akan memanggil WSAS ketika ambang tercapai - baca baris
86
dan35
.Untuk membuat kedua
httpd-
skrip bekerja secara bersamaan, editmodsecurity.conf
dan pipaSecGuardianLog
untuk keduanya.Untuk melakukan tes, ikuti tips dari bagian di atas.
sumber
Saya menyadari pa4080 memberikan respons terperinci dan mungkin sangat membantu untuk mengurus semua ini sendiri. Meskipun mengurus sendiri masalah Anda mungkin terasa menyenangkan, ini juga bisa memakan banyak waktu .
sumber