pengantar
Ada banyak artikel tentang pengaturan FreeBSD dan PF di Runet, tetapi semuanya tersebar dan tidak sistematis. Dan untuk hal-hal yang kurang lebih menarik, seperti perutean melalui firewall (Perutean Berbasis Kebijakan), Anda harus membaca dokumentasi asli, misalnya, FAQ PF OpenBSD . Namun, terdapat perbedaan dalam sintaks perintah untuk FreeBSD dan OpenBSD. Dalam rangkaian artikel ini, kami mencoba mensistematisasikan dan menganalisis kapabilitas PF dari yang sederhana hingga yang kompleks. Yang pasti, artikel pengantar ini akan serupa dengan semua artikel lain tentang Filter Paket. Oleh karena itu, mereka yang sudah terbiasa dengan fitur dasar tidak akan tertarik. Namun, seseorang tidak dapat melakukannya tanpa pengantar, dan dagingnya akan ada di artikel berikut.
PF - Packet Filter adalah firewall yang awalnya dibuat oleh proyek OpenBSD. Di-porting ke FreeBSD pada tahun 2003. Pada tahun 2004 itu diintegrasikan ke dalam sistem utama. Fitur utama:
- Pemfilteran berdasarkan alamat, port, protokol, antarmuka
- NAT - Sumber NAT, substitusi alamat pengirim. Nat tujuan, spoofing alamat penerima, penerusan port
- Scrub - normalisasi lalu lintas jaringan. Membantu dengan beberapa jenis serangan dos berdasarkan pembentukan paket yang disiapkan secara khusus
- SYN-proxy - Perlindungan terhadap serangan SYN-flood
- Menyeimbangkan koneksi
- â pfcync , , CARP, ,
- ( IP-, 2 )
- â
- â IP
- â ,
- (anchors) â , IPTables Linux
- pfstat
Perbedaan utama dari IPTables yang sama adalah skema kerja yang tidak biasa. Pemrosesan kelompok tidak berakhir setelah aturan pertama cocok. Artinya, jika Anda menetapkan aturan pertama untuk "menolak semuanya" , maka paket tidak akan dibuang, tetapi akan ditandai sebagai terlarang, akan melangkah lebih jauh sesuai aturan, dan jika tidak ada aturan yang mengizinkannya, paket akan dibuang . Ini penting untuk dipahami dan digunakan. Namun, jika diinginkan, perilaku ini dapat diganti dengan parameter cepat di aturan.
Manajemen dan perintah yang membantu
Untuk mengaktifkan PF, cukup menentukan opsi di file "/etc/rc.conf":
pf_enable="YES" # pf pf_flags="" # pfctl pf_rules="/etc/pf.conf" # pflog_enable="YES" # pflog pflog_flags="" # pflog pflog_logfile="/var/log/pflog" #
Perintah firewall dasar:
pfctl - # Aktifkan firewall
pfctl -d # Nonaktifkan firewall
pfctl -nf # Periksa sintaks file
pfctl -f # Baca ulang aturan dari file
pfctl -Rf # Baca ulang aturan filter dari file
pfctl -Nf # Baca ulang aturan NAT dari file
pfctl -sa # Lihat semua status
pfctl -s # Lihat aturan pemfilteran
pfctl -sn # Lihat aturan NAT
pfctl -s Jangkar -v # Lihat pohon jangkar
pfctl -ss # Lihat koneksi saat ini
Struktur file konfigurasi dan pengaturan dasar
File konfigurasi terdiri dari beberapa bagian:
- Makro
- Tabel
- Pilihan
- Aturan normalisasi lalu lintas (scrub)
- Antrian, prioritas dan kontrol kecepatan
- Terjemahan alamat NAT
- Pemfilteran paket
Aturan umumnya memiliki sintaks berikut:
action [direction] [log] [quick] [on interface] [af] [proto protocol] [from src_addr [port src_port]] [to dst_addr [port dst_port]] [flags tcp_flags] [state]
tindakan - apa yang harus dilakukan dengan
arah paket - keluar, arah
log - apakah paket akan masuk ke pflog dengan
cepat - jika paket berada di bawah aturan ini, maka tidak akan ada pemrosesan lebih lanjut. Aturan ini akan menjadi yang terakhir untuk paket
antarmuka - nama antarmuka jaringan
af - alamat keluarga, inet atau inet6, IPv4 atau IPv6, masing-masing
protokol - protokol lapisan 4, misalnya: tcp, udp, icmp
scr_addr, dst_addr - sumber dan
alamat tujuan src_port, dst_port -
tcp_flags ports - tcp flags
negara - opsi untuk menyimpan negara. Misalnya, status pertahankan berarti bahwa koneksi disimpan dalam tabel status dan paket balasan dapat dilalui. Perilaku default.
Ambil server web paling sederhana dalam ruang hampa. Diperlukan untuk membuka koneksi masuk pada port tcp 22, 80, 443 (ssh, http, https). Anda juga perlu membuka koneksi keluar pada port tcp 22, 80, 443 (ssh, http, https) dan udp 53, 123 (dns dan ntp). Larang yang lainnya.
# ee pf.conf #macros section permit_tcp_ports="22,80,443" permit_udp_ports="53,123" #table section # #options section set block-policy return # , set skip on lo0 # , #scrub section scrub in all # #Queueing section # #nat section # , #filtering section block all # , , . pass in proto tcp to port { $permit_tcp_ports } # pass out proto tcp to port { $permit_tcp_ports } # tcp pass out proto udp to port { $permit_udp_ports } # udp pass out inet proto icmp # icmp
Kemudian kita masukkan perintah syntax check:
pfctl -nf pf.conf
Jika tidak ada pesan error, masukkan perintah untuk menerapkan aturan:
pfctl -f pf.conf
Untuk memeriksa, mari kita lihat aturan pemfilteran:
# pfctl -sr scrub in all fragment reassemble block return all pass out proto tcp from any to any port = ssh flags S/SA keep state pass out proto tcp from any to any port = http flags S/SA keep state pass out proto tcp from any to any port = https flags S/SA keep state pass out proto udp from any to any port = domain keep state pass out proto udp from any to any port = ntp keep state pass out inet proto icmp all keep state pass in proto tcp from any to any port = ssh flags S/SA keep state pass in proto tcp from any to any port = http flags S/SA keep state pass in proto tcp from any to any port = https flags S/SA keep state
Seperti yang Anda lihat, makro diperluas menjadi aturan terpisah untuk setiap port, urutan diubah secara otomatis. Jika tidak, semuanya sebagaimana mestinya.
Hasil
Kami menemukan apa itu Filter Paket, mempelajari fitur utamanya. Mengetahui struktur konfigurasi PF dan bagian utamanya. Kami membuat konfigurasi paling sederhana, yang, bagaimanapun, cukup fungsional, termasuk makro, normalisasi paket dan pemfilteran paket masuk dan keluar. Di artikel berikutnya, kita akan melihat lebih dekat pada aturan pemfilteran, manajemen negara, dan bendera.
Solusi kami, Server Kontrol Internet, adalah gateway keamanan yang dibangun di atas FreeBSD. Sistem ini dipilih karena stabilitasnya, kecepatan tumpukan jaringan, dukungan ZFS bawaan pada kernel, dan kurangnya masalah lisensi. Selain itu, bekerja dengan FreeBSD menyenangkan, meskipun tidak langsung. Tetapi kami akan dengan senang hati berbagi pengalaman ini dengan Anda!