Meningkatkan Keselamatan untuk FreeBSD Menggunakan IPFW dan SSHGuard

Pelayan VPS sering menjadi sasaran pengganggu. Jenis serangan yang biasa muncul dalam log sistem kerana beratus-ratus percubaan masuk ssh yang tidak dibenarkan. Menyiapkan firewall sangat berguna, tetapi dengan sendirinya mungkin tidak dapat mengawal cubaan pencerobohan yang mengganggu.

Tutorial ini menunjukkan cara membina penghalang pencerobohan yang ditingkatkan untuk FreeBSD menggunakan dua program, ipfwfirewall dan sshguard. SSHGuard adalah program tambahan kecil yang memantau log sistem untuk entri "kasar". Apabila pesalah cuba mendapatkan akses, sshguardmemerintahkan ipfwuntuk menyekat lalu lintas yang berasal dari alamat IP pelanggar. Pesalah kemudian ditutup dengan berkesan.

Setelah difahami bagaimana program ini berfungsi, menguruskan perlindungan pelayan cukup mudah. Walaupun panduan ini difokuskan untuk mengkonfigurasi FreeBSD, sebahagiannya digunakan untuk perisian OS dan firewall yang lain.

Langkah 1. Mengkonfigurasi IPFW

FreeBSD menyediakan 3 firewall pada GENERICkernel, ( ipfw,) pf, dan ipfilter. Masing-masing mempunyai kelebihan dan peminat, tetapi ipfwperisian firewall asli FBSD dan cukup mudah digunakan untuk tujuan kami. Perlu diperhatikan bahawa ipfwmelakukan banyak perkara seperti yang ditunjukkan oleh halaman manualnya, namun keupayaan seperti NAT, pembentukan lalu lintas, dan lain-lain, tidak diperlukan untuk situasi VPS yang biasa. Nasib baik, ciri asas firewall dengan mudah memenuhi keperluan kami.

Untuk memulakan firewall pada masa boot, tambahkan yang berikut ke /etc/rc.conf:

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

The servicearahan boleh didapati untuk memulakan / menghentikan firewall secara manual:

[user@vultr ~]$ sudo service ipfw start

Secara semula jadi, ipfwtidak akan melakukan apa-apa sehingga menambah peraturan, selalunya dari fail, dalam contoh ini yang terletak di /usr/local/etc/IPFW.rules. Fail peraturan sebenarnya dapat terletak di mana saja atau memiliki nama apa pun, asalkan sesuai dengan parameter "firewall_script". Fail peraturan dijelaskan secara terperinci di bawah.

Langkah 2. Pasang dan konfigurasikan SSHGuard

sshguardterdapat dalam beberapa perisa untuk digunakan dengan firewall yang berbeza. Gunakan pkgutiliti untuk mengambil dan memasang sshguard-ipfw:

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

Dalam kebanyakan kes, semua itu perlu dilakukan. Pemboleh ubah yang sesuai dimasukkan secara automatik /etc/rc.confuntuk memulakan boot up:

sshguard_enable="YES"

Lalai biasanya berfungsi dengan baik. Sekiranya nilai yang berbeza diperlukan, sshguardhalaman manual memberikan maklumat terperinci mengenai 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 boleh memulakan sshguarddengan servicepermintaan biasa :

[user@vultr ~]$ sudo service sshguard start

Langkah 3. Buat skrip peraturan

Bahagian yang paling sukar ialah membuat peraturan peraturan firewall. ipfwdapat menggunakan /etc/rc.firewallskrip yang disediakan , tetapi harus dimodifikasi untuk mengakomodasi SSHGuard, serta senario operasi yang berbeza. Sejumlah halaman web dan Panduan FreeBSD mempunyai maklumat berguna untuk melakukan ini. Walau bagaimanapun, menulis fail peraturan tidak begitu sukar, selain itu, set peraturan khusus dapat lebih mudah difahami dan diubah bila perlu.

Ciri penting ipfwperaturan adalah bahawa perlawanan pertama menang yang bermaksud urutan peraturan adalah penting. Dalam ipfw, setiap aturan adalah perintah, dan file aturan adalah skrip shell yang dapat dijalankan. Yang memungkinkan kumpulan peraturan diubah dengan mengubah peraturan kemudian menjalankan file aturan sebagai skrip shell:

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

