Hardening

Tip

Install Let's Encrypt

Update Apache

Memperbarui server web dan server web lainnya adalah kunci untuk meningkatkan keamanan Apache Anda. Pembaruan ini menghadirkan patch keamanan dan perbaikan bug terbaru untuk mencegah kerentanan baru.

Tetap terinformasi tentang pembaruan dan kerentanan terbaru dengan alat seperti stack.watch. Alat-alat ini akan memberi tahu Anda tentang kerentanan Apache HTTP Server yang baru sehingga Anda dapat bertindak cepat. Memperbarui dan alat-alat semacam itu akan memperkuat server Apache Anda.

sudo apt update && sudo apt upgrade

Sembunyikan Versi dan OS Apache

Menyembunyikan versi dan OS server web Anda adalah teknik keamanan Apache yang sederhana namun efektif. Secara default, Apache menampilkan informasi sensitif seperti jenis dan versi OS server yang membantu penyerang mempersiapkan serangan tertarget.

Cegah hal ini dengan memodifikasi berkas httpd.conf Anda: atur ServerTokens ke Prod dan nonaktifkan ServerSignature. Ini akan membatasi informasi yang dibagikan dalam header respons, sehingga memperkuat keamanan header HTTP dan mencegah dokumen yang dihasilkan server menampilkan detail versi:

ServerTokens Prod
ServerSignature Off

Ini akan mengurangi paparan informasi server yang penting.

Disable Directory Listing

Daftar direktori dapat mengekspos berkas dan direktori sensitif kepada pengguna yang tidak berwenang. Nonaktifkan untuk mencegah eksploitasi.

Nonaktifkan daftar direktori dengan mengatur direktif Opsi ke -Indexes di berkas konfigurasi Apache Anda:

Options -Indexes

Ini adalah cara sederhana untuk mengurangi paparan file.

Restrict Access to Sensitive Directories

Batasi akses ke direktori sensitif untuk melindungi server Anda dari pengguna yang tidak berwenang. Kontrol akses yang tepat hanya akan mengizinkan pengguna yang berwenang untuk mengakses informasi sensitif.

Untuk menolak akses ke direktori tertentu, gunakan perintah berikut:

Require all denied

Nonaktifkan juga modul mod_autoindex secara global untuk mencegah daftar direktori di seluruh server Apache Anda. Gunakan berkas .htaccess untuk membatasi akses di tingkat direktori. Misalnya, untuk menonaktifkan daftar direktori, tambahkan ini ke berkas .htaccess Anda:

Options -Indexes

Hal ini memungkinkan Anda memiliki kontrol yang lebih rinci atas izin akses tanpa memerlukan akses root.

Use HTTPS Encryption

Keamanan SSL wajib hukumnya. SSL akan menyediakan enkripsi HTTPS, yang akan mengenkripsi transmisi data antara server dan klien Anda. Dapatkan sertifikat SSL dari Otoritas Sertifikat tepercaya, lalu instal sertifikat SSL di Apache.

Dapat menggunakan Let's Encrypt

Perbarui berkas konfigurasi SSL Anda agar mengarah ke sertifikat dan kunci SSL:

SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem

Mulai ulang Apache setelah melakukan perubahan ini. Ini akan menerapkan pengaturan baru:

sudo systemctl restart apache2

Ini akan mengenkripsi semua permintaan klien sehingga server web Anda lebih aman.

Aktifkan HTTP Strict Transport Security (HSTS)

HTTP Strict Transport Security (HSTS) akan melindungi situs web Anda dari serangan man-in-the-middle dan pembajakan cookie. HSTS akan memaksa browser untuk selalu terhubung ke server Anda menggunakan HTTPS dan mencegah penyerang menurunkan koneksi aman ke koneksi yang tidak aman.

Aktifkan HSTS dengan menambahkan ini ke konfigurasi Apache Anda:

Header always set Strict-Transport-Security “max-age=63072000; includeSubDomains”
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Tindakan ini akan menerapkan HTTPS selama jangka waktu tertentu dan menerapkan kebijakan ke semua subdomain. Pastikan situs web Anda menjalankan HTTPS dengan sertifikat yang valid sebelum mengaktifkan HSTS. Mulai ulang Apache setelah melakukan perubahan ini untuk menerapkan kebijakan baru.

