Meningkatkan Keamanan untuk FreeBSD Menggunakan IPFW dan SSHGuard

Server VPS sering ditargetkan oleh penyusup. Jenis serangan yang umum muncul dalam log sistem ketika ratusan upaya login ssh tidak sah. Menyiapkan firewall sangat berguna, tetapi dengan sendirinya mungkin tidak cukup mengontrol upaya intrusi yang mengganggu.

Tutorial ini menunjukkan bagaimana membangun penghalang intrusi yang ditingkatkan untuk FreeBSD menggunakan dua program, ipfwfirewall dan sshguard. SSHGuard adalah program tambahan kecil yang memonitor log sistem untuk entri "kasar". Ketika pelaku berusaha mendapatkan akses, sshguarddiinstruksikan ipfwuntuk memblokir lalu lintas yang berasal dari alamat IP pelaku. Pelaku kemudian secara efektif ditutup.

Setelah memahami cara kerja program ini, mengelola perlindungan server cukup sederhana. Meskipun panduan ini difokuskan untuk mengkonfigurasi FreeBSD, beberapa bagiannya berlaku untuk OS dan perangkat lunak firewall lainnya.

Langkah 1. Mengkonfigurasi IPFW

FreeBSD menyediakan 3 firewall di nya default ( GENERICkernel), ipfw, pf, dan ipfilter. Masing-masing memiliki kelebihan dan penggemar, tetapi ipfwmerupakan perangkat lunak firewall asli FBSD dan cukup mudah digunakan untuk keperluan kita. Perlu dicatat bahwa ipfwmelakukan banyak hal seperti yang ditunjukkan halaman manualnya, namun kemampuan seperti NAT, traffic traffic, dll., Tidak diperlukan untuk situasi VPS yang khas. Untungnya, fitur dasar firewall dengan mudah memenuhi persyaratan kami.

Untuk memulai firewall saat boot up, tambahkan yang berikut ke /etc/rc.conf:

firewall_enable="YES"
firewall_script="/usr/local/etc/IPFW.rules"
firewall_logging="YES"

The serviceperintah tersedia untuk memulai / menghentikan firewall secara manual:

[user@vultr ~]$ sudo service ipfw start

Secara alami, ipfwtidak akan melakukan apa pun sampai ia menambahkan aturan, sering dari file, dalam contoh ini terletak di /usr/local/etc/IPFW.rules. File aturan sebenarnya bisa ditemukan di mana saja atau memiliki nama apa saja, asalkan cocok dengan parameter "firewall_script". File aturan dijelaskan secara rinci di bawah ini.

Langkah 2. Instal dan konfigurasikan SSHGuard

sshguardhadir dalam beberapa rasa untuk digunakan dengan firewall yang berbeda. Gunakan pkgutilitas untuk mengambil dan menginstal sshguard-ipfw:

[user@vultr ~]$ sudo pkg install sshguard-ipfw

Dalam kebanyakan kasus hanya itu yang perlu dilakukan seseorang. Variabel yang sesuai secara otomatis dimasukkan ke dalam /etc/rc.confuntuk mulai saat boot up:

sshguard_enable="YES"

Standarnya biasanya bekerja dengan baik. Jika diperlukan nilai yang berbeda, sshguardhalaman manual memberikan info terperinci tentang parameter:

# sshguard--program defaults, so don't need to be in rc.conf unless assigning different value
# sshguard_pidfile="/var/run/sshguard.pid"
# sshguard_watch_logs="/var/log/auth.log:/var/log/mail"
# sshguard_blacklist="40:/var/db/sshguard/blacklist.db"
# sshguard_safety_thresh="40"
# sshguard_pardon_min_interval="420"
# sshguard_prescribe_interval="1200"

Anda dapat mulai sshguarddengan servicedoa biasa :

[user@vultr ~]$ sudo service sshguard start

Langkah 3. Buat skrip aturan

Bagian tersulit adalah membuat aturan firewall. ipfwdapat menggunakan /etc/rc.firewallskrip yang disediakan , tetapi harus dimodifikasi untuk mengakomodasi SSHGuard, serta skenario operasional yang berbeda. Sejumlah halaman web dan FreeBSD Manual memiliki informasi berguna tentang melakukan ini. Namun, menulis file aturan tidak terlalu sulit, selain itu, aturan kustom dapat lebih mudah dipahami dan diubah bila perlu.

