18 Tip Keamanan dan Pengerasan Server Web Apache


Server web Apache adalah salah satu server web paling populer dan banyak digunakan untuk menghosting file dan situs web. Sangat mudah untuk menginstal dan mengkonfigurasi untuk memenuhi kebutuhan hosting Anda. Namun, pengaturan default tidak aman untuk menawarkan perlindungan yang sangat dibutuhkan situs Anda.

Dalam panduan ini, kita melihat beberapa tip dan trik pengerasan server Apache yang dapat Anda terapkan untuk memperkuat keamanan server web Anda.

1. Cara Menyembunyikan Versi Apache dan Informasi OS

Secara default, server web Apache menampilkan versinya jika Anda menelusuri URL situs web yang salah. Di bawah ini adalah contoh halaman kesalahan yang menunjukkan bahwa halaman tersebut tidak dapat ditemukan di situs. Baris terakhir menunjukkan versi Apache, OS host, alamat IP, dan port yang mendengarkannya.

Menampilkan informasi server web Anda bukanlah ide yang baik karena ini bisa menjadi hadiah yang bagus bagi peretas dalam misi pengintaian mereka. Untuk menambah lapisan keamanan dan mempersulit peretas, disarankan untuk menyembunyikan informasi server web.

Untuk melakukannya, buka file konfigurasi default Apache pada distribusi berbasis Debian.

sudo vim /etc/apache2/apache2.conf

Untuk sistem berbasis RHEL seperti RHEL, Fedora, CentOS, Rocky, dan AlmaLinux.

sudo vim /etc/httpd/conf/httpd.conf

Tambahkan baris berikut di akhir file.

ServerTokens Prod
ServerSignature Off

Simpan perubahan dan mulai ulang server web Apache.

sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Sekarang muat ulang situs dan, kali ini, informasi server web tidak akan ditampilkan.

2. Nonaktifkan Daftar Direktori di Apache

Secara default, Apache mengizinkan daftar direktori, dan pengunjung mungkin melihat file atau direktori apa pun yang mungkin Anda miliki di direktori Document Root Anda.

Untuk mendemonstrasikannya, kita akan membuat direktori bernama test.

sudo mkdir -p /var/www/html/test

Selanjutnya, kita akan menavigasi ke direktori dan membuat beberapa file.

cd /var/www/html/test
sudo touch app.py main.py

Sekarang, jika kita mengakses URL, http://localhost/test kita akan dapat melihat daftar direktori.

Untuk menonaktifkan daftar direktori, buka file konfigurasi utama Apache dan cari atribut 'Direktori'. Setel parameter ‘Opsi‘ ke '-Indexes' seperti yang ditunjukkan.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Muat ulang Apache, dan kali ini, saat Anda mengunjungi URL, direktori tidak akan ditampilkan lagi.

3. Perbarui Apache Secara Teratur

Selalu disarankan untuk selalu memperbarui semua aplikasi Anda, karena aplikasi terbaru dilengkapi dengan perbaikan bug dan patch keamanan yang mengatasi kerentanan mendasar yang ada pada versi perangkat lunak lama.

Oleh karena itu, disarankan untuk memperbarui aplikasi Anda ke versi terbaru secara rutin.

sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

4. Gunakan Enkripsi HTTPS di Apache

Apache, secara default, menggunakan protokol HTTP yang merupakan protokol lemah dan tidak aman yang rentan terhadap penyadapan. Untuk meningkatkan keamanan situs Anda dan, terlebih lagi, meningkatkan peringkat SEO Google Anda, pertimbangkan untuk mengenkripsi situs Anda menggunakan sertifikat SSL.

Dengan melakukan hal ini, protokol HTTP default akan dialihkan ke HTTPS, sehingga mempersulit siapa pun untuk mencegat dan menguraikan komunikasi yang dikirim bolak-balik dari server.

Lihat cara mengamankan server web Apache menggunakan Let's Encrypt SSL di Linux.

  • Cara Mengamankan Apache dengan Let's Encrypt SSL Certificate di RHEL
  • Cara Mengamankan Apache dengan Sertifikat SSL Let's Encrypt Gratis di Ubuntu dan Debian

5. Aktifkan HTTP Strict Transport Security (HSTS) untuk Apache

Selain mengenkripsi situs web Anda dengan sertifikat TLS/SSL, pertimbangkan untuk menerapkan mekanisme keamanan web HSTS di atas HTTPS.