Langkah-langkah

  1. Aktifkan module mod_headers

    sudo a2enmod headers
    
  2. Add the HSTS header to your HTTPS virtual host

    • Open your SSL virtual host configuration file (e.g., /etc/apache2/sites-enabled/your_domain-ssl.conf).

    • Inside the <VirtualHost *:443> block, add the following line:

    • Contoh ini menetapkan batas usia maksimum satu tahun dan mencakup semua subdomain dan daftar pramuat HSTS.

    Catatan

    Pastikan situs Anda sudah dikonfigurasi sepenuhnya untuk HTTPS sebelum menambahkan header HSTS. Arahan pramuat khususnya memiliki konsekuensi yang signifikan.

  3. Restart Apache

    sudo service apache2 restart
    
  4. Verify the HSTS header

    Use a tool like curl to check for the Strict-Transport-Security header:

    curl -s -D- https://your_domain.com/ | grep -i Strict-Transport-Security
    

Disable Unused Modules

Menonaktifkan modul Apache yang tidak digunakan akan mengurangi potensi serangan pada server Apache Anda dan mengoptimalkan penggunaan sumber daya. Audit rutin akan membantu Anda mengidentifikasi dan menonaktifkan modul yang tidak diperlukan untuk aplikasi web spesifik Anda, serta meminimalkan risiko kesalahan konfigurasi HTTP yang membuka titik akses yang tidak perlu.

Nonaktifkan modul yang tidak digunakan dengan memberi komentar pada baris LoadModule di file httpd.conf.

Secure Apache with a Web Application Firewall (WAF)

Firewall Aplikasi Web (WAF) seperti ModSecurity akan menambahkan lapisan perlindungan ekstra dengan memfilter dan memantau lalu lintas HTTP ke dan dari server web Anda. WAF ini akan melindungi Anda dari berbagai ancaman, termasuk injeksi SQL, skrip lintas situs (XSS), dan lainnya.

Untuk menggunakan ModSecurity dengan Apache, pastikan modul dimuat di berkas httpd.conf Anda:

LoadModule security2_module modules/mod_security2.so