Fitur ipfwaturan yang penting adalah pertandingan pertama yang menang yang berarti aturan aturan itu penting. Dalam ipfw, setiap aturan adalah perintah, dan file aturan adalah skrip shell yang dapat dieksekusi. Itu memungkinkan set aturan diubah dengan mengubah aturan lalu menjalankan file aturan sebagai skrip shell:

[user@vultr /usr/local/etc]$ sudo ./IPFW.rules

Secara umum, file aturan akan menentukan variabel untuk ipfwperintah, lalu menghapus aturan saat ini, mengeluarkan aturan umum, kemudian melanjutkan untuk menetapkan aturan "keluar", diikuti oleh aturan "dalam". Halaman buku panduan ipfw dan sumber daya lainnya mengandung banyak informasi tentang struktur aturan dan opsi yang banyak sedikitnya.

Karena versi sshguard FreeBSD telah diperbarui ke versi 1.6.2, metode memasukkan aturan pemblokiran untuk pelaku telah berubah. Sekarang alamat pelaku disimpan dalam tabel ipfw (tabel 22 lebih spesifik), daripada dimasukkan ke dalam aturan di atas 55000 seperti sebelumnya.

Untungnya, cukup mudah untuk mengatur file aturan untuk menggunakan tabel. Ini hanya masalah menempatkan aturan tabel di tempat yang tepat, dan memastikan untuk menggunakan sintaks yang benar saat menulis aturan.

Ketika sshguardmenemukan pelaku, ia memasukkan alamat pelaku ke dalam daftar hitamnya, dan juga memasukkan alamat itu ke dalam ipfwtabel sehingga akan "memicu" penolakan akses. Aturan ini akan mencapai tujuan ini:

01000 deny ip from table\(22\) to any

Masih perlu untuk menetapkan aturan yang memungkinkan layanan masuk di atas 01000 dalam kasus ini. Misalnya, misalkan alamat 10.20.30.40adalah pelaku di tabel 22, dan kami memiliki aturan ipfw ini:

56420 allow tcp from any to me dst-port 22 in via $vif

Sejak ipfwpertemuan memerintah 01000 sebelum aturan 56.420 , 10.20.30.40yang diblokir . Itu tidak akan pernah terlihat oleh aturan "izinkan 22 dalam" sama sekali. Jika aturan perbolehkan memiliki nomor "reguler" seperti 00420 , lalu lintas yang buruk akan dibiarkan masuk dan tidak pernah diblokir (karena 00420 kurang dari 01000 dan "pertandingan pertama menang").

Fitur bagus dari versi yang diperbarui adalah sekarang ketika sshguard memulai semua alamat dalam daftar hitam ditambahkan ke tabel dan tersedia untuk memblokir pelanggar yang masuk tanpa penundaan. Daftar hitam bersifat kumulatif dan dipertahankan di antara sesi.

Pada titik ini mungkin masuk akal untuk menunjukkan ipfwaturan lengkap yang dimodifikasi sshguard. Komentar harus membuatnya cukup mudah untuk mengikuti logika aturan:

#!/bin/sh

# ipfw config/rules
# from FBSD Handbook, rc.firewall, et. al.

# Flush all rules before we begin.
ipfw -q -f flush

# Set rules command prefix
cmd="ipfw -q add "

vif="vtnet0"

# allow all for localhost
$cmd 00010 allow ip from any to any via lo0

# checks stateful rules.  If marked as "keep-state" the packet has
# already passed through filters and is "OK" without futher
# rule matching
$cmd 00101 check-state

# allow DNS out
$cmd 00110 allow tcp from me to any dst-port 53 out via $vif setup keep-state
$cmd 00111 allow udp from me to any dst-port 53 out via $vif keep-state

# allow dhclient connection out (port numbers are important)
$cmd 00120 allow udp from me 68 to any dst-port 67 out via $vif keep-state

# allow HTTP HTTPS replies
$cmd 00200 allow tcp from any to any dst-port 80 out via $vif setup keep-state
$cmd 00220 allow tcp from any to any dst-port 443 out via $vif setup keep-state

# allow outbound mail
$cmd 00230 allow tcp from any to any dst-port 25 out via $vif setup keep-state
$cmd 00231 allow tcp from any to any dst-port 465 out via $vif setup keep-state
$cmd 00232 allow tcp from any to any dst-port 587 out via $vif setup keep-state

# allow icmp re: ping, et. al. 
# comment this out to disable ping, et.al.
$cmd 00250 allow icmp from any to any out via $vif keep-state

# alllow timeserver out
$cmd 00260 allow tcp from any to any dst-port 37 out via $vif setup keep-state

