DevOps & Cloud

Linux Server Administration

Tutorial lengkap mengelola Linux server — SSH, user management, systemd, cron jobs, disk management, networking, dan security hardening dengan contoh perintah praktis

1. Pengenalan Linux Server

Linux adalah sistem operasi open-source yang mendominasi dunia server, cloud computing, dan infrastruktur IT global. Lebih dari 96% server cloud, 90% supercomputer, dan sebagian besar website di dunia berjalan di atas Linux. Memahami administrasi Linux server adalah skill fundamental yang wajib dikuasai oleh setiap profesional IT.

Linux server berbeda dari desktop — tidak ada GUI (Graphical User Interface) yang berjalan secara default. Semua konfigurasi dan operasi dilakukan melalui command line interface (CLI) menggunakan terminal. Ini membuatnya sangat efisien dalam penggunaan resource dan memungkinkan administrasi jarak jauh dengan mudah.

Distribusi Linux untuk Server

Distribusi Package Manager Best For LTS
Ubuntu ServeraptPemula, general purpose, cloud5 tahun
DebianaptStabilitas, production server5 tahun
CentOS/Rocky Linuxdnf/yumEnterprise, RHEL compatible10 tahun
Alpine LinuxapkContainer, minimal footprint2 tahun
Amazon Linuxdnf/yumAWS EC2 instances3 tahun

Struktur Direktori Linux

Diagram: Filesystem Hierarchy Standard (FHS)
┌──────────────────────────────────────────────────────────────┐
│                   LINUX FILESYSTEM TREE                       │
│                                                              │
│  / (root)                                                    │
│  ├── /bin/         → Binary/executable dasar (ls, cp, mv)   │
│  ├── /sbin/        → System binary (iptables, fdisk)        │
│  ├── /etc/         → Konfigurasi sistem & aplikasi          │
│  │   ├── /etc/ssh/sshd_config                               │
│  │   ├── /etc/nginx/nginx.conf                              │
│  │   └── /etc/systemd/                                     │
│  ├── /home/        → Home directory user                    │
│  │   ├── /home/budi/                                       │
│  │   └── /home/sari/                                       │
│  ├── /root/        → Home directory root user               │
│  ├── /var/         → Data variabel (logs, cache, db)        │
│  │   ├── /var/log/                                         │
│  │   ├── /var/lib/                                         │
│  │   └── /var/www/                                         │
│  ├── /tmp/         → File temporary (auto-cleaned)          │
│  ├── /opt/         → Software pihak ketiga                  │
│  ├── /usr/         → Program & library user-level           │
│  │   ├── /usr/bin/                                         │
│  │   ├── /usr/local/                                       │
│  │   └── /usr/share/                                       │
│  ├── /proc/        → Info proses kernel (virtual)           │
│  ├── /dev/         → Device file                            │
│  └── /boot/        → File boot & kernel image               │
└──────────────────────────────────────────────────────────────┘
💡 Tips Dasar Command Line

Beberapa perintah dasar yang wajib dikuasai sebelum mulai:

  • ls -la — Lihat semua file termasuk hidden
  • cd /path — Pindah direktori
  • cat file.txt — Baca isi file
  • tail -f /var/log/syslog — Lihat log real-time
  • man command — Baca manual page perintah
  • sudo — Jalankan perintah sebagai superuser

2. SSH: Akses Remote yang Aman

SSH (Secure Shell) adalah protokol kriptografis untuk mengakses server secara remote dengan aman. Semua data yang dikirim melalui SSH terenkripsi, sehingga aman untuk dikirimkan melalui jaringan publik. SSH menggantikan Telnet dan rlogin yang tidak aman.

Koneksi SSH Dasar

Bash — SSH Connection
# Koneksi SSH dengan password
ssh user@192.168.1.100

# Koneksi SSH dengan port custom
ssh -p 2222 user@192.168.1.100

# Koneksi SSH dengan private key
ssh -i ~/.ssh/id_rsa user@192.168.1.100

# Copy file dari local ke server
scp file.txt user@server:/home/user/

# Copy file dari server ke local
scp user@server:/var/log/app.log ./

# Copy direktori secara rekursif
scp -r ./myapp user@server:/opt/

# SSH tunneling (port forwarding)
ssh -L 8080:localhost:80 user@server  # Local port 8080 → server port 80

Konfigurasi SSH Key Authentication

SSH key authentication lebih aman daripada password karena menggunakan pasangan kunci kriptografis (public key dan private key).