Include /etc/modsecurity/*.conf

Berkas konfigurasi utama ModSecurity biasanya berada di /etc/modsecurity atau /etc/httpd/modsecurity.d. Anda mungkin perlu memasang paket tambahan agar ModSecurity berfungsi.

Implementasi OWASP ModSecurity Core Rule Set (CRS) untuk menambahkan keamanan dengan aturan untuk serangan aplikasi web umum. Selain itu, sesuaikan ModSecurity dengan memodifikasi atau menambahkan aturan khusus dalam berkas konfigurasinya sesuai kebutuhan Anda.

ModSecurity mencatat permintaan yang diblokir dalam log kesalahan Apache sehingga Anda dapat menggunakannya untuk audit keamanan.

Run Apache as a Non-Privileged User

Menjalankan Apache sebagai pengguna Apache tanpa hak istimewa akan melindungi layanan lain jika terjadi pelanggaran. Mengisolasi proses Apache dari proses sistem lain akan meminimalkan kerusakan jika terjadi pelanggaran.

Ubah pengaturan pengguna dan grup default untuk Apache dengan mengubah direktif Pengguna dan Grup di berkas httpd.conf Anda.

User www-data
Group www-data

Menggunakan akun pengguna khusus tanpa hak istimewa untuk Apache akan membatasi aksesnya ke sumber daya sistem.

Limit File Upload Size

Batasi ukuran unggahan berkas untuk memitigasi serangan DoS di mana muatan besar dapat menghabiskan sumber daya server. Konfigurasikan direktif LimitRequestBody untuk mengontrol ukuran unggahan berkas dan mencegah kehabisan sumber daya.

Tetapkan batas unggahan berkas dengan menambahkan ini ke konfigurasi Apache Anda:

LimitRequestBody 1048576

Ini akan membatasi unggahan berkas hingga 1MB dan mencegah kehabisan sumber daya. Perlu diingat bahwa dalam beberapa kasus, Anda mungkin perlu menetapkan batas yang lebih tinggi, tergantung kebutuhan Anda.

Adjust Timeout and KeepAlive

Sesuaikan Timeout dan KeepAlive di Apache untuk meningkatkan keamanan dan kinerja. Menurunkan Timeout akan memitigasi serangan DoS dengan membatasi waktu tunggu server untuk respons klien. Timeout default adalah 300 detik; menguranginya menjadi 60 detik akan mengurangi risiko serangan Slowloris.

Sesuaikan ini dengan memodifikasi berkas httpd.conf:

Timeout 60
KeepAlive Aktif
MaxKeepAliveRequests 100
KeepAliveTimeout 15

Ini akan mengoptimalkan penggunaan sumber daya dan meningkatkan kinerja server dengan memungkinkan peramban meminta beberapa berkas tanpa perlu membuat ulang koneksi setiap kali.

Disable CGI

CGI di Apache merupakan risiko keamanan yang besar, server dapat rentan terhadap skrip berbahaya. Menonaktifkan CGI akan mengurangi risiko dan membuat lingkungan lebih aman.

Nonaktifkan CGI dengan menggunakan direktif Options dalam konfigurasi Apache. Hapus opsi ExecCGI dari direktif Options untuk setiap situs web yang dihosting di server:

Options -ExecCGI

Ini akan mencegah kerentanan keamanan mengeksekusi skrip CGI.

IP Address Restrictions

Terapkan pembatasan alamat IP di Apache untuk mengontrol akses dengan menentukan alamat host yang diizinkan atau ditolak. Modul mod_authz_host memungkinkan Anda membatasi akses berdasarkan alamat host pengunjung.

Untuk membatasi akses, gunakan direktif Require dalam konfigurasi Apache. Misalnya, untuk mengizinkan alamat IP tertentu, tambahkan:

Require ip 192.168.1.100 192.168.1.101

#Untuk memblokir alamat IP tertentu, gunakan:
Require not ip 192.168.1.200

Ini akan memungkinkan Anda membuat kebijakan akses yang kompleks dan meningkatkan keamanan Apache Anda.

Logging for Monitoring

Log masuk di Apache penting untuk memantau permintaan klien dan kinerja server web. Ini akan memberi Anda informasi detail tentang aktivitas server dan membantu Anda mengidentifikasi potensi masalah keamanan Apache.

Aktifkan log dengan menyertakan modul mod_log_config dalam konfigurasi Anda dan gunakan direktif TransferLog untuk membuat berkas log:

LogFormat “%h %l %u %t \”%r\” %>s %b” common CustomLog “/var/log/apache2/access_log” common

Hal penting yang perlu dicatat dalam log akses Apache adalah waktu untuk melayani permintaan dan ID SESI. Log kondisional dan forensik akan semakin meningkatkan pemantauan keamanan Apache Anda.

Anti-Clickjacking with X-Frame-Options HTTP header

Clickjacking menipu pengguna agar mengklik sesuatu yang berbeda dari yang mereka lihat, yang berpotensi menyebabkan tindakan yang tidak diinginkan. Header HTTP X-Frame-Options akan mencegah clickjacking dengan mengontrol apakah peramban dapat menampilkan halaman dalam bingkai atau iframe.

Lindungi dari clickjacking dengan mengatur header X-Frame-Options melalui header HTTP:

Header always set X-Frame-Options “DENY”

Atau gunakan SAMEORIGIN untuk mengizinkan halaman ditampilkan hanya jika permintaan berasal dari situs yang sama:

Header always set X-Frame-Options “SAMEORIGIN”

Ini akan melindungi dari serangan clickjacking.

Meskipun X-Frame-Options efektif, praktik keamanan web modern merekomendasikan penggunaan header Content-Security-Policy (CSP) dengan direktif frame-ancestors untuk kontrol framing yang lebih komprehensif. Contoh:

Header always set Content-Security-Policy "frame-ancestors 'self';"

Ini mencapai efek yang serupa dengan X-Frame-Options: SAMEORIGIN tetapi menawarkan fleksibilitas dan fitur keamanan yang lebih besar.

Untuk mengatur header X-Content-Type-Options di Apache, yang membantu mencegah serangan pengendus tipe MIME dengan memberi tahu browser untuk secara ketat mengikuti header Content-Type, ikuti langkah-langkah berikut: Aktifkan modul header.

Header always set X-Content-Type-Options "nosniff"

Cookies with HttpOnly and Secure flags

Penggunaan flag HttpOnly dan Secure pada cookie akan mengurangi risiko serangan cross-site scripting (XSS). Flag ini akan membuat cookie hanya dapat diakses melalui HTTP, bukan JavaScript, dan hanya dikirim melalui HTTPS yang aman.

Untuk mengatur flag ini, konfigurasikan aplikasi Anda agar menggunakan header Set-Cookie dengan atribut HttpOnly dan Secure:

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

Ini akan melindungi sesi aplikasi web dan cookie dari pencurian dan manipulasi.

Vulnerability Scanning

Pemindaian kerentanan penting untuk menjaga integritas data dan memastikan data situs web aman dari pelanggaran. Di ProtocolGuard, kami menyediakan pemindai gratis yang akan membantu Anda mengidentifikasi potensi celah keamanan Apache dan konfigurasi yang tidak aman, serta memperbaikinya secepatnya. Dibandingkan dengan server web IIS, Apache memiliki lebih sedikit kerentanan, tetapi tetap penting untuk segera menambal setiap masalah yang teridentifikasi.

  1. Akses pemindai web security scanner.

2. Ketik domain Anda dan centang dua kotak di bawah ini. 2. Tekan tombol Pindai dan tunggu beberapa detik hingga pemindaian selesai.

../_images/http-security-headers-configuration-screenshot.webp

Fail2ban for Intrusion Prevention

Fail2ban adalah alat pencegahan intrusi yang akan melindungi server Apache Anda dari ancaman eksternal dengan memantau log upaya login yang gagal dan memblokir IP yang bermasalah. Ini akan mencegah serangan brute force dan aktivitas berbahaya lainnya.

Untuk mengonfigurasi Fail2ban, pastikan alat ini memantau berkas log Apache dan menetapkan aturan:

[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/*error.log
maxretry = 3

Ini akan mengamankan server Apache Anda dengan secara otomatis memblokir IP yang berulang kali gagal login.

Apache Chroot

Chrooting Apache akan menambahkan lapisan keamanan ekstra dengan menjalankan server di lingkungan yang terisolasi, membatasi akses ke seluruh sistem. Ini akan mencegah pelanggaran keamanan di satu layanan memengaruhi layanan lain di server.

Untuk mengatur Chroot, ikuti dokumentasinya untuk pertimbangan penting dan konfigurasikan direktif berikut:

SecChrootDir /path/to/chroot

Chrooting bisa rumit karena dependensi pustaka, tetapi sepadan jika dilakukan dengan benar. Menggunakan alat tambahan seperti SELinux akan memberikan isolasi yang lebih baik.

Untuk mencegah file .htaccess menimpa pengaturan keamanan, tambahkan ini ke berkas konfigurasi server Anda:

AllowOverride None

Untuk menolak akses ke file sensitif seperti .htpasswd, gunakan:

Require all denied

Pengaturan ini melindungi bagian sensitif dari server Anda.

Advanced Security Measures

Selain langkah-langkah keamanan dasar Apache yang telah dibahas sebelumnya, beberapa langkah keamanan lanjutan dapat diterapkan untuk lebih mengamankan server web Apache. Langkah-langkah ini memberikan lapisan perlindungan ekstra dan membantu memitigasi serangan yang lebih canggih.

Batasi konsumsi sumber daya server selama serangan Denial of Service (DoS)

Hal ini dapat dilakukan dengan mengonfigurasi direktif seperti RequestReadTimeout, TimeOut, dan KeepAliveTimeout. Misalnya:

RequestReadTimeout header=20-40,MinRate=500 body=20-60,MinRate=500
TimeOut 30
KeepAliveTimeout 5

Pengaturan ini mengurangi waktu yang dihabiskan untuk menunggu permintaan klien selama serangan DoS.

Contoh config .htaccess

# Force HTTPS (if not already)
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Strict Transport Security
<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

    # ✅ Fixed CSP (allows images and styles)
    Header always set Content-Security-Policy " \
    upgrade-insecure-requests; \
    default-src 'none'; \
    script-src 'self'; \
    style-src 'self' data: https: ; \
    img-src 'self' data: https: ; \
    font-src 'self' https://fontawesome.com/; \
    object-src 'none'; \
    base-uri 'self'; \
    frame-ancestors 'self'; \
    form-action 'none'; \
    "

    # X-Frame-Options
    Header always set X-Frame-Options "SAMEORIGIN"

    # X-Content-Type-Options
    Header always set X-Content-Type-Options "nosniff"

    # Referrer-Policy
    Header always set Referrer-Policy "no-referrer, strict-origin-when-cross-origin"

    # Permissions-Policy
    Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
</IfModule>

Referensi