GNU/Linux >> Belajar Linux >  >> Linux

10 Tips untuk Mengamankan Server Web Apache Anda di UNIX / Linux

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

Linux
  1. Cara mengkonfigurasi server web Apache

  2. 7 langkah untuk mengamankan server Linux Anda

  3. Instal server web Apache di Linux Mint 13 / Linux Mint 14

  1. Temukan 10 Alamat IP Teratas Mengakses Server Web Apache Anda

  2. Amankan Server Linux Anda Dengan Fail2Ban [Panduan Pemula]

  3. LAMP vs. LEMP – tips memilih Apache atau nginx untuk server web Anda

  1. Siapkan server VPN di PC Linux Anda

  2. Migrasi Unix ke Linux

  3. 6 Alat Sumber Terbuka yang Harus Dimiliki untuk Mengamankan Server Linux Anda