Bash — SSH Key Setup
# Langkah 1: Generate SSH key pair di mesin lokal
ssh-keygen -t ed25519 -C "admin@myserver.com"
# Tekan Enter untuk menyimpan di default (~/.ssh/id_ed25519)
# Masukkan passphrase (opsional tapi direkomendasikan)

# Output:
# Generating public/private ed25519 key pair.
# Your identification has been saved in /home/user/.ssh/id_ed25519
# Your public key has been saved in /home/user/.ssh/id_ed25519.pub

# Langkah 2: Copy public key ke server
ssh-copy-id user@192.168.1.100

# Atau secara manual:
cat ~/.ssh/id_ed25519.pub | ssh user@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

# Langkah 3: Coba login tanpa password
ssh user@192.168.1.100  # Harusnya tidak perlu password lagi

# Langkah 4 (Opsional): Disable password authentication
# Edit /etc/ssh/sshd_config di server:
# PasswordAuthentication no
# PermitRootLogin no
# ChallengeResponseAuthentication no
# Lalu restart sshd:
sudo systemctl restart sshd

Konfigurasi SSH Client yang Nyaman

Config — ~/.ssh/config
# ~/.ssh/config di mesin lokal

# Server produksi
Host production
    HostName 192.168.1.100
    User deploy
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
    ServerAliveCountMax 3

# Server staging via bastion/jump host
Host staging
    HostName 10.0.2.50
    User admin
    ProxyJump bastion

Host bastion
    HostName 203.0.113.50
    User jumpuser
    Port 2222

# Sekarang cukup:
ssh production      # = ssh -i ~/.ssh/id_ed25519 -p 22 deploy@192.168.1.100
ssh staging         # = ssh melalui bastion → staging
⚠️ Keamanan SSH
  • JANGAN pernah gunakan password sederhana untuk SSH
  • SELALU gunakan SSH key authentication
  • DISABLE root login langsung: PermitRootLogin no
  • GANTI port default 22 ke port lain (misal 2222)
  • GUNAKAN fail2ban untuk memblokir brute force attempts

3. User Management & Permissions

User Management adalah aspek kritis dalam server administration. Setiap user memiliki hak akses tertentu yang ditentukan oleh grup keanggotaan dan permission yang diberikan. Konsep ini merupakan fondasi keamanan Linux.

Mengelola User dan Grup

Bash — User Management
# Tambah user baru
sudo useradd -m -s /bin/bash -G sudo budi
# -m = buat home directory
# -s = set shell default
# -G = tambahkan ke grup

# Set password untuk user baru
sudo passwd budi

# Tambah user dengan spesifikasi lengkap
sudo useradd -m -d /home/sari -s /bin/bash -c "Web Developer" -G sudo,www-data sari

# Modifikasi user
sudo usermod -aG docker budi      # Tambahkan user budi ke grup docker
sudo usermod -s /usr/sbin/nologin botuser  # Disable interactive login
sudo usermod -L olduser            # Lock/disable user account

# Hapus user
sudo userdel -r olduser            # -r = hapus juga home directory

# Lihat informasi user
id budi                             # Lihat UID, GID, dan grup
whoami                             # User saat ini
who                                # Siapa yang sedang login
last -10                           # 10 login terakhir

Linux File Permissions (chmod, chown)

Setiap file di Linux memiliki tiga jenis permission: read (r), write (w), dan execute (x) untuk tiga kategori: owner, group, dan others.

Bash — File Permissions
# Lihat permissions
ls -la /var/www/
# -rw-r--r-- 1 www-data www-data 4096 Jun 25 10:00 index.html
# ▲▲▲        ▲▲▲         ▲▲▲
# owner      group       others
# rwx        rwx         rwx

# Ubah permissions dengan chmod (numeric mode)
chmod 755 script.sh      # rwxr-xr-x (owner=rwx, group=r-x, others=r-x)
chmod 644 index.html     # rw-r--r-- (owner=rw, group=r, others=r)
chmod 600 id_rsa         # rw------- (hanya owner, untuk private key SSH)
chmod 700 ~/.ssh         # rwx------ (hanya owner untuk folder .ssh)

# Ubah permissions dengan chmod (symbolic mode)
chmod u+x script.sh     # Tambah execute untuk owner
chmod g+w file.txt      # Tambah write untuk group
chmod o-rwx secret.txt  # Hapus semua permission untuk others
chmod a+r readme.txt    # Tambah read untuk semua (all)

