Okay, kalau anda dah sampai bab ni, maknanya anda dah buat asas keselamatan dari bab sebelumnya. Bagus! Sekarang kita nak naik level satu tahap lagi.
Bab ni akan cover hardening yang lebih mendalam, audit keselamatan, SSL dalaman, dan yang paling penting — apa nak buat kalau homelab anda benar-benar kena hack. Saya harap anda tak perlukan bahagian incident response tu, tapi lebih baik sedia payung sebelum hujan.
Apa yang anda akan belajar:
Nota Beginner: Hardening yang terlalu agresif boleh menyebabkan anda lock diri sendiri. Dalam homelab, keselamatan perlu seimbang dengan kebolehselenggaraan. Jangan sampai server anda “terlalu selamat” sehingga anda sendiri tak boleh masuk!
SSH adalah sasaran utama penyerang. Saya pernah tengok log server yang baru online 5 minit — dah ada ratusan percubaan brute force. Jadi, pastikan SSH anda dikonfigurasikan dengan selamat:
# /etc/ssh/sshd_config - Konfigurasi disyorkan # Lumpuhkan log masuk root PermitRootLogin no # Hanya benarkan pengesahan kunci PasswordAuthentication no PubkeyAuthentication yes # Tukar port SSH (keselamatan melalui kekaburan) Port 2222 # Hadkan pengguna yang boleh log masuk AllowUsers admin # Tetapkan masa tamat ClientAliveInterval 300 ClientAliveCountMax 2 # Lumpuhkan pemajuan X11 X11Forwarding no # Lumpuhkan pemajuan TCP (melainkan perlu) AllowTcpForwarding no # Gunakan protokol 2 sahaja Protocol 2 # Hadkan percubaan pengesahan MaxAuthTries 3 # Lumpuhkan kata laluan kosong PermitEmptyPasswords no
# Mulakan semula SSH sudo systemctl restart sshd # PENTING: Pastikan anda mempunyai akses konsol (IPMI/KVM) # sebelum menukar konfigurasi SSH, sekiranya anda terkunci!
Nota Beginner: Sebelum restart SSH, buka satu terminal lain dan pastikan anda boleh SSH dengan setting baru. Jangan tutup terminal lama dulu! Kalau setting baru ada masalah, anda masih ada terminal lama yang connected.
UFW (Uncomplicated Firewall) memang betul-betul uncomplicated. Tapi jangan pandang rendah — ia sangat berkesan:
# Tetapan lalai sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw default deny routed # Benarkan perkhidmatan tertentu sahaja sudo ufw allow from 10.0.0.0/24 to any port 22 # SSH dari LAN sahaja sudo ufw allow from 10.0.0.0/24 to any port 8006 # Proxmox dari LAN sahaja sudo ufw allow 80/tcp # HTTP (untuk Let's Encrypt) sudo ufw allow 443/tcp # HTTPS # Hadkan kadar (rate limiting) untuk SSH sudo ufw limit ssh # Aktifkan logging sudo ufw logging on # Aktifkan firewall sudo ufw enable # Semak status sudo ufw status verbose
AppArmor (Ubuntu/Debian) — biasanya dah aktif secara default:
# Periksa status AppArmor sudo apparmor_status # Senarai profil sudo aa-status # AppArmor biasanya sudah aktif pada Ubuntu # Ia mengehadkan keupayaan aplikasi individu
Pengerasan Kernel — Tambahan yang saya cadangkan:
Ini setting sysctl yang boleh kuatkan keselamatan di peringkat kernel. Copy paste je, tapi pastikan anda faham setiap baris:
# /etc/sysctl.conf - Pengerasan kernel # Cegah serangan spoofing IP net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Abaikan permintaan ICMP broadcast net.ipv4.icmp_echo_ignore_broadcasts = 1 # Lumpuhkan pemajuan IP (melainkan sebagai router) net.ipv4.ip_forward = 0 # Cegah serangan SYN flood net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 2048 # Log paket martian (paket dengan alamat sumber yang tak masuk akal) net.ipv4.conf.all.log_martians = 1 # Lumpuhkan redirect ICMP net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 # Aplikasikan tetapan sudo sysctl -p
Nota Beginner: Kalau anda guna server sebagai router atau VPN gateway, JANGAN lumpuhkan ip_forward. Anda perlukan ia untuk routing. Setting ni hanya untuk server biasa.
ip_forward
Jangan sesekali guna root untuk kerja harian. Cipta pengguna admin yang berasingan:
# Cipta pengguna bukan root untuk pengurusan sudo adduser admin sudo usermod -aG sudo admin # Tetapkan dasar kata laluan sudo apt install libpam-pwquality -y # /etc/security/pwquality.conf minlen = 12 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1
Anda dah buat semua hardening tadi, tapi macam mana nak tahu kalau cukup? Lynis akan scan sistem anda dan bagi skor:
# Pasang Lynis sudo apt install lynis -y # Jalankan audit penuh sudo lynis audit system # Contoh output: # Hardening index : 72 [############## ] # Tests performed : 256 # Warnings : 3 # Suggestions : 15
Saya cadangkan sasarkan skor 70+ untuk permulaan. Jangan obsess nak dapat 100 — tu memang tak realistik untuk homelab.
Kategori yang diperiksa oleh Lynis: - Konfigurasi kernel - Pengurusan pengguna dan kumpulan - Sistem fail dan kebenaran - Perkhidmatan rangkaian - Konfigurasi firewall - Kemas kini perisian - Konfigurasi SSH - Dan banyak lagi
OpenVAS (kini Greenbone) mengimbas rangkaian anda untuk kerentanan yang diketahui. Macam “pen test” automatik untuk homelab anda:
services: openvas: image: greenbone/openvas-scanner:latest container_name: openvas ports: - "9392:9392" volumes: - openvas-data:/var/lib/openvas restart: unless-stopped volumes: openvas-data:
Nota Beginner: Jalankan imbasan kerentanan hanya pada rangkaian yang anda miliki. Mengimbas rangkaian tanpa kebenaran adalah menyalahi undang-undang. Dalam homelab, scan rangkaian sendiri je.
Ini jenis-jenis sijil yang anda perlu tahu:
Jenis Sijil: 1. Self-signed — Percuma, amaran pelayar, untuk dalaman sahaja 2. Let's Encrypt — Percuma, dipercayai, perlu domain awam 3. Wildcard — Satu sijil untuk *.domain.com 4. CA peribadi — Untuk rangkaian dalaman tanpa amaran
Untuk perkhidmatan dalaman yang tidak mempunyai domain awam, anda boleh jadi “CA” sendiri. Semua peranti yang install sijil CA anda akan trust sijil-sijil yang anda keluarkan:
# Cipta CA (Certificate Authority) peribadi mkdir -p ~/ssl && cd ~/ssl # Cipta kunci peribadi CA openssl genrsa -out ca-key.pem 4096 # Cipta sijil CA openssl req -new -x509 -sha256 -key ca-key.pem \ -out ca-cert.pem -days 3650 \ -subj "/CN=Homelab CA/O=Homelab/C=MY" # Cipta sijil untuk perkhidmatan openssl genrsa -out server-key.pem 2048 openssl req -new -key server-key.pem \ -out server.csr \ -subj "/CN=*.lab.local/O=Homelab/C=MY" # Tanda sijil dengan CA openssl x509 -req -sha256 \ -in server.csr \ -CA ca-cert.pem -CAkey ca-key.pem \ -CAcreateserial -out server-cert.pem \ -days 365 \ -extfile <(printf "subjectAltName=DNS:*.lab.local,DNS:lab.local")
Pasang sijil CA pada peranti supaya tak ada amaran “Not Secure”: - Windows: Import ca-cert.pem ke Trusted Root CAs - macOS: Import ke Keychain → System → Always Trust - Linux: Salin ke /usr/local/share/ca-certificates/ → update-ca-certificates - Android/iOS: Import melalui tetapan keselamatan
ca-cert.pem
/usr/local/share/ca-certificates/
update-ca-certificates
Nota Beginner: Proses ni nampak complicated, tapi anda hanya perlu buat sekali. Selepas tu, semua service dalaman anda boleh guna HTTPS tanpa amaran pelayar.
Backup pun kena protect. Bayangkan kalau seseorang dapat akses ke backup drive anda — semua data anda terdedah. Restic menyulitkan backup secara lalai, jadi anda dah selamat:
# Restic menyulitkan backup secara lalai # Pastikan kata laluan repositori disimpan dengan selamat export RESTIC_REPOSITORY="/mnt/backup/encrypted" export RESTIC_PASSWORD="kata_laluan_sangat_panjang_dan_rawak" # Cipta repositori restic init # Backup restic backup /data/penting # Sahkan integriti backup restic check
Ini skrip yang saya guna untuk backup semua config keselamatan. Kalau perlu rebuild server, semua setting dah ada:
#!/bin/bash # backup-security-configs.sh BACKUP_DIR="/mnt/backup/security" DATE=$(date +%Y%m%d) mkdir -p "$BACKUP_DIR/$DATE" # Backup konfigurasi penting cp /etc/ssh/sshd_config "$BACKUP_DIR/$DATE/" cp /etc/fail2ban/jail.local "$BACKUP_DIR/$DATE/" cp -r /etc/ufw "$BACKUP_DIR/$DATE/" cp /etc/sysctl.conf "$BACKUP_DIR/$DATE/" # Senarai pengguna dan kumpulan getent passwd > "$BACKUP_DIR/$DATE/passwd.bak" getent group > "$BACKUP_DIR/$DATE/group.bak" # Peraturan firewall iptables-save > "$BACKUP_DIR/$DATE/iptables.rules" echo "Backup keselamatan selesai: $DATE"
Saya harap anda tak perlukan bahagian ni. Tapi kalau anda mengesyaki homelab anda telah dikompromi, ikut langkah-langkah ini. Jangan panik — panik buat keputusan jadi lebih teruk.
Langkah 1: Jangan Panik, Dokumentasikan - Tulis apa yang anda perhatikan - Catat masa dan tarikh - Screenshot kalau boleh
Langkah 2: Asingkan — Potong Akses Internet
# Putuskan sambungan dari internet (di firewall) # JANGAN padamkan kuasa — bukti dalam RAM akan hilang
Langkah 3: Nilai Kerosakan
# Periksa pengguna yang log masuk who last lastlog # Periksa proses mencurigakan ps auxf netstat -tunapl # Periksa fail yang baru diubah suai find / -mtime -1 -type f 2>/dev/null # Periksa crontab untuk semua pengguna for user in $(cut -f1 -d: /etc/passwd); do crontab -l -u "$user" 2>/dev/null done # Periksa kunci SSH yang tidak dikenali cat ~/.ssh/authorized_keys
Langkah 4: Bersihkan dan Pulihkan - Pulihkan dari backup yang bersih (sebab tu backup penting!) - Tukar SEMUA kata laluan — semua, tanpa pengecualian - Kemas kini semua perisian - Semak dan perketatkan peraturan firewall
Langkah 5: Belajar dari Insiden - Kenal pasti bagaimana pencerobohan berlaku - Perkuatkan kawalan keselamatan di bahagian yang lemah - Dokumentasikan insiden dan penyelesaian — supaya tak berulang
Nota Beginner: Kalau anda rasa homelab anda kena hack, perkara pertama yang perlu dibuat ialah cabut kabel internet dari router. Ini halang penyerang daripada terus akses dan halang data daripada terus bocor.
Ini skrip yang anda boleh jalankan setiap hari secara automatik. Ia akan check beberapa perkara penting dan hantar laporan:
#!/bin/bash # daily-security-check.sh # Jalankan melalui cron setiap hari REPORT="" # Periksa kemas kini keselamatan UPDATES=$(apt list --upgradable 2>/dev/null | grep -c security) REPORT+="Kemas kini keselamatan tertunda: $UPDATES\n" # Periksa log masuk gagal FAILED=$(grep "Failed password" /var/log/auth.log | wc -l) REPORT+="Percubaan log masuk gagal: $FAILED\n" # Periksa penggunaan cakera DISK=$(df / | awk 'NR==2 {print $5}') REPORT+="Penggunaan cakera /: $DISK\n" # Periksa perkhidmatan Docker DOWN=$(docker ps --filter "status=exited" --format "{{.Names}}" | tr '\n' ', ') REPORT+="Kontena tidak aktif: ${DOWN:-Tiada}\n" # Periksa sijil SSL EXPIRY=$(echo | openssl s_client -connect localhost:443 2>/dev/null | \ openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2) REPORT+="Sijil SSL tamat: $EXPIRY\n" # Hantar laporan echo -e "$REPORT" | curl -d @- http://ntfy.lab.local/security-report
Ramai orang lupa bab ni. Apa guna hardening SSH kalau seseorang boleh cabut hard disk anda dan bawa balik rumah?
1. Lokasi selamat - Bilik berkunci jika boleh - Jauh dari kawasan lalu lintas tinggi 2. BIOS/UEFI - Tetapkan kata laluan BIOS - Lumpuhkan boot dari USB/CD 3. Penyulitan cakera penuh - LUKS untuk Linux - BitLocker untuk Windows - Melindungi data jika perkakasan dicuri 4. Label dan inventori - Senarai semua perkakasan - Nombor siri dicatat - Foto setup untuk dokumentasi
Nota Beginner: Kalau homelab anda di bilik tidur, keselamatan fizikal mungkin bukan isu besar. Tapi kalau anda simpan data sensitif, sekurang-kurangnya pastikan cakera dienkripsi dengan LUKS.
Bab keselamatan lanjutan ni memang berat sikit, tapi anda dah sampai penghujung. Tahniah! Jom recap:
Keselamatan adalah perjalanan, bukan destinasi. Tak ada satu hari pun anda boleh kata “dah selamat 100%.” Tapi dengan asas yang kukuh dan pemantauan yang konsisten, homelab anda akan jauh lebih selamat daripada kebanyakan setup di luar sana.
Seterusnya, kita akan masuk ke automasi dan pemantauan — bab yang akan buat hidup anda jauh lebih senang!