Membuat Virtualhost Pada Apache (studi kasus)

Membuat virtual host pada Apache di Debian 12 untuk dua domain, yaitu mediatkj.web.id dan tkj.my.id, keduanya mengarah ke IP 192.168.10.10.

Langkah 1: Instalasi Apache

Jika Apache belum terinstal di server Debian 12 Anda, jalankan perintah berikut:

apt update
apt install apache2

Langkah 2: Membuat Direktori untuk Masing-Masing Website

Setiap virtual host memerlukan direktori sendiri untuk menyimpan file website. Kita akan membuat direktori untuk kedua domain di bawah /var/www/.

mkdir -p /var/www/mediatkj.web.id/public_html
mkdir -p /var/www/tkj.my.id/public_html

Selanjutnya, ubah kepemilikan direktori agar Apache (pengguna www-data) dapat mengaksesnya.

chown -R www-data:www-data /var/www/mediatkj.web.id
chown -R www-data:www-data /var/www/tkj.my.id

Langkah 3: Membuat Halaman Indeks Sederhana

Untuk menguji apakah virtual host berfungsi, buat file index.html sederhana di masing-masing direktori.

Untuk mediatkj.web.id:

nano /var/www/mediatkj.web.id/public_html/index.html

Isi file dengan kode berikut:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>mediatkj.web.id</title>
</head>
<body>
    <h1>Selamat datang di mediatkj.web.id!</h1>
</body>
</html>

Untuk tkj.my.id:

nano /var/www/tkj.my.id/public_html/index.html

Isi file dengan kode berikut:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>tkj.my.id</title>
</head>
<body>
    <h1>Selamat datang di tkj.my.id!</h1>
</body>
</html>

Langkah 4: Membuat File Virtual Host

Apache menggunakan file konfigurasi terpisah untuk setiap virtual host. File-file ini disimpan di /etc/apache2/sites-available/.

Konfigurasi untuk mediatkj.web.id

Buat file baru:

nano /etc/apache2/sites-available/mediatkj.web.id.conf

Tambahkan konfigurasi berikut ke dalam file:

<VirtualHost 192.168.10.10:80>
    ServerAdmin webmaster@mediatkj.web.id
    ServerName mediatkj.web.id
    ServerAlias www.mediatkj.web.id
    DocumentRoot /var/www/mediatkj.web.id/public_html

    ErrorLog ${APACHE_LOG_DIR}/mediatkj_error.log
    CustomLog ${APACHE_LOG_DIR}/mediatkj_access.log combined
</VirtualHost>

Konfigurasi untuk tkj.my.id

Buat file baru:

nano /etc/apache2/sites-available/tkj.my.id.conf

Tambahkan konfigurasi berikut ke dalam file:

<VirtualHost 192.168.10.10:80>
    ServerAdmin webmaster@tkj.my.id
    ServerName tkj.my.id
    ServerAlias www.tkj.my.id
    DocumentRoot /var/www/tkj.my.id/public_html

    ErrorLog ${APACHE_LOG_DIR}/tkj_error.log
    CustomLog ${APACHE_LOG_DIR}/tkj_access.log combined
</VirtualHost>

Langkah 5: Mengaktifkan Virtual Host

Setelah file konfigurasi dibuat, Anda harus mengaktifkannya dengan perintah a2ensite, lalu me-restart Apache.

a2ensite mediatkj.web.id.conf
a2ensite tkj.my.id.conf

Sekarang, nonaktifkan konfigurasi default Apache untuk menghindari konflik:

a2dissite 000-default.conf

Terakhir, restart Apache untuk menerapkan semua perubahan:

systemctl restart apache2

Langkah 6: Konfigurasi DNS (File /etc/hosts)

Untuk menguji virtual host dari komputer lokal Anda (bukan dari server itu sendiri), Anda perlu mengarahkan domain ke IP server. Karena ini adalah IP lokal (192.168.10.10), kita akan mengedit file /etc/hosts di komputer Anda (misalnya Windows, Linux, atau macOS).

Tambahkan baris berikut ke file /etc/hosts di komputer Anda:

192.168.10.10   mediatkj.web.id www.mediatkj.web.id
192.168.10.10   tkj.my.id www.tkj.my.id

Sekarang, buka browser dan ketik mediatkj.web.id atau tkj.my.id. Seharusnya Anda akan melihat halaman indeks yang berbeda untuk masing-masing domain, membuktikan bahwa virtual host Anda telah berhasil dikonfigurasi.

 

Konfigurasi File DNS

Langkah-langkah konfigurasi DNS server di Debian 12 menggunakan BIND9 untuk domain mediatkj.web.id dan tkj.my.id dengan alamat IP 192.168.10.10.

Langkah 1: Instalasi BIND9

Pertama, instal paket BIND9. BIND (Berkeley Internet Name Domain) adalah perangkat lunak DNS yang paling umum digunakan di Linux.