Secara umum, file aturan akan menentukan variabel untuk ipfwperintah, kemudian membersihkan peraturan saat ini, mengeluarkan peraturan umum, kemudian lanjutkan untuk menetapkan peraturan "keluar", diikuti dengan aturan "dalam". Halaman manual ipfw dan sumber lain mengandungi banyak maklumat mengenai struktur peraturan dan pilihan yang paling sedikit.

Sejak versi sshguard FreeBSD telah dikemas kini ke versi 1.6.2, kaedah memasukkan peraturan menyekat untuk pesalah telah berubah. Sekarang alamat pesalah disimpan dalam jadual ipfw (jadual 22 menjadi spesifik), daripada dimasukkan ke dalam peraturan di atas 55000 seperti sebelumnya.

Nasib baik, cukup mudah untuk menyediakan fail peraturan untuk menggunakan jadual. Ini hanya masalah meletakkan peraturan jadual di tempat yang betul, dan memastikan untuk menggunakan sintaks yang betul semasa menulis peraturan.

Apabila sshguardmenjumpai pelaku, ia memasukkan alamat pesalah ke dalam senarai hitamnya, dan juga memasukkan alamat tersebut ke dalam ipfwjadual sehingga akan "mencetuskan" penolakan akses. Peraturan ini akan memenuhi tujuan ini:

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

Masih perlu untuk meletakkan peraturan yang membenarkan perkhidmatan masuk melebihi 01000 dalam kes ini. Sebagai contoh, katakan alamat 10.20.30.40adalah pesalah dalam jadual 22, dan kita mempunyai peraturan ipfw ini:

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

Sejak ipfwpertemuan memerintah 01000 sebelum peraturan 56.420 , 10.20.30.40adalah disekat . Sama sekali tidak akan dapat dilihat oleh peraturan "allow 22 in". Sekiranya peraturan membenarkan mempunyai nombor "biasa" seperti 00420 , lalu lintas yang buruk akan dilepaskan dan tidak akan disekat (kerana 00420 kurang dari 01000 dan "kemenangan pertandingan pertama").

Ciri bagus dari versi yang dikemas kini ialah sekarang apabila sshguard memulakan semua alamat dalam senarai hitam ditambahkan ke meja dan tersedia untuk menyekat pesalah masuk tanpa berlengah. Senarai hitam adalah kumulatif dan disimpan antara sesi.

Pada ketika ini mungkin masuk akal untuk menunjukkan ipfwset peraturan lengkap yang diubah suai sshguard. Komen itu semestinya cukup mudah untuk mengikuti logika peraturan:

#!/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. Permulaan dan ujian

Keperluan sistem berbeza-beza dan pilihan pelabuhan yang berbeza untuk disekat atau dibebaskan ditunjukkan dalam peraturan. Setelah peraturan selesai, simpan fail ke /usr/local/etc/IPFW.rules, dan mulakan perkhidmatan FBSD:

 # service ipfw start
 # service sshguard start

Firewall tambahan kini harus berjalan! Periksa sshguard:

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

Sekiranya sshguardberjalan, baris perintah pid dan penuhnya akan dipaparkan:

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 kumpulan peraturan firewall dengan statistik dan kali terakhir paket sesuai dengan peraturan:

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

Selepas berjam-jam atau hari, alamat pesalah ditambahkan ke senarai hitam dan juga jadual 22. Untuk melihat semua alamat dalam jadual, gunakan arahan ini:

ipfw table 22 list

Hasilnya dicetak sebagai:

10.10.10.118/32 0
10.10.10.72/32 0
...

Seperti yang dijelaskan di atas, sambungan dari alamat ini tidak diizinkan. Sudah tentu, pada pertama kali berjalan sshguardtidak akan ada alamat dalam senarai, tetapi lama-kelamaan ia akan menjadi agak panjang. Salah satu pilihan adalah membuat peraturan penyekat yang berasingan untuk alamat dengan banyak entri dalam jadual dan kemudian menghapusnya dari senarai hitam.

