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.