IPFW ve SSHGuard Kullanarak FreeBSD İçin Güvenliği Artırma

VPS sunucuları sık sık davetsiz misafirler tarafından hedeflenir. Yüzlerce yetkisiz ssh giriş denemesi olarak sistem günlüklerinde yaygın bir saldırı türü görülür. Bir güvenlik duvarı oluşturmak çok yararlıdır, ancak kendi başına yıkıcı saldırı girişimlerini yeterince kontrol edemeyebilir.

Bu öğretici şov nasıl bir inşa etmek geliştirilmiş izinsiz bariyerini iki program kullanılarak FreeBSD için ipfwgüvenlik duvarı ve sshguard. SSHGuard "kötüye kullanım" girişleri için sistem günlüklerini izleyen küçük bir eklenti programıdır. Suçlular erişim elde etmeye çalıştığında , suçlunun IP adresinden kaynaklanan trafiği engelleme sshguardtalimatı ipfwverir. Suçlu daha sonra etkili bir şekilde kapatılır.

Bu programların nasıl çalıştığını anladıktan sonra, sunucu korumasını yönetmek oldukça basittir. Bu kılavuz FreeBSD'yi yapılandırmaya odaklanmış olsa da, bazı bölümleri diğer işletim sistemleri ve güvenlik duvarı yazılımları için geçerlidir.

Adım 1. IPFW'yi yapılandırma

FreeBSD varsayılan (3 duvarları sağlar GENERIC) çekirdek, ipfw, pf, ve ipfilter. Her birinin avantajları ve hayranları vardır, ancak ipfwFBSD'nin yerel güvenlik duvarı yazılımıdır ve bizim amaçlarımız için kullanımı oldukça kolaydır. ipfwMan sayfasının gösterdiği gibi birçok şeyi yaptığını belirtmek gerekir , ancak tipik VPS durumu için NAT, trafik şekillendirme vb. Neyse ki, güvenlik duvarının temel özellikleri gereksinimlerimizi kolayca karşılar.

Güvenlik duvarını önyükleme sırasında başlatmak için aşağıdakileri ekleyin /etc/rc.conf:

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

serviceKomut başlatmak / manuel güvenlik duvarı durdurmak için mevcuttur:

[user@vultr ~]$ sudo service ipfw start

Doğal olarak, ipfwadresinde bulunan bu örnekte, genellikle bir dosyadan kurallar ekleyene kadar hiçbir şey yapmaz /usr/local/etc/IPFW.rules. Kurallar dosyası "firewall_script" parametresiyle eşleştiği sürece herhangi bir yerde bulunabilir veya herhangi bir ada sahip olabilir. Kurallar dosyası aşağıda ayrıntılı olarak açıklanmaktadır.

Adım 2. SSHGuard'ı kurun ve yapılandırın

sshguardfarklı güvenlik duvarlarıyla kullanım için çeşitli tatlar sunar. pkgGetirmek ve yüklemek için yardımcı programı kullanın sshguard-ipfw:

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

Çoğu durumda tek yapmanız gereken budur. /etc/rc.confAçılışta başlamak için uygun değişken otomatik olarak eklenir :

sshguard_enable="YES"

Varsayılan değerler normalde iyi çalışır. Farklı değerler gerekirse sshguardkılavuz sayfası parametreler hakkında ayrıntılı bilgi verir:

# 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"

Her sshguardzamanki serviceçağrı ile başlayabilirsiniz :

[user@vultr ~]$ sudo service sshguard start

3. Adım. Bir kural komut dosyası oluşturun

En zor kısmı güvenlik duvarı kural setini oluşturmaktır. ipfwsağlanan /etc/rc.firewallkomut dosyasını kullanabilir , ancak SSHGuard'ın yanı sıra farklı operasyonel senaryoları da kapsayacak şekilde değiştirilmelidir. Bazı web sayfalarında ve FreeBSD El Kitabı'nda bu konuda yararlı bilgiler bulunur. Bununla birlikte, bir kural dosyası yazmak o kadar da zor değildir, ayrıca, özel bir kural kümesini anlamak ve gerektiğinde değiştirmek daha kolay olabilir.

ipfwKuralların önemli bir özelliği, kural sırasının önemli olduğu anlamına gelen ilk maçın kazanmasıdır . İçinde ipfw, her kural bir komuttur ve kural dosyası yürütülebilir bir kabuk betiğidir. Böylece kurallar değiştirilerek kurallar değiştirilir ve kurallar kabuk komut dosyası olarak çalıştırılır:

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

Genellikle, bir kural dosyası ipfwkomut için bir değişken tanımlar , ardından geçerli kuralları temizler, genel kurallar verir, sonra "dışarı" kurallarını ve ardından "giriş" kurallarını belirlemeye devam eder. İpfw kılavuz sayfası ve diğer kaynaklar, kural yapısı ve seçenekleri hakkında çok az bilgi içeren zengin bilgiler içerir.

FreeBSD sshguard sürümü 1.6.2 sürümüne güncellendiğinden, suçlular için engelleme kuralları ekleme yöntemi değişti. Artık suçluların adresleri, daha önce olduğu gibi 55000'in üzerindeki kurallara eklenmek yerine, bir ipfw tablosunda (spesifik olarak tablo 22) tutulmaktadır.

Neyse ki, tabloyu kullanmak için kural dosyasını ayarlamak oldukça basittir. Bu sadece tablo kuralını doğru yere koymak ve kuralı yazarken doğru sözdizimini kullandığınızdan emin olmaktır.

Bir sshguardsuçlu bulduğunda, suçlunun adresini kara listesine koyar ve adresi ipfwreddederek erişimi reddedecek şekilde tabloya ekler . Bu kural şu ​​amaçlara ulaşacaktır:

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

