Panduan mengamankan FreeBSD
Pendahuluan
Selamat datang di panduan penguatan keamanan FreeBSD saya, yang telah diperbarui untuk FreeBSD 15.1. FreeBSD memang sudah aman dan konservatif sejak awal, tetapi sistem yang terhubung ke internet memerlukan langkah-langkah tambahan. Panduan ini adalah panduan praktis dan mendalam yang dapat Anda terapkan pada instalasi 15.1 yang baru: penambalan, akun, SSH, firewall, kernel, pengurangan permukaan serangan, sistem berkas, dan pemantauan. Terapkan apa yang sesuai dengan model ancaman Anda — Anda tidak perlu menerapkan setiap item pada setiap mesin. Sepanjang panduan ini, tanda # berarti jalankan sebagai root.
1. Pastikan sistem selalu diperbarui
Tidak ada yang penting di bawah ini jika sistem menjalankan kode yang diketahui rentan. Pembaruan patch adalah langkah pengamanan paling penting.
Sistem dasar: freebsd-update
Pada rilis (RELEASE), unduh dan pasang patch keamanan dasar serta errata:
# freebsd-update fetch install
Paket: pkg upgrade dan pkg audit
Selalu perbarui paket dan — yang terpenting — periksa paket tersebut dengan basis data kerentanan VuXML. portaudit yang lama sudah lama tidak ada lagi; fitur ini sekarang sudah terintegrasi ke dalam pkg:
# pkg update
# pkg upgrade
# pkg audit -F
pkg audit -F memperbarui basis data kerentanan dan melaporkan paket terinstal mana pun yang memiliki masalah yang diketahui.
Otomatiskan prosesnya
Biarkan sistem memberi tahu Anda saat memerlukan perhatian. Tambahkan pemeriksaan pembaruan dasar harian yang hanya mengirim email ke root jika ada patch yang tertunda:
# echo '@daily root freebsd-update cron' >> /etc/crontab
Dan atur agar periodic yang dijalankan setiap hari mengaudit paket-paket Anda, melalui /etc/periodic.conf:
security_status_pkgaudit_enable="YES"
2. Akun dan otentikasi
Penghashing kata sandi dan kebijakan (login.conf)
FreeBSD modern sudah melakukan hashing kata sandi dengan SHA-512 secara default; default MD5 yang lama sudah tidak digunakan lagi. Pastikan hal ini (atau beralih ke Blowfish dengan blf) di kelas default dari /etc/login.conf, dan tetapkan panjang minimum yang wajar:
:passwd_format=sha512:\
:minpasswordlen=12:\
Setelah mengedit, bangun ulang basis data hash:
# cap_mkdb /etc/login.conf
Masuk sebagai root dan eskalasi hak akses
Jangan bagikan kata sandi root atau masuk sebagai root melalui jaringan. Buat pengguna admin, tambahkan mereka ke grup wheel, dan lakukan eskalasi dengan alat yang mencatat dan membatasi hak akses yang diberikan. doas berukuran kecil dan mudah diaudit:
# pkg install doas
# echo 'permit persist :wheel' > /usr/local/etc/doas.conf
(security/sudo adalah alternatif yang lebih berat dan lebih dapat dikonfigurasi.) Kami akan mengunci login SSH root langsung pada bagian berikutnya.
3. Memperkuat Keamanan SSH (OpenSSH)
SSH biasanya merupakan satu-satunya pintu masuk ke sistem, jadi pastikan sistem ini aman.
sshd_config
Di /etc/ssh/sshd_config, utamakan otentikasi berbasis kunci dan nonaktifkan opsi yang rentan:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers youradmin
Pasang kunci publik Anda (~/.ssh/authorized_keys) dan uji login dengan kunci terlebih dahulu sebelum menonaktifkan kata sandi, atau Anda akan terkunci di luar. Kemudian muat ulang:
# service sshd reload
Membatasi AllowUsers (atau AllowGroups wheel) hanya kepada mereka yang benar-benar membutuhkan akses shell adalah salah satu baris paling penting dalam berkas tersebut.
Perlindungan terhadap serangan brute-force dengan blacklistd
FreeBSD dilengkapi dengan blacklistd, yang memantau kegagalan otentikasi berulang dan memerintahkan firewall untuk memblokir sumbernya. Aktifkan fitur ini:
# sysrc blacklistd_enable=YES
# service blacklistd start
Tambahkan UseBlacklist yes ke sshd_config, muat ulang sshd, dan integrasikan blacklistd ke dalam pf (di bawah).
4. Firewall dengan pf
FreeBSD mewarisi pf dari OpenBSD, sebuah filter paket yang ringkas dan kuat. Pengaturan default yang baik adalah menolak semua lalu lintas masuk dan hanya membuka port yang benar-benar Anda layani; penyaringan pada antarmuka eksternal biasanya sudah cukup.
Kumpulan aturan penolakan default
Konfigurasi minimal /etc/pf.conf untuk server yang menyediakan layanan SSH dan HTTPS:
ext_if = "vtnet0" # your external interface
set skip on lo
scrub in all
# blacklistd inserts its block rules here
anchor "blacklistd/*" in on $ext_if
block in all
pass out quick keep state
# only the services you actually offer
pass in on $ext_if proto tcp to ($ext_if) port { 22 443 } keep state
# allow ping
pass in on $ext_if inet proto icmp icmp-type echoreq
Periksa sintaksisnya, lalu aktifkan dan jalankan:
# pfctl -nf /etc/pf.conf
# sysrc pf_enable=YES
# service pf start
Mengintegrasikan blacklistd ke dalam pf
Baris anchor "blacklistd/*" adalah tempat blacklistd menyisipkan bloknya, sehingga serangan brute-force SSH yang memicu blacklistd akan secara otomatis ditolak oleh firewall. Berkas /etc/blacklistd.conf default sudah mencakup SSH.
5. Penguatan kernel dan sysctl
Sysctl yang berguna
Tambahkan yang berikut ini ke /etc/sysctl.conf (pengaturan ini berlaku saat boot; atur sekarang dengan sysctl <nama>=<nilai>):
# hide other users' processes
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
# don't let unprivileged users debug other processes
security.bsd.unprivileged_proc_debug=0
# stricter hardlink handling in sticky dirs
security.bsd.hardlink_check_uid=1
security.bsd.hardlink_check_gid=1
# stack guard page
security.bsd.stack_guard_page=1
# randomize the IP ID field
net.inet.ip.random_id=1
ASLR sudah aktif
Kabar baik: pengacakan tata letak ruang alamat (ASLR) sudah diaktifkan secara default di FreeBSD dasar (sejak versi 13.0), sehingga Anda tidak lagi memerlukan kernel pihak ketiga hanya untuk itu. Pastikan:
# sysctl kern.elf64.aslr.enable kern.elf64.aslr.pie_enable
kern.elf64.aslr.enable: 1
kern.elf64.aslr.pie_enable: 1
securelevel (pahami trade-off-nya)
kern.securelevel adalah mekanisme satu arah: fitur ini membuat flag file schg/sappnd tidak dapat diubah, memblokir pemuatan modul kernel, dan pada level 3 membekukan aturan firewall Anda. Fitur ini kuat namun memberatkan secara operasional — Anda memerlukan mode pengguna tunggal untuk mengubah file yang dilindungi, dan beberapa perangkat lunak tidak menyukainya. Aktifkan fitur ini secara sengaja melalui /etc/rc.conf:
# sysrc kern_securelevel_enable=YES
# sysrc kern_securelevel=2
Pindahlah ke level 3 hanya setelah firewall dan berkas sistem Anda stabil.
6. Minimalkan permukaan serangan
Lihat apa yang sedang mendengarkan
Anda tidak dapat mengamankan apa yang tidak Anda ketahui. Cantumkan soket yang sedang mendengarkan:
# sockstat -4l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sshd 803 4 tcp4 *:22 *:*
unbound unbound 7620 6 tcp4 127.0.0.1:53 *:*
Gunakan -6l untuk IPv6 atau -l untuk keduanya. Apa pun yang ada di 127.0.0.1 tidak dapat dijangkau dari jaringan; apa pun yang ada di * dapat dijangkau (tergantung pada firewall Anda). Setiap listener adalah permukaan serangan — tutup yang tidak Anda perlukan.
Nonaktifkan apa yang tidak Anda butuhkan
Instalasi default sudah cukup ringkas. Nonaktifkan layanan-layanan yang biasanya tidak Anda gunakan:
# sysrc sendmail_enable=NONE
# sysrc inetd_enable=NO
(FreeBSD telah menghapus sendmail dari sistem dasar, sehingga sistem 15.1 yang bersih mungkin tidak menyertakannya sama sekali.)
Isolasi layanan di dalam jail
Fitur keamanan unggulan FreeBSD adalah jail — sebuah wadah ringan di tingkat sistem operasi. Jalankan setiap layanan yang terhubung ke jaringan (web, email, DNS) di jail masing-masing sehingga jika terjadi pelanggaran, dampaknya hanya terbatas pada jail tersebut, bukan seluruh host. Pengelola seperti bastille (pkg install bastille) memudahkan hal ini. Dari segi arsitektur, ini adalah keuntungan terbesar dalam daftar ini.
7. Penguatan sistem berkas
Opsi pemasangan
Berikan setiap sistem berkas hanya hak akses yang dibutuhkannya. Direktori /tmp dan /var yang terpisah dapat diberi atribut nosuid/noexec sehingga penyerang tidak dapat menempatkan dan menjalankan file biner di sana. Di /etc/fstab:
/dev/... /tmp ufs rw,nosuid,noexec,nodev 2 2
Pada ZFS, atur setara dengan zfs set exec=off setuid=off <dataset>. Uji terlebih dahulu — beberapa langkah pembangunan paket memang dijalankan dari /tmp.
pemeriksaan keamanan berkala
Eksekusi harian periodic security melaporkan perubahan setuid, kegagalan login, dan lainnya. Aktifkan bagian yang Anda inginkan di /etc/periodic.conf:
daily_clean_tmps_enable="YES"
security_status_pkgaudit_enable="YES"
8. Pencatatan, audit, dan pemantauan
Eksekusi berkala keamanan
Secara default, FreeBSD mengirimkan ringkasan keamanan harian ke root melalui email — bacalah. Ringkasan ini menandai biner setuid baru, anomali pesan kernel, kegagalan login, dan lainnya: pemantauan yang murah namun sangat informatif.
Audit dengan auditd (BSM)
Untuk pencatatan forensik yang sesungguhnya, FreeBSD menyertakan kerangka kerja audit OpenBSM. Aktifkan fitur ini untuk mencatat peristiwa yang relevan dengan keamanan (login, penggunaan hak istimewa, akses berkas) ke dalam jejak yang terstruktur:
# sysrc auditd_enable=YES
# service auditd start
Sesuaikan apa yang direkam di /etc/security/audit_control, dan tinjau dengan praudit dan auditreduce.
Pindai dengan Lynis
Untuk mendapatkan pendapat kedua secara otomatis, jalankan Lynis, yang memeriksa puluhan item penguatan keamanan dan memberikan daftar prioritas:
# pkg install lynis
# lynis audit system
9. Langkah Selanjutnya
Kerangka kerja MAC dan Capsicum
Ketika izin Unix standar sudah tidak mencukupi, FreeBSD menawarkan kerangka kerja MAC — kebijakan Kontrol Akses Wajib (Mandatory Access Control) yang dapat dimuat seperti mac_portacl dan mac_bsdextended — serta Capsicum, sandbox berbasis mode kemampuan yang terintegrasi ke dalam banyak utilitas dasar. Keduanya membatasi proses jauh melampaui batasan pengguna dan grup.
HardenedBSD
HardenedBSD adalah turunan dari FreeBSD yang berfokus pada mitigasi eksploitasi. Kini, karena FreeBSD dasar sudah menyertakan ASLR, nilai tambah HardenedBSD terletak pada mitigasi ekstra yang dimilikinya — ASLR yang lebih kuat, perlindungan bergaya PaX, SEGVGUARD, dan pengembangan CFI yang sedang berlangsung. Jika model ancaman Anda memerlukan mitigasi yang agresif, proyek ini layak untuk dievaluasi, dan proyek ini selalu menyambut para penguji.
Umpan Balik
Umpan balik Anda sangat diharapkan. Beritahu saya apa yang kurang, apa yang ingin Anda tambahkan, dan apa yang membantu — panduan ini menjadi lebih baik setiap kali ada yang memberikan masukan.