HTTP Strict Transport Security (HSTS) adalah mekanisme kebijakan yang melindungi situs web dari serangan man-in-the-middle & pembajakan cookie. Hal ini terjadi ketika penyerang menurunkan versi protokol HTTPS ke protokol HTTP yang tidak aman.

HSTS memungkinkan server web untuk secara tegas menyatakan bahwa browser web hanya boleh berinteraksi dengannya melalui HTTPS, dan tidak pernah melalui protokol HTTP.

Untuk mengaktifkan HSTS, pastikan situs web Anda menjalankan HTTPS dan memiliki sertifikat TLS/SSL yang valid.

Selanjutnya, aktifkan modul headers untuk Apache:

sudo a2enmod headers

Lalu muat ulang Apache untuk menerapkan perubahan.

sudo systemctl restart apache2

Selanjutnya, akses file konfigurasi host virtual domain Anda.

sudo vim /etc/apache2/sites-available/mydomain.conf

Berikutnya, tambahkan baris ini di dalam blok :

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Ini terlihat sebagai berikut.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

Parameter usia maksimal menginstruksikan browser web untuk hanya mengakses situs Anda menggunakan HTTPS untuk satu tahun ke depan (31536000=1 tahun).

Terakhir, mulai ulang Apache agar kebijakan HSTS dapat diterapkan.

sudo systemctl restart apache2

6. Aktifkan HTTP/2 di Apache

Pada tahun 2015, HTTP/2 dirilis, yang merupakan versi baru protokol HTTP yang berupaya mengatasi atau mengatasi berbagai masalah yang tidak diperkirakan oleh pembuat HTTP/1.1.

Meskipun HTTP/1.1 masih digunakan secara luas, hal ini terkait dengan masalah kinerja yang terkait dengan penggunaan beberapa koneksi TCP untuk memproses banyak permintaan dari browser, yang menyebabkan overhead sumber daya yang tinggi di sisi klien, menyebabkan penurunan kinerja jaringan.

Seiring bertambahnya kompleksitas dan fungsionalitas aplikasi, HTTP/2 diciptakan untuk mengatasi kekurangan HTTP/1.1 yang mencakup header HTTP yang panjang, kecepatan pemuatan halaman web yang lambat, dan kinerja umum degradasi.

HTTP/2 memberikan perlindungan dan privasi lebih dibandingkan pendahulunya. Yang tidak kalah pentingnya adalah peningkatan kinerja melalui penggunaan aliran data multipleks. Dengan HTTP/2 satu koneksi TCP memastikan pemanfaatan bandwidth yang efektif, bahkan saat mentransmisikan banyak aliran data.

Lihat cara mengaktifkan HTTP/2 di server web Apache menggunakan:

  • Cara Mengaktifkan HTTP/2 di Apache di Ubuntu

7. Batasi Akses ke Direktori Sensitif di Apache

Tindakan keamanan lain yang mungkin Anda ambil adalah membatasi akses ke direktori yang mungkin berisi informasi sensitif seperti data pengguna, log, dan file konfigurasi.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

Dalam konfigurasi di atas, Wajibkan semua ditolak menolak akses kepada siapa pun yang mencoba mengakses file di /sensitive_directory.

Simpan perubahan dan keluar dari file. Kemudian restart Apache agar perubahan diterapkan.

8. Nonaktifkan Petunjuk ServerSignature di Apache

Perintah ServerSignature di file konfigurasi Apache menambahkan footer ke dokumen yang dihasilkan server yang berisi informasi tentang konfigurasi server web Anda seperti versi dan OS yang menjalankannya. Mengekspos detail penting tentang server web Anda kepada pelaku kejahatan akan meningkatkan kemungkinan serangan secara signifikan.

Untuk mencegah paparan informasi tersebut, Anda perlu menonaktifkan arahan ini di file konfigurasi Apache:

ServerSignature Off

Simpan perubahan dan sekali lagi restart Apache agar perubahan diterapkan.

sudo systemctl restart apache2

9. Setel Petunjuk 'ServerTokens' ke 'Prod'

Perintah 'ServerTokens' mengontrol informasi apa yang dikirimkan server termasuk versi Apache (versi mayor dan minor), OS, dan jenis server web yang berjalan.