Bu durumda 01000'in üzerinde gelen hizmetlere izin veren kurallar koymak hala gereklidir . Örneğin, adresin 10.20.30.40tablo 22'de bir suçlu olduğunu varsayalım ve bu ipfw kuralına sahibiz:

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

Yana ipfwkarşılaşmalar kural 01000 önce kural 56420 , 10.20.30.40olduğu bloke . Hiç "22 izin ver" kuralı tarafından görülmez. Kural gibi bir "normal" numarası vardı izin verirseniz 00420 (çünkü kötü trafik içeri ve bloke asla olacağını 00420 den az olan 01000 ve "ilk maç kazanır").

Güncellenmiş sürümün güzel bir özelliği, şimdi sshguard başlatıldığında kara listedeki tüm adreslerin tabloya eklenmesi ve gelen suçluları gecikmeden engellemek için kullanılabilir olmasıdır. Kara liste birikimlidir ve oturumlar arasında tutulur.

Bu noktada büyük olasılıkla ipfwdeğiştirilmiş eksiksiz bir kural kümesi göstermek mantıklıdır sshguard. Yorumlar, kural mantığını takip etmeyi oldukça kolaylaştırmalıdır:

#!/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

4. Adım. Başlatma ve test etme

Sistem gereksinimleri değişiklik gösterir ve engellenecek veya engeli kaldırılacak farklı bağlantı noktası seçenekleri kural kümesine yansıtılır. /usr/local/etc/IPFW.rulesKural kümesi tamamlandıktan sonra, dosyayı kaydedin ve FBSD hizmetlerini başlatın:

 # service ipfw start
 # service sshguard start

Artırılmış güvenlik duvarı şimdi çalışıyor olmalıdır! Kontrol edin sshguard:

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

Eğer sshguardçalışıyorsa, onun pid ve tam komut satırı görüntülenir:

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

Bu, istatistikleri içeren güvenlik duvarı kural kümesini ve bir paketin kurala en son ne zaman eşleştiğini gösterir:

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

Saat veya gün sonra, suçluların adresleri kara listeye ve ayrıca tablo 22'ye eklenir. Tablodaki tüm adresleri görüntülemek için şu komutu kullanın:

ipfw table 22 list

Sonuç şu şekilde yazdırılır:

10.10.10.118/32 0
10.10.10.72/32 0
...

Yukarıda açıklandığı gibi, bu adreslerden gelen bağlantılara izin verilmez. Tabii ki, ilk çalıştırmada sshguardlistede herhangi bir adres olmayacak, ancak zamanla oldukça uzun sürebilir. Bir seçenek, tabloda birden çok girişi olan adresler için ayrı engelleme kuralları oluşturmak ve bunları kara listeden silmektir.

Adım 5. Dikkatli olun ...

Saldırıların kontrol edildiğinden emin olmak için günlükleri kontrol etmek iyi bir fikirdir. Genellikle /var/log/auth.logve /var/log/securitybilgilendiricidir. Ağ hizmetlerini kapsayan boşluklar veya hatalar ortaya çıkabilir. Güvenlik duvarı kural kümesini gerektiği gibi değiştirmek, sunucu yönetiminin normal bir parçasıdır.

Önceki sshguard sürümlerinde, /var/db/sshguard/blacklist.dbdosya büyüdüğünde sshguard, sistem önyüklemesinde başlamayı engelleyebilir . Kara liste dosyasının kaldırılmasına veya yeniden adlandırılmasına izin verilir sshguard. Bu sorun en son sshguard sürümünde giderilmiş gibi görünüyor, bu nedenle bu geçici çözüm artık gerekli değildir.

SSH Oturumuna bağlı olduğunuz IP Adresini beyaz listeye eklediğinizden emin olun. Kendinizi yanlışlıkla kilitlerseniz, https://my.vultr.com adresinden noVNC Konsoluna her zaman bağlanabilir ve IP'nizi beyaz listeye ekleyebilirsiniz.

Özetlemek gerekirse kombinasyonunu kullanarak ipfwve sshguardgüvenli FreeBSD sistem tutmaya yardımcı olur ve görevini yapıyor. Müdahaleci ağ etkinliğini en aza indirmenin ek bir yararı vardır: daha az "gürültü", sistem çalışmasını izlemeyi ve ayarlamayı kolaylaştırır, böylece daha güvenli ve daha iyi çalışan bir sunucuya katkıda bulunur.

Bir FreeBSD sistemini / sunucuyu etkili bir şekilde korumak özellikle karmaşık değildir. Çalıştırmak için mütevazı bir çaba gerekli olsa da, önemli ölçüde daha büyük VPS ve proje güvenliği ile sonuçlanır.


Tags: #BSD #Security

Leave a Comment

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Bilim hızla gelişip birçok çabamızı üstlendikçe, kendimizi açıklanamaz bir Tekilliğe maruz bırakmanın riskleri de artıyor. Okuyun, tekillik bizim için ne anlama gelebilir.

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp, uzaktan sağlık hizmetleri ve gelecek nesiller üzerindeki etkisi nedir? Pandemi durumunda iyi bir yer mi değil mi? Bir görünüm bulmak için blogu okuyun!

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Bilgisayar korsanlarının çok para kazandığını duymuş olabilirsiniz, ancak bu kadar parayı nasıl kazandıklarını hiç merak ettiniz mi? Hadi tartışalım.

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

Son zamanlarda Apple, sorunları gidermek için macOS Catalina 10.15.4'ü ek bir güncelleme yayınladı, ancak güncelleme, mac makinelerinde tuğla oluşmasına neden olan daha fazla soruna neden oluyor gibi görünüyor. Daha fazla bilgi edinmek için bu makaleyi okuyun