PF Firewall : Contoh implementasi
Bismillah,
Saya bermaksud mengulang kembali tulisan tentang OpenBSD PF Firewall yang dulu pernah saya tulis di sini dengan beberapa catatan tambahan, dengan harapan agar bermanfaat di kemudian hari.
Dibawah ini adalah diagram network sederhana, yang menggambarkan sebuah Virtual Machine (vm) yang punya 1 (satu) interface yang terhubung ke internet dengan IP Public.
Kemudian, saya tampilkan full isi file pf.conf, yang akan saya jelaskan isinya.
# $OpenBSD: pf.conf,v 1.55 2017/12/03 20:40:04 sthen Exp $
#
# See pf.conf(5) and /etc/examples/pf.conf
ext_if=vio0
services = "{ 22, 443, 4443 }"
set skip on lo
block return # block stateless traffic
table <ip_safe> persist file "/etc/ip_safe"
pass out to <ip_safe>
table <abusive_hosts> persist
block in quick from <abusive_hosts>
table <ip_indonesia> persist file "/etc/id.zone"
pass in on $ext_if inet proto tcp from <ip_indonesia> to $ext_if \
port $services \
flags S/SA synproxy state \
(max-src-conn 100, max-src-conn-rate 15/5, overload <abusive_hosts> flush)
#Pass SSL Labs
pass in on $ext_if inet proto tcp from 64.41.200.0/24 to $ext_if \
port 443
# By default, do not permit remote connections to X11
block return in on ! lo0 proto tcp to port 6000:6010
# Port build user does not need network
block return out log proto {tcp udp} user _pbuild
Baiklah, saya coba memulai menjelaskannya:
ext_if=vio0
Interface yang digunakan, yaitu vio0
services = "{ 22, 443, 4443 }"
Port yang di izinkan untuk di akses dari Internet, tinggal di tambahkan port lainnya, kalau di perlukan.
set skip on lo
Jangan filter interface lo untuk akses network local. Biasanya lo ini diberi alamat 127.0.0.1/8
block return
Secara default, block semua koneksi keluar dan masuk, termasuk icmp, sehingga server tidak terkena serangan PoD
table <ip_safe> persist file "/etc/ip_safe"
Buat daftar IP dengan fungsi ‘table’, dengan nama ip_safe, yang mengambil dari daftar IP di file /etc/ip_safe
pass out to <ip_safe>
Izinkan akses dari VM ke luar hanya menuju IP di daftar ip_safe yang telah kita buat diatas.
table <abusive_hosts> persist
Persiapkan daftar kosong untuk IP yang melakukan tindakan DOS, IP yang terperangkap akan masuk ke daftar ini.
block in quick from <abusive_hosts>
Kalau ternyata ada yang terperangkap, block total dari IP tersebut.
table <ip_indonesia> persist file "/etc/id.zone"
Daftar IP dari Indonesia. Saya mengambilnya dari sini
pass in on $ext_if inet proto tcp from <ip_indonesia> to $ext_if \
port $services \
flags S/SA synproxy state \
(max-src-conn 100, max-src-conn-rate 15/5, overload <abusive_hosts> flush)
Izinkan akses ke port yang telah di definisikan di atas ‘hanya’ dari IP yang berasal dari Indonesia, gunakan fungsi Synproxy, dan kalau ada IP yang mencoba melakukan DOS, maka masukkan IP itu ke daftar abusive_hosts serta putuskan koneksinya.
Serangan yang di cegah dengan konfigurasi ini:
pass in on $ext_if inet proto tcp from 64.41.200.0/24 to $ext_if \
port 443
Izinkan koneksi dari SSL Lab untuk melakukan test konfigurasi TLS server kita. Bagian ini tidak mesti, hanya merupakan saran saja.
block return in on ! lo0 proto tcp to port 6000:6010
Tolak koneksi remote ke port 6000 sampai 6010
block return out log proto {tcp udp} user _pbuild
User _pbuild tidak perlu koneksi internet. Baris ini sebenarnya tidak diperlukan, karena firewall ini sudah di setting untuk default deny, yaitu semua di block kecuali yang di izinkan.
Kemudian, table abusive_hosts diatas perlu di clear setiap 3 (tiga) menit sekali, yang mana saya menggunakan root cron untuk keperluan itu.
*/3 * * * * /bin/sh /root/flush.sh
Adapun isi file flush.sh adalah sebagai berikut:
/sbin/pfctl -t abusive_hosts -T show >> /home/muntaza/daftar
/sbin/pfctl -t abusive_hosts -T flush 1>> /home/muntaza/daftar \
2>> /home/muntaza/daftar
Maknanya, masukkan daftar yang ada saat ini di table abusive_hosts ke file /home/muntaza/daftar, lalu hapus isi daftar abusive_hosts.
Tanya Jawab
-
Bagaimana cara reload konfigurasi pf setelah saya mengedit file /etc/pf.conf?
Jawab:
$ doas /sbin/pfctl -f /etc/pf.conf
Alhamdulillah
Sekian Penjelasan tentang contoh implementasi OpenBSD Packet Filter ini, semoga bermanfaat.
Muhammad Muntaza
Daftar Pustaka