apt update
apt install bind9 bind9utils dnsutils

Langkah 2: Konfigurasi File Utama BIND9

File konfigurasi utama BIND9 adalah /etc/bind/named.conf.local. Kita akan menambahkan zona untuk kedua domain di sini.

nano /etc/bind/named.conf.local

Tambahkan baris-baris berikut di akhir file:

// Zona untuk mediatkj.web.id
zone "mediatkj.web.id" {
    type master;
    file "/etc/bind/db.mediatkj.web.id";
};

// Zona untuk tkj.my.id
zone "tkj.my.id" {
    type master;
    file "/etc/bind/db.tkj.my.id";
};

// Zona untuk reverse lookup
zone "10.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192";
};
  • db.mediatkj.web.id dan db.tkj.my.id adalah file-file yang akan berisi catatan DNS (A, CNAME, dll.) untuk masing-masing domain.
  • db.192 adalah file untuk reverse lookup (mencari nama domain dari alamat IP).

Langkah 3: Membuat File Zona (db.mediatkj.web.id)

Sekarang, buat file zona untuk mediatkj.web.id. Anda bisa menyalin file template bawaan BIND9 sebagai dasar.

cp /etc/bind/db.local /etc/bind/db.mediatkj.web.id
nano /etc/bind/db.mediatkj.web.id

Edit file tersebut agar sesuai dengan domain Anda:

$TTL    604800
@       IN      SOA     ns1.mediatkj.web.id. root.mediatkj.web.id. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.mediatkj.web.id.
@       IN      A       192.168.10.10
ns1     IN      A       192.168.10.10
www     IN      A       192.168.10.10
  • @ IN SOA ns1.mediatkj.web.id. root.mediatkj.web.id.: Menentukan name server utama dan alamat email admin.
  • @ IN NS ns1.mediatkj.web.id.: Menentukan name server untuk zona ini.
  • @ IN A 192.168.10.10: Mengarahkan domain utama mediatkj.web.id ke IP 192.168.10.10.
  • ns1 IN A 192.168.10.10: Mencatat alamat IP untuk name server.
  • www IN A 192.168.10.10: Mengarahkan subdomain www ke IP yang sama.

Langkah 4: Membuat File Zona (db.tkj.my.id)

Ulangi proses yang sama untuk domain tkj.my.id.

cp /etc/bind/db.local /etc/bind/db.tkj.my.id
nano /etc/bind/db.tkj.my.id

Isi file tersebut dengan konfigurasi berikut:

$TTL    604800
@       IN      SOA     ns1.tkj.my.id. root.tkj.my.id. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.tkj.my.id.
@       IN      A       192.168.10.10
ns1     IN      A       192.168.10.10
www     IN      A       192.168.10.10

Langkah 5: Membuat File Zona untuk Reverse Lookup (db.192)

File ini penting untuk reverse lookup, di mana server bisa mencocokkan IP kembali ke nama domain.

cp /etc/bind/db.127 /etc/bind/db.192
nano /etc/bind/db.192

Edit file tersebut:

$TTL    604800
@       IN      SOA     ns1.mediatkj.web.id. root.mediatkj.web.id. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.mediatkj.web.id.
@       IN      NS      ns1.tkj.my.id.
10      IN      PTR     mediatkj.web.id.
10      IN      PTR     tkj.my.id.
  • @ IN NS ns1.tkj.my.id.: Tambahkan name server kedua domain.
  • 10 IN PTR mediatkj.web.id.: Angka 10 adalah bagian terakhir dari IP 192.168.10.10. Ini mengarahkan IP tersebut ke nama domain.

 

Langkah 6: Validasi dan Restart BIND9

Setelah semua file dibuat, validasi konfigurasi Anda untuk memastikan tidak ada kesalahan sintaksis:

named-checkconf
named-checkzone mediatkj.web.id /etc/bind/db.mediatkj.web.id
named-checkzone tkj.my.id /etc/bind/db.tkj.my.id
named-checkzone 10.168.192.in-addr.arpa /etc/bind/db.192

Jika tidak ada pesan kesalahan, restart layanan BIND9 untuk menerapkan perubahan:

systemctl restart bind9

Langkah 7: Mengatur Resolver DNS Klien

Terakhir, agar komputer klien di jaringan Anda menggunakan DNS server ini, Anda perlu mengarahkan nameserver mereka ke IP 192.168.10.10.

Pada komputer klien, edit file /etc/resolv.conf (untuk Linux) atau konfigurasi DNS di pengaturan jaringan.

# File /etc/resolv.conf
nameserver 192.168.10.10
nameserver 8.8.8.8 # Tambahkan DNS publik sebagai cadangan

Sekarang, Anda bisa menguji konfigurasi DNS dengan perintah dig atau nslookup.

dig mediatkj.web.id
dig tkj.my.id
dig -x 192.168.10.10