Jumlah informasi paling sedikit yang ingin Anda ungkapkan kepada publik adalah bahwa server webnya adalah Apache. Hal lain hanya akan membuat server Anda terkena potensi serangan. Oleh karena itu, disarankan untuk menyetel direktif 'ServerTokens' di file konfigurasi Apache ke 'prod'.

ServerTokens Off

Seperti biasa, simpan perubahan dan pastikan untuk me-restart Apache.

10. Amankan Apache dengan Fail2ban

Fail2ban adalah aplikasi pencegahan intrusi sumber terbuka yang melindungi sistem Linux dari ancaman eksternal termasuk DoS dan serangan brute force. Ia bekerja dengan terus memantau log sistem untuk mencari aktivitas jahat dan melarang host yang cocok dengan pola yang meniru perilaku serangan.

Fail2ban dapat dikonfigurasi untuk melindungi Apache dari serangan DoS dengan terus memantau log Apache untuk upaya login yang gagal dan memblokir sementara IP yang melanggar.

Lihat cara menginstal Fail2ban di Linux menggunakan:

  • Cara Menggunakan Fail2ban untuk Mengamankan Server Linux Anda

11. Nonaktifkan Modul yang Tidak Diperlukan

Modul Apache hanyalah program yang dimuat untuk memperluas fungsionalitas server web. Fungsi yang diperluas oleh modul mencakup otentikasi dasar, cache konten, enkripsi, keamanan, dll.

Selalu disarankan untuk menonaktifkan semua modul yang saat ini tidak digunakan untuk meminimalkan kemungkinan menjadi korban serangan.

Untuk melihat semua modul yang diaktifkan, jalankan perintah

apache2ctl -M

Untuk memeriksa apakah modul tertentu diaktifkan, misalnya modul penulisan ulang, jalankan perintah.

apache2ctl -M | grep rewrite

Untuk menonaktifkan modul, jalankan perintah:

sudo a2dismod rewrite 

12. Gunakan Modul mod_security dan mod_evasive untuk Mengamankan Apache

Anda dapat mengaktifkan modul mod_security dan mod_evasive untuk mengamankan Apache dari serangan brute force atau serangan DDoS.

  • Modul mod_security bertindak seperti firewall aplikasi web (WAF) dan memblokir lalu lintas yang mencurigakan dan tidak diinginkan ke situs Anda.
  • Modul mod_evasive melindungi server Anda dari serangan brute force dan penolakan layanan (DoS).

Baca selengkapnya tentang cara melindungi Apache menggunakan modul mod_security dan mod_evasive.

13. Membatasi Layanan yang Tidak Diinginkan di Apache

Untuk lebih mengamankan Apache, pertimbangkan untuk menonaktifkan layanan tertentu seperti tautan simbolik dan eksekusi CGI jika saat ini tidak diperlukan. Secara default, Apache mengikuti symlink, kita dapat mematikan fitur ini serta fitur -Includes dan CGI dalam satu baris.

Untuk melakukannya, tambahkan baris '-ExecCGI -FollowSymLinks -Includes' untuk direktif 'Options' di bagian 'Directory'.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Hal ini juga dapat dicapai pada tingkat direktori. Misalnya, di sini, kami menonaktifkan eksekusi file Includes dan Cgi untuk direktori “/var/www/html/mydomain1”.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Simpan perubahan dan mulai ulang Apache.

14. Batasi Ukuran Upload File di Apache

Cara lain untuk mengamankan server web Anda adalah dengan membatasi ukuran total isi permintaan HTTP yang dikirim ke server web dari klien. Anda dapat mengaturnya dalam konteks server, per direktori, per file, atau per lokasi.

Misalnya, jika Anda ingin mengizinkan pengunggahan file ke direktori tertentu, ucapkan direktori /var/www/domain.com/wp-uploads, dan batasi ukuran file yang diunggah hingga 4M=4194304Bytes, tambahkan perintah berikut ke file konfigurasi Apache atau file .htaccess Anda.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Simpan perubahan dan ingatlah untuk me-restart Apache.

Anda dapat mengaturnya dalam konteks server, per direktori, per file, atau per lokasi. Arahan ini mencegah perilaku permintaan klien yang tidak normal yang terkadang dapat menjadi bentuk serangan penolakan layanan (DoS).

15. Aktifkan Masuk di Apache