# allow ntp out
$cmd 00270 allow udp from any to any dst-port 123 out via $vif keep-state

# allow outbound SSH traffic
$cmd 00280 allow tcp from any to any dst-port 22 out via $vif setup keep-state

# otherwise deny outbound packets
# outbound catchall.  
$cmd 00299 deny log ip from any to any out via $vif

# inbound rules
# deny inbound traffic to restricted addresses
$cmd 00300 deny ip from 192.168.0.0/16 to any in via $vif
$cmd 00301 deny ip from 172.16.0.0/12 to any in via $vif
$cmd 00302 deny ip from 10.0.0.0/8 to any in via $vif
$cmd 00303 deny ip from 127.0.0.0/8 to any in via $vif
$cmd 00304 deny ip from 0.0.0.0/8 to any in via $vif
$cmd 00305 deny ip from 169.254.0.0/16 to any in via $vif
$cmd 00306 deny ip from 192.0.2.0/24 to any in via $vif
$cmd 00307 deny ip from 204.152.64.0/23 to any in via $vif
$cmd 00308 deny ip from 224.0.0.0/3 to any in via $vif

# deny inbound packets on these ports
# auth 113, netbios (services) 137/138/139, hosts-nameserver 81 
$cmd 00315 deny tcp from any to any dst-port 113 in via $vif
$cmd 00320 deny tcp from any to any dst-port 137 in via $vif
$cmd 00321 deny tcp from any to any dst-port 138 in via $vif
$cmd 00322 deny tcp from any to any dst-port 139 in via $vif
$cmd 00323 deny tcp from any to any dst-port 81 in via $vif

# deny partial packets
$cmd 00330 deny ip from any to any frag in via $vif
$cmd 00332 deny tcp from any to any established in via $vif

# allowing icmp re: ping, etc.
$cmd 00310 allow icmp from any to any in via $vif

# allowing inbound mail, dhcp, http, https
$cmd 00350 allow udp from any 53 to me in via $vif
$cmd 00360 allow tcp from any 53 to me in via $vif
$cmd 00370 allow udp from any 67 to me dst-port 68 in via $vif keep-state

$cmd 00400 allow tcp from any to me dst-port 80 in via $vif setup limit src-addr 2
$cmd 00410 allow tcp from any to me dst-port 443 in via $vif setup limit src-addr 2

# SSHguard puts offender addresses in table 22. Set up the table rule
# Please note the '\(22\)' syntax, necessary since it's run as shell command
$cmd 01000 deny ip from table\(22\) to any

# allow inbound ssh, mail. PROTECTED SERVICES: numbered ABOVE sshguard blacklist range 
$cmd 56420 allow tcp from any to me dst-port 22 in via $vif setup limit src-addr 2
$cmd 56530 allow tcp from any to any dst-port 25 in via $vif setup keep-state
$cmd 56531 allow tcp from any to any dst-port 465 in via $vif setup keep-state
$cmd 56532 allow tcp from any to any dst-port 587 in via $vif setup keep-state

# deny everything else, and log it
# inbound catchall
$cmd 56599 deny log ip from any to any in via $vif

# ipfw built-in default, don't uncomment
# $cmd 65535 deny ip from any to any

Langkah 4. Memulai dan menguji

Kebutuhan sistem beragam dan pilihan port yang berbeda untuk diblokir atau diblokir dicerminkan dalam aturan. Setelah aturan selesai, simpan file ke /usr/local/etc/IPFW.rules, dan mulai layanan FBSD:

 # service ipfw start
 # service sshguard start

Firewall yang diperbesar sekarang seharusnya sedang berjalan! Periksa sshguard:

 [user@vultr ~]$ sudo pgrep -lfa ssh

Jika sshguardsedang berjalan, pid dan baris perintah lengkapnya ditampilkan:

720 /usr/local/sbin/sshguard -b 40:/var/db/sshguard/blacklist.db -l /var/log/auth.log -l /var/log/maillog -a 40 -p 420 -s 1200 -w /usr/local/etc/sshguard.whitelist -i /var/run/sshguard.pid

Ini menunjukkan aturan firewall dengan statistik dan terakhir kali paket cocok dengan aturan:

 [user@vultr ~]$ sudo ipfw -cat list

Setelah berjam-jam atau berhari-hari, alamat pelanggar ditambahkan ke daftar hitam dan juga tabel 22. Untuk melihat semua alamat dalam tabel, gunakan perintah ini:

ipfw table 22 list

Hasilnya dicetak sebagai:

10.10.10.118/32 0
10.10.10.72/32 0
...