# Ubah owner dan group
sudo chown budi:www-data /var/www/html
sudo chown -R www-data:www-data /var/www/html    # Rekursif

# Setgid: file baru otomatis punya group parent directory
chmod g+s /var/www/shared/

# Setgid: sticky bit untuk folder shared
chmod +t /tmp  # Hanya owner file yang bisa hapus file di /tmp

# Angka dalam chmod:
# r=4, w=2, x=1
# 7=4+2+1 (rwx), 6=4+2 (rw-), 5=4+1 (r-x), 4=r-- (read only)
Diagram: Memahami Angka Permission
        ┌───────────┬──────────┬──────────┬──────────┐
        │   Angka   │  Owner   │  Group   │  Others  │
        ├───────────┼──────────┼──────────┼──────────┤
        │    777    │  rwx     │  rwx     │  rwx     │ ← Berbahaya!
        │    755    │  rwx     │  r-x     │  r-x     │ ← Untuk script/eksekusi
        │    644    │  rw-     │  r--     │  r--     │ ← Untuk file biasa
        │    600    │  rw-     │  ---     │  ---     │ ← Private key
        │    400    │  r--     │  ---     │  ---     │ ← Read-only owner
        │    700    │  rwx     │  ---     │  ---     │ ← Private folder
        └───────────┴──────────┴──────────┴──────────┘

        r = 4 (read)
        w = 2 (write)
        x = 1 (execute)

        Contoh: 755 = 7(owner) + 5(group) + 5(others)
               = rwx + r-x + r-x

sudo: Hak Akses Root Sementara

Bash — sudo Configuration
# Jalankan perintah sebagai root
sudo apt update

# Edit file sebagai root
sudo nano /etc/nginx/nginx.conf

# Switch ke root shell (gunakan dengan hati-hati)
sudo -i

# Jalankan perintah sebagai user lain
sudo -u www-data cat /var/www/secret.txt

# Edit sudoers file dengan aman (JANGAN langsung edit /etc/sudoers)
sudo visudo

# Tambahkan user ke grup sudo
sudo usermod -aG sudo budi

# Contoh /etc/sudoers.d/custom:
# budi ALL=(ALL) ALL                    # Full access dengan password
# deploy ALL=(ALL) NOPASSWD: ALL        # Full access tanpa password
# www-data ALL=(ALL) NOPASSWD: /usr/sbin/nginx  # Hanya nginx command

4. systemd: Service Manager Modern

systemd adalah sistem init dan service manager yang digunakan oleh sebagian besar distribusi Linux modern (Ubuntu, Debian, CentOS, dll). systemd mengelola semua service yang berjalan di sistem, mulai dari web server hingga database.

Perintah systemctl yang Sering Digunakan

Bash — systemctl Commands
# Start/stop/restart service
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx      # Reload config tanpa restart

# Enable/disable service (auto-start saat boot)
sudo systemctl enable nginx
sudo systemctl disable nginx

# Lihat status service
sudo systemctl status nginx
# Output: active (running) sejak Mon 2026-06-25

# Lihat semua service yang aktif
systemctl list-units --type=service --state=running

# Lihat semua service yang failed
systemctl --failed

# Lihat log service tertentu
journalctl -u nginx -f           # Follow real-time
journalctl -u nginx --since today # Log hari ini saja
journalctl -u nginx --since "2026-06-25 10:00" --until "2026-06-25 12:00"
journalctl -u nginx -n 100       # 100 baris log terakhir
journalctl -p err -u nginx       # Hanya log level error

# Enable dan start sekaligus
sudo systemctl enable --now nginx

Membuat Custom Service Unit

Anda bisa membuat service systemd untuk aplikasi custom (Node.js, Python, Go, dll).

INI — /etc/systemd/system/myapp.service
[Unit]
Description=My Node.js Application
Documentation=https://docs.myapp.com
After=network.target postgresql.service
Requires=postgresql.service

[Service]
Type=simple
User=deploy
Group=deploy
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/server.js
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10
Environment=NODE_ENV=production
Environment=PORT=3000
EnvironmentFile=/opt/myapp/.env

# Security hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/myapp/logs /opt/myapp/uploads
PrivateTmp=true

# Resource limits
LimitNOFILE=65535
LimitNPROC=4096

# Logging
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp

