Melindungi server Linux: firewall, akun, SSH, dan pembaruan keamanan

Perlindungan server Linux menggabungkan pembatasan akun dan port terbuka, kendali hak administrator, pembaruan keamanan tepat waktu, serta akses pemulihan. Sebelum memperketat kebijakan akses jarak jauh, pertahankan sesi saat ini dan akses konsol, lalu uji koneksi baru setelah setiap perubahan.

Sebelum mengubah aturan dari jarak jauh, pastikan akses SSH dan pemulihan melalui konsol berbahasa Inggris sudah tersedia. Secure Shell (SSH) menyediakan akses jarak jauh terenkripsi. Uji koneksi baru sebelum menutup sesi semula.

Rujukan latihan konfigurasi adalah mesin virtual (VM) dengan instalasi biasa Ubuntu 26.04 LTS, yaitu rilis dukungan jangka panjang, atau Rocky Linux seri 9. Kontainer, Windows Subsystem for Linux (WSL), dan rilis lain dapat berbeda dalam konfigurasi layanan serta paket. Siapkan konsol pemulihan dan catat versi melalui panduan persiapan mesin virtual berbahasa Inggris. Gunakan pengelola firewall yang memang aktif di sistem; bagian UFW dan firewalld adalah alternatif sesuai lingkungan.

Mendata layanan terbuka dan memastikan akses pemulihan

id
getent group sudo
getent group wheel
sudo ss -lntup
systemctl --failed

Ubuntu umumnya mendelegasikan administrasi melalui grup sudo, sedangkan Rocky Linux melalui wheel, tetapi hak sebenarnya tetap ditentukan kebijakan sudoers. Salah satu grup tersebut mungkin tidak ada pada distribusi Anda. Cocokkan port yang mendengarkan koneksi dengan layanan terpasang dan kebutuhan yang sah. Setelah memeriksa dependensi serta dampaknya, hentikan atau nonaktifkan layanan yang tidak diperlukan dan izinkan hanya lalu lintas yang diperlukan. Grup keamanan cloud dan firewall pada host merupakan lapisan yang terpisah.

Pastikan kanal pemulihan yang tidak bergantung pada SSH benar-benar dapat digunakan, misalnya konsol VM. Catat keadaan firewall, konfigurasi SSH, dan kebijakan akun, lalu cadangkan berkas konfigurasi sebelum mengubahnya. Sesi lama yang masih terbuka tidak membuktikan login baru tetap diizinkan.

Menguji akses kunci sebelum mengubah kebijakan SSH

Uji autentikasi kunci dan sudo melalui sesi baru menggunakan akun administrator biasa. Sebelum membatasi autentikasi kata sandi, periksa berkas Include, blok Match, dan pengaturan penyediaan sistem atau cloud. Menambahkan direktif yang sama berulang kali dapat menghasilkan konfigurasi efektif yang berbeda dari tujuan Anda.

sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T | grep -E "^(port|permitrootlogin|passwordauthentication|pubkeyauthentication) "

sshd -t memeriksa validitas konfigurasi dan kondisi kunci, sedangkan -T mencetak pengaturan efektif. Jika memakai kondisi Match, evaluasi juga konteks koneksi yang relevan dengan -C, termasuk pengguna dan alamat yang sesuai. Jalur sshd pada contoh harus cocok dengan instalasi sebenarnya.

Muat ulang layanan yang namanya benar untuk distribusi tersebut hanya setelah validasi, lalu uji login baru. Jika gagal, pulihkan cadangan melalui sesi yang dipertahankan atau konsol dan validasi kembali. Jangan menonaktifkan metode akses lama sebelum metode penggantinya terbukti dapat digunakan.

Mengizinkan jalur administrasi sebelum mengaktifkan UFW

Contoh ini mengasumsikan server latihan benar-benar memakai port TCP 22 untuk SSH. TCP, singkatan dari Transmission Control Protocol, adalah protokol transport yang dipakai koneksi SSH pada contoh. Jika port berbeda, ganti secara konsisten. Pembatasan berdasarkan sumber dapat sesuai, tetapi alamat keluar Network Address Translation (NAT) atau Virtual Private Network (VPN) yang keliru dapat memutus akses. Periksa keadaan semula dan tambahkan aturan izin yang diperlukan sebelum mengaktifkan firewall.