Seperti dijelaskan di atas, koneksi dari alamat ini tidak diizinkan. Tentu saja, saat pertama kali menjalankan sshguardtidak akan ada alamat dalam daftar, tetapi seiring waktu bisa jadi agak lama. Salah satu opsi adalah membuat aturan pemblokiran terpisah untuk alamat dengan banyak entri dalam tabel dan kemudian menghapusnya dari daftar hitam.

Langkah 5. Tetap waspada ...

Sebaiknya sesekali periksa log untuk memastikan intrusi terkontrol. Secara umum, /var/log/auth.logdan /var/log/securityinformatif. Kesenjangan atau kesalahan dalam mencakup layanan jaringan mungkin menjadi jelas. Mengubah aturan firewall sesuai kebutuhan adalah bagian normal dari administrasi server.

Dalam versi sshguard sebelumnya, ketika /var/db/sshguard/blacklist.dbfile telah tumbuh besar, itu bisa mencegah sshguardmemulai boot sistem. Menghapus atau mengganti nama file daftar hitam diizinkan sshguarduntuk memulai. Masalah ini tampaknya diperbaiki dalam versi sshguard terbaru, jadi solusi ini mungkin tidak lagi diperlukan.

Pastikan untuk memasukkan daftar putih IP Address yang Anda sambungkan ke Sesi SSH. Jika Anda secara tidak sengaja mengunci diri, Anda selalu dapat terhubung ke Konsol noVNC di https://my.vultr.com dan memasukkan daftar putih IP Anda.

Ringkasnya, menggunakan kombinasi ipfwdan sshguardmembantu menjaga sistem FreeBSD Anda aman dan melakukan tugasnya. Meminimalkan aktivitas jaringan yang mengganggu memiliki manfaat tambahan: lebih sedikit "noise" membuatnya lebih mudah untuk melacak dan menyelaraskan operasi sistem, berkontribusi pada server yang lebih aman dan berjalan lebih baik.

Secara efektif melindungi sistem / server FreeBSD tidak terlalu rumit. Meskipun upaya sederhana diperlukan untuk mengaktifkan dan menjalankannya, ini menghasilkan VPS yang jauh lebih besar dan keamanan proyek.


Tags: #BSD #Security

Leave a Comment

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

6 Hal yang Sangat Menggila dari Nintendo Switch

6 Hal yang Sangat Menggila dari Nintendo Switch

Banyak dari Anda tahu Switch keluar pada Maret 2017 dan fitur-fitur barunya. Bagi yang belum tahu, kami sudah menyiapkan daftar fitur yang membuat 'Switch' menjadi 'gadget yang wajib dimiliki'.

Janji Teknologi Yang Masih Belum Ditepati

Janji Teknologi Yang Masih Belum Ditepati

Apakah Anda menunggu raksasa teknologi untuk memenuhi janji mereka? periksa apa yang belum terkirim.

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Baca blog untuk mengetahui berbagai lapisan dalam Arsitektur Big Data dan fungsinya dengan cara yang paling sederhana.

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Baca ini untuk mengetahui bagaimana Kecerdasan Buatan menjadi populer di antara perusahaan skala kecil dan bagaimana hal itu meningkatkan kemungkinan untuk membuat mereka tumbuh dan memberi keunggulan pada pesaing mereka.

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA telah berkembang cukup sulit bagi pengguna untuk dipecahkan dalam beberapa tahun terakhir. Apakah itu akan tetap efektif dalam deteksi spam dan bot di masa mendatang?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Saat Sains Berkembang dengan kecepatan tinggi, mengambil alih banyak upaya kita, risiko menundukkan diri kita pada Singularitas yang tidak dapat dijelaskan juga meningkat. Baca, apa arti singularitas bagi kita.

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Apa itu telemedicine, perawatan kesehatan jarak jauh dan dampaknya terhadap generasi mendatang? Apakah itu tempat yang bagus atau tidak dalam situasi pandemi? Baca blog untuk menemukan tampilan!

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Anda mungkin pernah mendengar bahwa peretas menghasilkan banyak uang, tetapi pernahkah Anda bertanya-tanya bagaimana cara mereka mendapatkan uang sebanyak itu? mari berdiskusi.

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Baru-baru ini Apple merilis macOS Catalina 10.15.4 pembaruan suplemen untuk memperbaiki masalah tetapi tampaknya pembaruan menyebabkan lebih banyak masalah yang mengarah ke bricking mesin mac. Baca artikel ini untuk mempelajari lebih lanjut