[Install]
WantedBy=multi-user.target
Bash — Enable Custom Service
# Reload systemd untuk membaca unit file baru
sudo systemctl daemon-reload

# Enable dan start service
sudo systemctl enable --now myapp

# Cek status
sudo systemctl status myapp

# Lihat log aplikasi
journalctl -u myapp -f

# Edit unit file (buka editor)
sudo systemctl edit myapp  # Untuk override/drop-in
💡 Mengapa systemctl Lebih Baik?

Dibanding init.d/supervisor lama, systemd menawarkan:

  • Dependency management: Service mulai sesuai urutan yang tepat
  • Auto restart: Restart otomatis jika service crash
  • Resource control: Limit CPU, memory, I/O per service
  • Unified logging: Semua log di journalctl
  • Socket activation: Service mulai saat ada request

5. Cron: Penjadwalan Tugas Otomatis

Cron adalah sistem penjadwalan tugas yang berjalan di background (cron daemon) untuk menjalankan perintah atau script secara otomatis sesuai jadwal yang ditentukan. Cron sangat berguna untuk backup otomatis, rotasi log, cleanup, monitoring, dan tugas periodik lainnya.

Sintaks Crontab

Diagram: Format Crontab
┌────────── menit (0-59)
│ ┌──────── jam (0-23)
│ │ ┌────── hari dalam bulan (1-31)
│ │ │ ┌──── bulan (1-12)
│ │ │ │ ┌── hari dalam minggu (0-7, 0&7=Minggu)
│ │ │ │ │
* * * * * /path/to/command arg1 arg2

Contoh:
*/5 * * * *     = Setiap 5 menit
0 */2 * * *     = Setiap 2 jam (pada menit 0)
0 2 * * *       = Setiap hari jam 2 pagi
0 0 * * 0       = Setiap Minggu jam 00:00
0 9 * * 1-5     = Setiap hari kerja jam 9 pagi
30 1 1,15 * *   = Tanggal 1 dan 15 setiap bulan jam 01:30
Bash — Crontab Management
# Edit crontab untuk user saat ini
crontab -e

# Lihat crontab saat ini
crontab -l

# Edit crontab untuk user lain (root only)
sudo crontab -u deploy -e

# Contoh crontab entries:
# ┌─── Backup database setiap jam 2 pagi
# │
0 2 * * * /opt/scripts/backup_db.sh >> /var/log/backup.log 2>&1

# Membersihkan file temporary setiap hari jam 3 pagi
0 3 * * * find /tmp -type f -mtime +7 -delete

# Restart web server setiap Minggu jam 4 pagi
0 4 * * 0 systemctl restart nginx

# Cek disk usage setiap 6 jam
0 */6 * * * /opt/scripts/check_disk.sh

# Deploy otomatis setiap push ke main (via webhook, bukan cron)
# Tapi cron bisa pull repo setiap 5 menit:
*/5 * * * * cd /opt/myapp && git pull origin main 2>&1 | logger -t autodeploy

# Kirim laporan harian jam 8 pagi
0 8 * * * /opt/scripts/daily_report.sh | mail -s "Daily Report" admin@company.com

# Cron dengan timezone (systemd)
# Tambahkan CRON_TZ=Asia/Jakarta di awal crontab
CRON_TZ=Asia/Jakarta
0 7 * * * /opt/scripts/morning_task.sh

Alternatif Cron: systemd Timer

INI — systemd Timer (backup.timer)
# /etc/systemd/system/backup.timer
[Unit]
Description=Backup database harian

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=300

[Install]
WantedBy=timers.target

# /etc/systemd/system/backup.service
[Unit]
Description=Run database backup

[Service]
Type=oneshot
ExecStart=/opt/scripts/backup_db.sh
User=deploy

# Aktifkan timer
sudo systemctl enable --now backup.timer

# Lihat semua timer aktif
systemctl list-timers --all

6. Disk & Storage Management

Disk management mencakup pemantauan penggunaan disk, partisi, format, mounting, dan manajemen storage. Memahami disk management sangat penting untuk menjaga server tetap berjalan optimal dan mencegah masalah kehabisan ruang disk.

Memantau Penggunaan Disk

Bash — Disk Monitoring
# Lihat penggunaan disk (human-readable)
df -h
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1        50G   32G   16G  67% /
# /dev/sdb1       200G   45G  145G  24% /data