sudo ufw status verbose
sudo ufw --dry-run allow 22/tcp
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status numbered

--dry-run memperlihatkan rencana tanpa menerapkan perubahan; baris allow berikutnya benar-benar menambahkan aturan. Aturan contoh mengizinkan 22/tcp dari semua sumber dan bukan kebijakan lengkap untuk server yang terbuka ke internet. Uji koneksi baru, tambahkan serta uji pembatasan sumber yang lebih sempit jika diperlukan, lalu hapus aturan luas hanya setelah penggantinya bekerja.

Gunakan daftar bernomor terbaru dan catatan keadaan semula untuk menghapus aturan yang tepat. Nomor dapat berubah setelah aturan lain dihapus. Jangan menganggap daftar lama masih menunjuk aturan yang sama, dan periksa kembali koneksi baru setelah perubahan.

Membedakan zona firewalld, runtime, dan permanent

sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone

Zona adalah kelompok kebijakan yang diterapkan pada antarmuka atau sumber jaringan. Tentukan zona yang benar-benar digunakan jalur administrasi; zona default belum tentu zona antarmuka itu. Ganti REPLACE_WITH_ACTIVE_ZONE dengan zona yang sudah diverifikasi dan periksa --info-service=ssh untuk memastikan definisi layanan cocok dengan port SSH sebenarnya. Jika memakai port khusus, jangan menganggap layanan bernama ssh otomatis mencakupnya.

zone=REPLACE_WITH_ACTIVE_ZONE
sudo firewall-cmd --info-service=ssh
sudo firewall-cmd --zone="$zone" --add-service=ssh
sudo firewall-cmd --zone="$zone" --list-all
sudo firewall-cmd --permanent --zone="$zone" --add-service=ssh
sudo firewall-cmd --permanent --zone="$zone" --list-all

Uji perubahan runtime terlebih dahulu, termasuk koneksi baru, sebelum menjalankan baris --permanent. Runtime dan permanent berbeda: reload dapat membuang perubahan runtime yang belum disimpan. Menyalin seluruh keadaan runtime ke permanent dapat ikut mempertahankan izin sementara yang tidak dimaksudkan.

Simpan hanya aturan yang memang diperlukan. Untuk membatalkan latihan, hapus hanya aturan yang baru ditambahkan dan sebelumnya tidak ada, pada kedua keadaan jika berlaku. Pertahankan izin akses administrasi sampai alternatifnya diverifikasi. Setelah penyesuaian, bandingkan daftar aturan dengan catatan awal dan uji koneksi baru lagi.

Memelihara pembaruan dan SELinux

Gunakan blok pertama pada Ubuntu dan blok kedua pada Rocky Linux. Pemeriksaan ketersediaan pembaruan tidak sama dengan pemasangan paket baru.

sudo apt update
apt list --upgradable
sudo dnf check-update
getenforce

apt update menyegarkan indeks paket; apt list --upgradable menampilkan calon pembaruan. Menurut rujukan DNF check-update, status 100 berarti pembaruan tersedia, sedangkan 0 berarti tidak ada pembaruan yang ditemukan; bedakan dari status galat. Daftar calon pembaruan juga tidak menjamin setiap paket dapat dipasang tanpa kendala dependensi.

Terapkan pembaruan setelah meninjau backup, dampak terhadap layanan, dan kebutuhan reboot. Setelahnya, verifikasi respons layanan nyata dan perilaku setelah reboot, bukan hanya nomor versi.

Security-Enhanced Linux (SELinux) di Rocky Linux mengendalikan akses melalui label dan kebijakan proses. getenforce menampilkan mode saat ini. Jika layanan web tidak dapat membaca berkas, periksa izin, label, serta catatan audit sebelum mengubah kebijakan; jangan langsung menonaktifkan enforcement. Jalur yang tidak standar mungkin memerlukan aturan label permanen dengan semanage fcontext, lalu penerapan label yang sesuai melalui restorecon. SELinux dan penyaringan firewall menangani jenis pembatasan yang berbeda.

Dokumentasi resmi