Jika Anda seorang sysadmin, Anda harus mengamankan server web Apache Anda dengan mengikuti 10 tips yang disebutkan dalam artikel ini.
1. Nonaktifkan modul yang tidak perlu
Jika Anda berencana untuk menginstal Apache dari sumber, Anda harus menonaktifkan modul berikut. Jika Anda melakukan ./configure –help, Anda akan melihat semua modul yang tersedia yang dapat Anda nonaktifkan/aktifkan.
- userdir – Pemetaan permintaan ke direktori khusus pengguna. yaitu ~nama pengguna di URL akan diterjemahkan ke direktori di server
- autoindex – Menampilkan daftar direktori saat tidak ada file index.html
- status – Menampilkan statistik server
- env – Menghapus/mengatur vars ENV
- setenvif – Menempatkan vars ENV pada header
- cgi – skrip CGI
- tindakan – Pemicu tindakan berdasarkan permintaan
- negosiasi – Negosiasi konten
- alias – Memetakan permintaan ke bagian sistem file yang berbeda
- termasuk – Sisi Server Termasuk
- filter – Pemfilteran permintaan yang cerdas
- versi – Menangani informasi versi dalam file konfigurasi menggunakan IfVersion
- apa adanya – tipe file apa adanya
Nonaktifkan semua modul di atas seperti yang ditunjukkan di bawah ini ketika Anda melakukan ./configure
./configure \ --enable-ssl \ --enable-so \ --disable-userdir \ --disable-autoindex \ --disable-status \ --disable-env \ --disable-setenvif \ --disable-cgi \ --disable-actions \ --disable-negotiation \ --disable-alias \ --disable-include \ --disable-filter \ --disable-version \ --disable-asis
Jika Anda mengaktifkan ssl, dan menonaktifkan mod_setenv, Anda akan mendapatkan kesalahan berikut.
- Kesalahan :Kesalahan sintaks pada baris 223 dari /usr/local/Apache2/conf/extra/httpd-ssl.conf:Perintah 'BrowserMatch' tidak valid, mungkin salah eja atau ditentukan oleh modul yang tidak disertakan dalam konfigurasi server
- Solusi :Jika Anda menggunakan ssl, jangan nonaktifkan setenvif. Atau, beri komentar BrowserMatch di httpd-ssl.conf Anda, jika Anda menonaktifkan mod_setenvif.
Setelah instalasi, ketika Anda melakukan httpd -l , Anda akan melihat semua modul yang terpasang.
# /usr/local/apache2/bin/httpd -l Compiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_log_config.c mod_ssl.c prefork.c http_core.c mod_mime.c mod_dir.c mod_so.c
Dalam contoh ini, kami telah menginstal modul apache berikut.
- core.c – modul inti Apache
- mod_auth* – Untuk berbagai modul otentikasi
- mod_log_config.c – Mencatat permintaan klien. memberikan fleksibilitas log tambahan.
- mod_ssl.c – Untuk SSL
- prefork.c – Untuk modul MPM (Multi-Processing Module)
- httpd_core.c – modul inti Apache
- mod_mime.c – Untuk menyetel jenis MIME dokumen
- mod_dir.c – Untuk trailing slash redirect pada jalur direktori. jika Anda menentukan url/test/, itu menuju ke url/test/index.html
- mod_so.c – Untuk memuat modul saat memulai atau memulai ulang
2. Jalankan Apache sebagai pengguna dan grup terpisah
Secara default, Apache mungkin berjalan sebagai tidak ada orang atau daemon. Adalah baik untuk menjalankan Apache di akun non-istimewanya sendiri. Misalnya:apache.
Buat grup dan pengguna Apache.
groupadd apache useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache
Ubah httpd.conf, dan atur Pengguna dan Grup dengan tepat.
# vi httpd.conf User apache Group apache
Setelah ini, jika Anda me-restart apache, dan melakukan ps -ef, Anda akan melihat bahwa apache berjalan sebagai "apache" (Kecuali proses httpd pertama, yang akan selalu berjalan sebagai root).
# ps -ef | grep -i http | awk '{print $1}' root apache apache apache apache apache
3. Batasi akses ke direktori root (Gunakan Izinkan dan Tolak)
Amankan direktori root dengan menyetel yang berikut di httpd.conf
<Directory /> Options None Order deny,allow Deny from all </Directory>
Di atas:
- Opsi Tidak Ada – Setel ini ke Tidak Ada, yang tidak akan mengaktifkan fitur tambahan opsional apa pun.
- Pesanan ditolak, izinkan – Ini adalah urutan di mana perintah “Deny” dan “Allow” harus diproses. Ini memproses "tolak" terlebih dahulu dan "izinkan" selanjutnya.
- Tolak dari semua – Ini menolak permintaan dari semua orang ke direktori root. Tidak ada perintah Allow untuk direktori root. Jadi, tidak ada yang bisa mengaksesnya.
4. Tetapkan izin yang sesuai untuk direktori conf dan bin
bin dan direktori conf harus dilihat hanya oleh pengguna yang berwenang. Sebaiknya buat grup, dan tambahkan semua pengguna yang diizinkan untuk melihat/memodifikasi file konfigurasi apache ke grup ini.
Mari kita sebut grup ini:apacheadmin
Buat grup.
groupadd apacheadmin
Izinkan akses ke direktori bin untuk grup ini.
chown -R root:apacheadmin /usr/local/apache2/bin chmod -R 770 /usr/local/apache2/bin
Izinkan akses ke direktori conf untuk grup ini.
chown -R root:apacheadmin /usr/local/apache2/conf chmod -R 770 /usr/local/apache2/conf
Tambahkan anggota yang sesuai ke grup ini. Dalam contoh ini, ramesh dan john adalah bagian dari apacheadmin
# vi /etc/group apacheadmin:x:1121:ramesh,john
5. Nonaktifkan Penjelajahan Direktori
Jika Anda tidak melakukan ini, pengguna akan dapat melihat semua file (dan direktori) di bawah root Anda (atau sub-direktori apa pun).
Misalnya, jika mereka membuka http://{your-ip}/images/ dan jika Anda tidak memiliki index.html di bawah gambar, mereka akan melihat semua file gambar (dan sub-direktori) yang tercantum di browser (seperti keluaran ls -1). Dari sini, mereka dapat mengklik file gambar individual untuk melihatnya, atau mengklik subdirektori untuk melihat kontennya.
Untuk menonaktifkan penjelajahan direktori, Anda dapat menyetel nilai Options directive ke “None” atau “-Indexes” . A – di depan nama opsi akan menghapusnya dari daftar opsi saat ini yang diterapkan untuk direktori tersebut.
Indeks akan menampilkan daftar file dan sub-direktori yang tersedia di dalam direktori di browser (hanya jika tidak ada index.html di dalam folder itu). Jadi, Indeks tidak boleh diizinkan.
<Directory /> Options None Order allow,deny Allow from all </Directory> (or) <Directory /> Options -Indexes Order allow,deny Allow from all </Directory>
6. Jangan izinkan .htaccess
Menggunakan file .htaccess di dalam sub-direktori tertentu di bawah htdocs (atau di mana pun di luar), pengguna dapat menimpa arahan apache default. Pada situasi tertentu, ini tidak baik, dan harus dihindari. Anda harus menonaktifkan fitur ini.
Anda tidak boleh mengizinkan pengguna untuk menggunakan file .htaccess dan mengesampingkan arahan apache. Untuk melakukannya, setel “AllowOverride None ” di direktori root.
<Directory /> Options None AllowOverride None Order allow,deny Allow from all </Directory>
7. Nonaktifkan Opsi lain
Berikut adalah nilai yang tersedia untuk direktif Opsi:
- Opsi Semua – Semua opsi diaktifkan (kecuali MultiViews). Jika Anda tidak menentukan direktif Opsi, ini adalah nilai default.
- Opsi ExecCGI – Jalankan skrip CGI (menggunakan mod_cgi)
- Opsi FollowSymLinks – Jika Anda memiliki tautan simbolis di direktori ini, itu akan diikuti.
- Opsi Termasuk – Izinkan penyertaan sisi server (menggunakan mod_include)
- Opsi TermasukNOEXEC – Mengizinkan menyertakan sisi server tanpa kemampuan untuk menjalankan perintah atau cgi.
- Indeks Opsi – Nonaktifkan daftar direktori
- Opsi MultiViews – Izinkan multiview yang dinegosiasikan konten (menggunakan mod_negosiasi)
- Opsi SymLinksIfOwnerMatch – Mirip dengan FollowSymLinks. Namun, ini hanya akan mengikuti jika pemiliknya sama antara tautan dan direktori asli yang ditautkan.
Jangan pernah menentukan 'Opsi Semua'. Selalu tentukan satu (atau lebih) opsi yang disebutkan di atas. Anda dapat menggabungkan beberapa opsi dalam satu baris seperti yang ditunjukkan di bawah ini.
Options Includes FollowSymLinks
Tanda + dan – di depan nilai opsi berguna saat Anda memiliki direcotir bersarang, dan ingin menimpa opsi dari direktif Direktori induk.
Dalam contoh ini, untuk direktori /site, ia memiliki Termasuk dan Indeks:
<Directory /site> Options Includes Indexes AllowOverride None Order allow,deny Allow from all </Directory>
Untuk direktori /site/en, jika Anda hanya membutuhkan Indeks dari /site (Dan bukan Termasuk), dan jika Anda hanya ingin FollowSymLinks ke direktori ini, lakukan hal berikut.
<Directory /site/en> Options -Includes +FollowSymLink AllowOverride None Order allow,deny Allow from all </Directory>
- /site akan memiliki Termasuk dan Indeks
- /site/en akan memiliki Indeks dan FollowSymLink
8. Hapus modul DSO yang tidak diinginkan
Jika Anda telah memuat modul objek bersama dinamis ke Apache, modul tersebut akan ada di dalam httpd.conf di bawah arahan “LoadModule”.
Harap perhatikan bahwa modul apache yang dikompilasi secara statis tidak akan terdaftar sebagai direktif “LoadModule”.
Komentari “LoadModules” . yang tidak diinginkan di httpd.conf
grep LoadModule /usr/local/apache2/conf/httpd.conf
9. Batasi akses ke jaringan (atau alamat ip) tertentu
Jika Anda ingin situs Anda hanya dilihat oleh alamat ip atau jaringan tertentu, lakukan hal berikut:
Untuk mengizinkan jaringan tertentu mengakses situs Anda, berikan alamat jaringan di perintah Izinkan.
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.0.0/24 </Directory>
Untuk mengizinkan alamat ip tertentu untuk mengakses situs Anda, berikan alamat ip di direktif Allow.
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.1.21 </Directory>
10. Jangan tampilkan atau kirim versi Apache (Set ServerTokens)
Secara default, header respons HTTP server akan berisi versi apache dan php. Sesuatu yang mirip dengan berikut ini. Ini berbahaya, karena kami tidak ingin penyerang mengetahui nomor versi tertentu.
Server: Apache/2.2.17 (Unix) PHP/5.3.5
Untuk menghindari ini, setel ServerTokens ke Prod di httpd.conf. Ini akan menampilkan “Server:Apache” tanpa informasi versi apa pun.
# vi httpd.conf ServerTokens Prod
Berikut adalah kemungkinan nilai ServerTokens:
- Prod ServerTokens menampilkan “Server:Apache”
- ServerTokens Major menampilkan “Server:Apache/2”
- ServerTokens Kecil menampilkan “Server:Apache/2.2”
- Minimal ServerToken menampilkan “Server:Apache/2.2.17”
- OS ServerTokens menampilkan “Server:Apache/2.2.17 (Unix)”
- ServerToken Penuh menampilkan “Server:Apache/2.2.17 (Unix) PHP/5.3.5” (Jika Anda tidak menentukan nilai ServerTokens, ini adalah nilai default)
Terlepas dari 10 tips di atas, pastikan untuk mengamankan sistem operasi UNIX/Linux Anda. Tidak ada gunanya mengamankan apache Anda, jika OS Anda tidak aman. Juga, selalu perbarui versi Apache Anda. Versi terbaru dari apache berisi perbaikan untuk semua masalah keamanan yang diketahui. Pastikan untuk sering meninjau file log apache Anda.
Bacaan tambahan di Apache
- Cara Menginstal Apache 2 dengan SSL di Linux (dengan mod_ssl, openssl)
- 9 Tips Menggunakan Apachectl dan Httpd seperti Power User
- XAMPP:Mudah Apache, MySQL, PHP, Instal Perl
- Cara Memasang Atau Mengupgrade LAMP Stack Menggunakan Yum