# Lihat penggunaan per direktori
du -sh /var/log        # Total ukuran /var/log
du -sh /home/*         # Ukuran setiap home directory
du -sh /* 2>/dev/null  # Ukuran setiap direktori root

# Top 10 direktori terbesar
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -10

# Lihat info block device
lsblk
# NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# sda      8:0    0   50G  0 disk
# ├─sda1   8:1    0   50G  0 part /
# sdb      8:16   0  200G  0 disk
# └─sdb1   8:17   0  200G  0 part /data

# Lihat info filesystem
sudo blkid           # UUID dan tipe filesystem
sudo fdisk -l        # Tabel partisi lengkap

Partisi dan Format Disk Baru

Bash — Disk Partitioning & Mounting
# Langkah 1: Buat partisi baru pada /dev/sdb
sudo fdisk /dev/sdb
# Commands: n (new), p (primary), 1 (number), w (write)

# Langkah 2: Format partisi dengan ext4
sudo mkfs.ext4 /dev/sdb1

# Langkah 3: Buat mount point
sudo mkdir -p /data

# Langkah 4: Mount partisi
sudo mount /dev/sdb1 /data

# Langkah 5: Tambahkan ke /etc/fstab untuk auto-mount saat boot
echo 'UUID=xxxx-xxxx  /data  ext4  defaults,noatime  0  2' | sudo tee -a /etc/fstab

# Cek fstab sebelum reboot (penting!)
sudo mount -a

# Resize partisi ext4 (jika disk di-expand di cloud)
sudo resize2fs /dev/sdb1

# Lihat disk I/O
iostat -xz 1 5       # Monitor I/O setiap 1 detik, 5 kali
iotop                # Top untuk disk I/O (seperti top)

Swap Space Management

Bash — Swap Management
# Cek swap saat ini
sudo swapon --show
free -h

# Buat swap file 2GB
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# Tambahkan ke fstab agar persisten
echo '/swapfile  none  swap  sw  0  0' | sudo tee -a /etc/fstab

# Tuning swappiness (10 = gunakan swap hanya saat benar-benar perlu)
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

7. Networking & Firewall

Networking adalah skill penting untuk mengelola server. Anda perlu memahami cara mengkonfigurasi jaringan, memantau koneksi, dan mengamankan server dengan firewall.

Perintah Networking Penting

Bash — Networking Commands
# Lihat konfigurasi IP
ip addr show               # Atau: ip a
ip route show              # Tabel routing

# Cek konektivitas
ping -c 4 google.com
traceroute google.com

# Cek port yang sedang terbuka (listening)
ss -tlnp                   # TCP listening ports
ss -ulnp                   # UDP listening ports
ss -tp                     # Semua koneksi TCP aktif

# Alternatif lama (masih banyak digunakan)
netstat -tlnp              # TCP listening
netstat -anp | grep :80    # Cek koneksi ke port 80

# DNS lookup
dig beebanelabs.pages.dev
nslookup beebanelabs.pages.dev
host beebanelabs.pages.dev

# Test koneksi ke port tertentu
nc -zv 192.168.1.100 22    # Test SSH
telnet 192.168.1.100 80    # Test HTTP

# Download file
wget https://example.com/file.tar.gz
curl -O https://example.com/file.tar.gz
curl -I https://example.com  # Hanya headers

# Lihat hostname dan IP
hostname
hostname -I

UFW: Uncomplicated Firewall

UFW adalah front-end yang memudahkan konfigurasi iptables untuk Ubuntu/Debian. Ini adalah firewall yang direkomendasikan untuk pemula.

Bash — UFW Firewall Configuration
# Aktifkan UFW
sudo ufw enable

# Set default policy
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Izinkan port spesifik
sudo ufw allow 22/tcp        # SSH
sudo ufw allow 80/tcp        # HTTP
sudo ufw allow 443/tcp       # HTTPS
sudo ufw allow 8080/tcp      # Custom app

# Izinkan dari IP tertentu
sudo ufw allow from 192.168.1.0/24 to any port 22    # SSH dari LAN saja
sudo ufw allow from 10.0.0.0/8 to any port 3306      # MySQL dari internal

# Izinkan dengan deskripsi
sudo ufw allow 8443/tcp comment 'Grafana HTTPS'

# Hapus rule
sudo ufw delete allow 8080/tcp
sudo ufw delete 3            # Hapus rule nomor 3

# Lihat status dan rules
sudo ufw status verbose
sudo ufw status numbered

# Disable firewall (untuk debugging)
sudo ufw disable

Netplan: Konfigurasi Jaringan Modern

YAML — /etc/netplan/01-netcfg.yaml
# Konfigurasi static IP (Ubuntu 20.04+)
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
          - 1.1.1.1

# Terapkan konfigurasi
sudo netplan apply

# Cek hasil
sudo netplan try   # Coba dulu, auto-rollback jika gagal

8. Security Hardening

Security hardening adalah proses mengamankan server Linux dari berbagai ancaman keamanan. Ini mencakup konfigurasi SSH yang aman, firewall, automatic updates, intrusion detection, dan best practices keamanan lainnya.

Checklist Security Hardening

No. Langkah Prioritas
1Disable root login SSH🔴 Kritis
2Gunakan SSH key authentication🔴 Kritis
3Aktifkan firewall (UFW/iptables)🔴 Kritis
4Update sistem secara berkala🔴 Kritis
5Install & konfigurasi fail2ban🟡 Penting
6Nonaktifkan service yang tidak diperlukan🟡 Penting
7Set password policy yang ketat🟡 Penting
8Audit log secara berkala🟡 Penting
9Install intrusion detection (AIDE/rkhunter)🟢 Direkomendasikan
10Enkripsi data at rest & in transit🟢 Direkomendasikan

Implementasi Security Hardening

Bash — Security Hardening Steps
# 1. Update sistem
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y

# 2. Install unattended-upgrades untuk auto security patches
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

# 3. Install & konfigurasi fail2ban
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Edit /etc/fail2ban/jail.local:
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
banaction = ufw

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
EOF

sudo systemctl enable --now fail2ban

# 4. Harden SSH config (/etc/ssh/sshd_config)
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config
sudo sed -i 's/#ClientAliveInterval 0/ClientAliveInterval 300/' /etc/ssh/sshd_config
sudo sed -i 's/#ClientAliveCountMax 3/ClientAliveCountMax 2/' /etc/ssh/sshd_config
echo "AllowUsers deploy admin" | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart sshd

# 5. Kernel hardening (/etc/sysctl.conf)
cat > /etc/sysctl.d/99-security.conf << 'EOF'
# Disable IP forwarding (jika bukan router)
net.ipv4.ip_forward = 0

# Disable ICMP redirect
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

# Enable SYN cookie (anti SYN flood)
net.ipv4.tcp_syncookies = 1

# Log Martian packets
net.ipv4.conf.all.log_martians = 1

# Disable IPv6 jika tidak diperlukan
net.ipv6.conf.all.disable_ipv6 = 1
EOF
sudo sysctl --system

# 6. Scan untuk malware
sudo apt install rkhunter
sudo rkhunter --check --skip-keypress
⚠️ Tips Keamanan Penting
  • SELALU buat backup sebelum mengubah konfigurasi keamanan
  • TEST SSH connection di terminal baru sebelum menutup sesi yang ada
  • PANTAU log keamanan secara berkala: sudo tail -f /var/log/auth.log
  • PRINCIPLE OF LEAST PRIVILEGE: Berikan hak akses seminimal mungkin yang diperlukan
  • DOKUMENTASIKAN setiap perubahan konfigurasi keamanan

9. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Linux Server Administration:

Pertanyaan 1: Apa perintah untuk menggenerate SSH key pair dengan algoritma Ed25519?

a) ssh-keygen -t rsa
b) ssh-keygen -t ed25519
c) ssh-keygen -t dsa
d) ssh-create -t ed25519

Pertanyaan 2: Apa arti angka 755 dalam chmod?

a) rwxrwxrwx (semua bisa baca, tulis, eksekusi)
b) rwxr-xr-x (owner full, group dan others hanya baca dan eksekusi)
c) rw-r--r-- (owner baca tulis, yang lain hanya baca)
d) rwx------ (hanya owner yang punya akses)

Pertanyaan 3: Perintah systemctl mana yang memastikan service mulai otomatis saat boot?

a) systemctl start nginx
b) systemctl restart nginx
c) systemctl enable nginx
d) systemctl status nginx

Pertanyaan 4: Dalam format crontab "0 2 * * *", kapan perintah akan dijalankan?

a) Setiap 2 menit sekali
b) Setiap hari jam 2 pagi
c) Setiap 2 jam sekali
d) Setiap hari tanggal 2

Pertanyaan 5: Tool apa yang digunakan untuk memblokir IP yang mencoba brute force SSH?

a) ufw
b) iptables
c) fail2ban
d) sshguard