Saya perlu aturan untuk menjatuhkan beberapa koneksi Apache berbahaya


10

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.


Saya tidak melihat pola tertentu dalam permintaan HTTP ini. Bagaimana Anda tahu mereka jahat? Saya tidak mengerti apa yang ingin Anda capai di sini. Bisakah Anda mengedit pertanyaan Anda untuk menjelaskan? Terima kasih.
David Foerster

Halo David, Beberapa waktu yang lalu ketika saya membuka port seperti ftp, saya menerima log dari brute force, ketika saya melihat fail2ban dalam 24 jam memiliki lebih dari 100 ips jatuh di iptables. Saya menutup semua port kecuali 80. sekarang saya mencoba membuat aturan seperti fail2ban, tetapi untuk apache.
Javier Palmero

2
Apakah Anda tahu tentang mod_security dan mod_evasive untuk Apache?
pa4080

ya, apakah Anda memiliki aturan untuk dibagikan? atau di mana menemukannya? Saya memblokir ips dari blocklist.de
Javier Palmero

Saya telah menuliskan hampir semua yang saya tahu tentang keamanan Apache2.
pa4080

Jawaban:


18

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.


Tolong jangan sering mengedit posting Anda. Secara konstan mengedit posting Anda berkali-kali dalam sehari terus menabrak ini ke halaman depan, dan juga menghasilkan kebisingan bagi kami moderator. Alih-alih, pertimbangkan untuk menyusun konten Anda di halaman lain atau editor teks , lalu mengeditnya secara massal, daripada mengedit detail secara individual. (Posting ini dikunci selama satu jam untuk menilai batas pengeditan yang sedang dilakukan di sini sementara)
Thomas Ward

1
Terima kasih atas komentarnya, @ThomasWard. Saya akan mengingatnya! Bukankah sebaiknya memiliki sesuatu sebagai kotak pasir di halaman Pengguna, di sebelah Edit Profil & Pengaturan ?
pa4080

1
Sudah diusulkan dan saya percaya ditolak. Apa yang saya sarankan adalah Anda membuat perubahan tanpa menyimpan, dan menyimpan salinan pertanyaan Anda apa adanya di file teks pada sistem Anda, lalu Anda dapat mengeditnya, menyalinnya kembali ketika Anda ingin mengedit posting, dan kemudian perbaiki untuk penurunan harga dan semacamnya. Juga, semua coretan itu ... membuat semuanya sulit dibaca. Sebaiknya hapus saja bagian-bagian itu. (Riwayat revisi akan menyimpan data)
Thomas Ward

Sungguh konyol bahwa Stack Exchange tidak mengizinkan tidak menabrak pengeditan ke halaman depan
Franck Dernoncourt

1

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 .

  1. Menjadi terbiasa dengan Cloudflare karena mereka memberikan perlindungan DDoS gratis.
  2. Jika saat ini Anda hanya menggunakan Apache, coba pelajari cara kerja NGINX untuk menyeimbangkan beban Anda. NGINX sangat bagus untuk load balancing Apache seperti yang ditampilkan di sini dan di sini .
  3. Tinjau kiat Apache untuk keamanan pada dokumen mereka .
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.