Hasilnya akan menunjukkan bahwa domain-domain tersebut berhasil diterjemahkan ke IP 192.168.10.10.

 

FTP Server

Konfigurasi FTP server di Debian 12 menggunakan ProFTPD untuk domain mediatkj.web.id (pengguna dania) dan tkj.my.id (pengguna danang), di mana setiap pengguna hanya dapat mengakses direktori utama mereka sendiri.

Kita akan menggunakan ProFTPD karena fleksibilitasnya dalam mengkonfigurasi akses per pengguna dan direktori.

Langkah 1: Instalasi ProFTPD

Jika ProFTPD belum terinstal, jalankan perintah berikut:

apt update
apt install proftpd-basic

Saat instalasi, pilih mode standalone ketika diminta. Layanan akan otomatis berjalan setelah instalasi selesai.


Langkah 2: Membuat Pengguna dan Direktori FTP

Kita perlu membuat dua pengguna Linux, dania dan danang, yang akan digunakan khusus untuk login FTP. Kita akan mengatur shell mereka ke /usr/sbin/nologin agar mereka tidak bisa login langsung ke terminal server, meningkatkan keamanan.

  1. Buat pengguna dania:
    useradd -m -s /usr/sbin/nologin dania
    passwd dania
    

    Ikuti petunjuk untuk membuat kata sandi. Direktori home dania akan otomatis dibuat di /home/dania.

  2. Buat pengguna danang:
    useradd -m -s /usr/sbin/nologin danang
    passwd danang
    

    Ikuti petunjuk untuk membuat kata sandi. Direktori home danang akan otomatis dibuat di /home/danang.


Langkah 3: Konfigurasi ProFTPD

File konfigurasi utama ProFTPD adalah /etc/proftpd/proftpd.conf. Kita akan mengedit file ini untuk menerapkan aturan yang spesifik untuk dania dan danang.

  1. Buat cadangan file konfigurasi:
    cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak
    
  2. Edit file konfigurasi:
    nano /etc/proftpd/proftpd.conf
    

    Cari dan pastikan baris-baris berikut sudah sesuai:

    • Mengunci pengguna di direktori home mereka: Pastikan baris ini ada untuk membatasi akses pengguna.
      DefaultRoot ~
      
    • Menonaktifkan login root: Untuk keamanan, pastikan root tidak bisa login melalui FTP.
      RootLogin off
      
  3. Tambahkan blok konfigurasi untuk setiap pengguna:Di bagian akhir file, tambahkan blok <Directory> untuk membatasi akses lebih lanjut. Ini memastikan setiap pengguna hanya bisa mengakses direktori yang ditentukan.
    # Konfigurasi untuk user dania (mediatkj.web.id)
    <Directory /home/dania>
        User dania
        Group dania
        AllowOverwrite on
        <Limit CWD PWD MKD RMD RNFR RNTO DELE STOR>
            AllowUser dania
            DenyAll
        </Limit>
    </Directory>
    
    # Konfigurasi untuk user danang (tkj.my.id)
    <Directory /home/danang>
        User danang
        Group danang
        AllowOverwrite on
        <Limit CWD PWD MKD RMD RNFR RNTO DELE STOR>
            AllowUser danang
            DenyAll
        </Limit>
    </Directory>
    
    • DefaultRoot ~: Mengunci pengguna di direktori home mereka.
    • AllowUser: Mengizinkan akses hanya untuk pengguna yang ditentukan di direktori tersebut.
    • AllowOverwrite on: Mengizinkan pengguna untuk menimpa file yang sudah ada.
  4. Simpan dan keluar dari editor (Ctrl+X, lalu Y, lalu Enter).

Langkah 4: Menerapkan Perubahan dan Pengujian

Setelah semua konfigurasi selesai, restart layanan ProFTPD agar perubahan diterapkan:

systemctl restart proftpd

Sekarang Anda bisa menguji koneksi FTP dari klien (seperti FileZilla, WinSCP, atau perintah ftp) dengan detail berikut:

  • Host: 192.168.10.10
  • User dania:
    • Username: dania
    • Password: [kata sandi dania]
  • User danang:
    • Username: danang
    • Password: [kata sandi danang]

Ketika dania login, ia hanya akan melihat direktori /home/dania dan tidak bisa keluar dari direktori tersebut. Hal yang sama juga berlaku untuk pengguna danang, yang hanya akan melihat /home/danang.

Tips Keamanan Tambahan:

  • Sangat disarankan untuk menggunakan SFTP (SSH File Transfer Protocol) yang sudah terenkripsi dan jauh lebih aman daripada FTP. Cukup dengan menginstal dan mengkonfigurasi SSH, pengguna bisa langsung login dengan kredensial yang sama tanpa konfigurasi FTP tambahan.
  • Jika Anda menggunakan firewall (seperti UFW), pastikan Anda mengizinkan lalu lintas pada port 21 untuk FTP.