Logging memberikan semua rincian tentang permintaan klien dan informasi lain yang berkaitan dengan kinerja server web Anda. Ini memberikan informasi berguna jika terjadi kesalahan. Mengaktifkan log Apache, terutama di file host virtual memungkinkan Anda menentukan masalah jika terjadi kesalahan dengan server web.

Untuk mengaktifkan logging, Anda perlu menyertakan modul mod_log_config, yang menyediakan dua arahan logging utama.

  • ErrorLog – Menentukan jalur file log kesalahan.
  • CustomLog – Membuat dan memformat file log.

Anda dapat menggunakan atribut ini dalam file host virtual di bagian host virtual untuk mengaktifkan pembuatan log.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Direktif {APACHE_LOG_DIR} di sistem Debian didefinisikan sebagai jalur /var/log/apache2.

16. Jalankan Apache sebagai Pengguna dan Grup Terpisah

Menjalankan Apache sebagai pengguna dan grup terpisah adalah praktik keamanan yang umum. Dengan melakukan hal ini, Anda dapat mengisolasi proses server web dari proses sistem lainnya dan meminimalkan potensi kerusakan jika server web disusupi.

Pertama, Anda ingin membuat pengguna dan grup baru khusus untuk Apache.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Selanjutnya, Anda perlu mengedit file konfigurasi Apache untuk menentukan pengguna dan grup baru.

User apacheuser
Group apachegroup

Karena Anda mengubah pengguna dan grup yang dijalankan Apache, Anda mungkin perlu memperbarui kepemilikan direktori web dan file untuk memastikan bahwa Apache masih dapat membacanya.

sudo chown -R apacheuser:apachegroup /var/www/html

Setelah melakukan perubahan ini, restart Apache untuk menerapkannya:

sudo systemctl restart httpd      # For RHEL/CentOS
sudo systemctl restart apache2    # For Debian/Ubuntu

17. Melindungi Serangan dan Pengerasan DDOS

Memang benar Anda tidak dapat sepenuhnya melindungi situs web Anda dari serangan DDoS. Namun, berikut beberapa pedoman yang dapat membantu Anda memitigasi dan mengelolanya.

  • TimeOut – Perintah ini memungkinkan Anda menentukan durasi server akan menunggu hingga peristiwa tertentu selesai sebelum mengembalikan kesalahan. Nilai defaultnya adalah 300 detik. Untuk situs yang rentan terhadap serangan DDoS, disarankan untuk menjaga nilai ini tetap rendah. Namun, pengaturan yang sesuai sangat bergantung pada sifat permintaan yang diterima situs web Anda. Catatan: Batas waktu yang rendah mungkin menyebabkan masalah dengan beberapa skrip CGI.
  • MaxClients – Perintah ini menetapkan batas jumlah koneksi yang dapat dilayani secara bersamaan. Koneksi baru apa pun yang melampaui batas ini akan dimasukkan dalam antrean. Ini tersedia di Prefork dan MPM Pekerja. Nilai defaultnya adalah 256.
  • KeepAliveTimeout – Perintah ini menentukan durasi server menunggu permintaan berikutnya sebelum menutup koneksi. Nilai defaultnya adalah 5 detik.
  • LimitRequestFields – Perintah ini menetapkan batas jumlah kolom header permintaan HTTP yang diterima oleh klien. Nilai defaultnya adalah 100. Jika serangan DDoS terjadi karena jumlah header permintaan HTTP yang berlebihan, disarankan untuk mengurangi nilai ini.
  • LimitRequestFieldSize – Perintah ini menetapkan batas ukuran untuk header permintaan HTTP.

18. Lakukan Pemindaian Kerentanan Secara Reguler

Cara lain untuk melindungi server web Anda adalah dengan melakukan tes pemindaian kerentanan secara berkala. Hal ini membantu mengidentifikasi potensi celah keamanan yang mungkin dimanfaatkan oleh peretas untuk mendapatkan akses ke file sensitif atau menyuntikkan malware.

Alat pemindaian kerentanan juga membantu menunjukkan pengaturan konfigurasi yang tidak aman dan membantu dalam mengaudit kepatuhan. Alat pemindaian kerentanan yang populer termasuk Acutenix, Nessus, Nexpose, Sucuri, dan banyak lagi.

Kesimpulan

Ini adalah beberapa tip pengerasan Apache yang dapat Anda terapkan di server web Anda untuk memberikan lapisan perlindungan ekstra dan mencegah intrusi.