Konektor ModSecurity-nginx adalah titik koneksi antara nginx dan libmodsecurity (ModSecurity v3). Dengan kata lain, proyek ini menyediakan saluran komunikasi antara nginx dan libmodsecurity. Konektor ini diperlukan untuk menggunakan LibModSecurity dengan nginx.
Konektor ModSecurity-nginx berbentuk modul nginx. Modul ini hanya berfungsi sebagai lapisan komunikasi antara nginx dan ModSecurity.
Perhatikan bahwa proyek ini bergantung pada libmodsecurity daripada ModSecurity (versi 2.9 atau kurang).
Versi lama menggunakan ModSecurity standalone, yang merupakan pembungkus internal Apache untuk menghubungkan ModSecurity ke nginx. Versi saat ini lebih mirip dengan nginx, menggunakan libmodsecurity baru yang tidak lagi bergantung pada Apache. Hasilnya, versi saat ini memiliki lebih sedikit ketergantungan, lebih sedikit bug, dan lebih cepat. Selain itu, beberapa fungsi baru juga disediakan - seperti kemungkinan penggunaan konfigurasi aturan global dengan penyesuaian per direktori/lokasi (misalnya SecRuleRemoveById).
Sebelum mengkompilasi perangkat lunak ini pastikan Anda telah menginstal libmodsecurity. Anda dapat mengunduhnya dari repositori git ModSecurity. Untuk informasi mengenai kompilasi dan instalasi libmodsecurity silakan baca dokumentasi yang disertakan bersama itu.
Dengan libmodsecurity terinstal, Anda dapat melanjutkan dengan instalasi konektor ModSecurity-nginx, yang mengikuti prosedur instalasi modul pihak ketiga nginx. Dari direktori sumber nginx:
./configure --add-module=/path/to/ModSecurity-nginx
Atau, untuk membuat modul dinamis:
./configure --add-dynamic-module=/path/to/ModSecurity-nginx --with-compat
Perhatikan bahwa saat membuat modul dinamis, versi sumber nginx Anda harus cocok dengan versi nginx yang Anda kompilasi.
Informasi lebih lanjut tentang dukungan add-on pihak ketiga nginx tersedia di sini: http://wiki.nginx.org/3rdPartyModules
ModSecurity untuk nginx memperluas arahan konfigurasi nginx Anda. Ia menambahkan empat arahan baru dan itu adalah:
sintaks: modsecurity pada | mati
konteks: http, server, lokasi
bawaan: mati
Mengaktifkan atau menonaktifkan fungsionalitas ModSecurity. Perhatikan bahwa arahan konfigurasi ini tidak lagi terkait dengan status SecRule. Sebaliknya, sekarang hanya berfungsi sebagai flag nginx untuk mengaktifkan atau menonaktifkan modul.
sintaks: modsecurity_rules_file
konteks: http, server, lokasi
bawaan: tidak
Menentukan lokasi file konfigurasi modsecurity, misalnya:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
}
sintaks: modsecurity_rules_remote
konteks: http, server, lokasi
bawaan: tidak
Menentukan dari mana (di internet) file konfigurasi modsecurity akan diunduh. Ini juga menentukan kunci yang akan digunakan untuk mengautentikasi ke server itu:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
}
}
sintaks: modsecurity_rules
konteks: http, server, lokasi
bawaan: tidak
Memungkinkan penyertaan langsung aturan ModSecurity ke dalam konfigurasi nginx. Contoh berikut memuat aturan dari file dan memasukkan konfigurasi spesifik per direktori/alias:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
location /ops {
root /var/www/html/opts;
modsecurity_rules '
SecRuleEngine On
SecDebugLog /tmp/modsec_debug.log
SecDebugLogLevel 9
SecRuleRemoveById 10
' ;
}
}
sintaks: string modsecurity_transaction_id
konteks: http, server, lokasi
bawaan: tidak
Memungkinkan untuk meneruskan ID transaksi dari nginx alih-alih membuatnya di perpustakaan. Ini dapat berguna untuk tujuan penelusuran, misalnya pertimbangkan konfigurasi ini:
log_format extended ' $remote_addr - $remote_user [ $time_local ] '
'" $request " $status $body_bytes_sent '
'" $http_referer " " $http_user_agent " $request_id ' ;
server {
server_name host1;
modsecurity on;
modsecurity_transaction_id "host1- $request_id " ;
access_log logs/host1-access.log extended;
error_log logs/host1-error.log;
location / {
...
}
}
server {
server_name host2;
modsecurity on;
modsecurity_transaction_id "host2- $request_id " ;
access_log logs/host2-access.log extended;
error_log logs/host2-error.log;
location / {
...
}
}
Dengan menggunakan kombinasi log_format dan modsecurity_transaction_id Anda akan dapat menemukan korelasi antara log akses dan entri log kesalahan menggunakan pengidentifikasi unik yang sama.
String dapat berisi variabel.
Sebagai proyek sumber terbuka, kami mengundang (dan mendorong) siapa saja dari komunitas untuk berkontribusi pada proyek kami. Hal ini dapat berupa: fungsionalitas baru, perbaikan bug, laporan bug, dukungan pengguna pemula, dan hal lain yang ingin Anda bantu. Terima kasih.
Kami lebih memilih untuk menempatkan patch Anda dalam infrastruktur GitHub untuk memfasilitasi pekerjaan peninjauan kami, dan integrasi QA kami. GitHub menyediakan dokumentasi yang sangat baik tentang cara melakukan "Permintaan Tarik". Informasi lebih lanjut tersedia di sini: https://help.github.com/articles/using-pull-requests/
Harap hormati gaya pengkodean yang digunakan. Permintaan penarikan dapat mencakup berbagai penerapan, jadi berikan satu perbaikan atau satu fungsi per penerapan. Jangan mengubah apapun di luar lingkup pekerjaan target Anda (misalnya gaya pengkodean dalam fungsi yang telah Anda lewati).
Di dalam kode kami terdapat berbagai item yang ditandai sebagai TODO atau FIXME yang mungkin memerlukan perhatian Anda. Periksa daftar item dengan melakukan grep:
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *
Anda juga dapat melihat laporan bug terkini dan isu-isu terbuka untuk mendapatkan gambaran tentang jenis bantuan apa yang kami cari.
Bersamaan dengan pengujian manual, kami sangat menyarankan Anda untuk menggunakan utilitas pengujian nginx untuk memastikan bahwa patch yang Anda lakukan tidak berdampak buruk pada perilaku atau kinerja nginx.
Tes nginx tersedia di: http://hg.nginx.org/nginx-tests/
Untuk menggunakan pengujian tersebut, pastikan Anda memiliki bukti utilitas Perl (bagian dari Perl 5) dan lanjutkan dengan perintah berikut:
$ cp /path/to/ModSecurity-nginx/tests/* /path/to/nginx/test/repository
$ cd /path/to/nginx/test/repository
$ TEST_NGINX_BINARY=/path/to/your/nginx prove .
Jika Anda menghadapi masalah dalam mendapatkan fungsionalitas tambahan agar lulus semua tes nginx, jangan ragu untuk menghubungi kami atau milis nginx di: http://nginx.org/en/support.html
Kami menghormati skema debugging nginx. Dengan menggunakan opsi konfigurasi "--with-debug" selama konfigurasi nginx, Anda juga akan mengaktifkan pesan debug konektor. Core dump dan crash diharapkan dapat di-debug dengan cara yang sama seperti yang digunakan untuk men-debug nginx. Untuk informasi lebih lanjut, silakan periksa informasi debugging nginx: http://wiki.nginx.org/Debugging
Jika Anda menghadapi masalah konfigurasi atau jika ada sesuatu yang tidak berfungsi seperti yang Anda harapkan, silakan gunakan milis pengguna ModSecurity. Masalah pada GitHub juga diterima, namun kami lebih suka jika pengguna mengajukan pertanyaan di milis terlebih dahulu, sehingga Anda dapat menjangkau seluruh komunitas. Juga jangan lupa untuk mencari isu yang ada sebelum membuka yang baru.
Terakhir, Jika Anda berencana untuk membuka masalah di GitHub, jangan lupa memberi tahu kami versi libmodsecurity Anda dan versi konektor nginx yang Anda jalankan.
Harap jangan melaporkan masalah keamanan apa pun secara publik. Sebagai gantinya, hubungi kami di: [email protected] untuk melaporkan masalah ini. Setelah masalah teratasi, kami akan memberi Anda penghargaan atas penemuan tersebut.
Kami dengan senang hati mendiskusikan ide apa pun yang Anda miliki untuk fitur baru. Harap diingat bahwa ini adalah proyek berbasis komunitas, jadi pastikan untuk menghubungi komunitas melalui milis untuk mendapatkan masukan terlebih dahulu. Alternatifnya, silakan buka masalah GitHub yang meminta fitur baru. Sebelum membuka terbitan baru, harap periksa apakah sudah ada permintaan fitur untuk fungsi yang diinginkan.
Memiliki paket kami di distro tepat waktu adalah sesuatu yang sangat kami dambakan. Beri tahu kami jika ada yang bisa kami lakukan untuk memfasilitasi pekerjaan Anda sebagai pembuat paket.