Langkah 5. Berjaga-jaga ...

Sebaiknya periksa log sesekali untuk memastikan gangguan dikawal. Secara amnya, /var/log/auth.logdan /var/log/securitybersifat maklumat. Jurang atau kesalahan dalam meliputi perkhidmatan rangkaian mungkin menjadi jelas. Mengubah set peraturan firewall mengikut keperluan adalah bahagian biasa dalam pentadbiran pelayan.

Dalam versi sshguard sebelumnya, ketika /var/db/sshguard/blacklist.dbfile telah berkembang besar, ia dapat mencegah sshguarddari memulai boot sistem. Membuang atau menamakan semula fail senarai hitam yang dibenarkan sshguardbermula. Masalah ini nampaknya diperbaiki dalam versi sshguard terkini, jadi penyelesaian ini mungkin tidak diperlukan lagi.

Pastikan untuk menyenaraikan Alamat IP dari mana anda disambungkan ke Sesi SSH. Sekiranya anda mengunci diri secara tidak sengaja, anda sentiasa boleh menyambung ke Konsol noVNC di https://my.vultr.com dan memasukkan IP anda ke dalam senarai putih.

Menyimpulkan, menggunakan kombinasi ipfwdan sshguardmembantu menjaga sistem FreeBSD anda selamat dan menjalankan tugasnya. Meminimumkan aktiviti rangkaian mengganggu mempunyai faedah tambahan: kurang "bising" menjadikannya lebih mudah untuk mengesan dan menyesuaikan operasi sistem, menyumbang kepada pelayan yang lebih selamat dan berfungsi dengan lebih baik.

Melindungi sistem / pelayan FreeBSD secara berkesan tidak terlalu rumit. Walaupun usaha sederhana diperlukan untuk membuatnya berjalan, ia akan menghasilkan VPS dan keselamatan projek yang jauh lebih besar.


Tags: #BSD #Security

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

Ramai daripada anda tahu Switch akan keluar pada Mac 2017 dan ciri baharunya. Bagi yang tidak tahu, kami telah menyediakan senarai ciri yang menjadikan 'Tukar' sebagai 'gajet yang mesti ada'.

Janji Teknologi Yang Masih Tidak Ditepati

Janji Teknologi Yang Masih Tidak Ditepati

Adakah anda menunggu gergasi teknologi memenuhi janji mereka? semak apa yang masih belum dihantar.

Fungsi Lapisan Seni Bina Rujukan Data Besar

Fungsi Lapisan Seni Bina Rujukan Data Besar

Baca blog untuk mengetahui lapisan berbeza dalam Seni Bina Data Besar dan fungsinya dengan cara yang paling mudah.

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Baca ini untuk mengetahui cara Kecerdasan Buatan semakin popular di kalangan syarikat berskala kecil dan cara ia meningkatkan kebarangkalian untuk menjadikan mereka berkembang dan memberikan pesaing mereka kelebihan.

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA telah menjadi agak sukar untuk diselesaikan oleh pengguna dalam beberapa tahun kebelakangan ini. Adakah ia dapat kekal berkesan dalam pengesanan spam dan bot pada masa hadapan?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Apabila Sains Berkembang pada kadar yang pantas, mengambil alih banyak usaha kita, risiko untuk menundukkan diri kita kepada Ketunggalan yang tidak dapat dijelaskan juga meningkat. Baca, apakah makna ketunggalan bagi kita.

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Apakah teleperubatan, penjagaan kesihatan jauh dan impaknya kepada generasi akan datang? Adakah ia tempat yang baik atau tidak dalam situasi pandemik? Baca blog untuk mencari paparan!

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Anda mungkin pernah mendengar bahawa penggodam memperoleh banyak wang, tetapi pernahkah anda terfikir bagaimana mereka memperoleh wang seperti itu? Mari berbincang.

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Baru-baru ini Apple mengeluarkan macOS Catalina 10.15.4 kemas kini tambahan untuk menyelesaikan masalah tetapi nampaknya kemas kini itu menyebabkan lebih banyak masalah yang membawa kepada pemusnahan mesin mac. Baca artikel ini untuk mengetahui lebih lanjut