Poboljšanje sigurnosti za FreeBSD pomoću IPFW i SSHGuard

Poboljšanje sigurnosti za FreeBSD pomoću IPFW i SSHGuard

VPS poslužitelji su često na meti uljeza. Uobičajena vrsta napada pojavljuje se u zapisnicima sustava kao stotine neovlaštenih pokušaja prijave ssh. Postavljanje vatrozida je vrlo korisno, ali samo po sebi možda neće adekvatno kontrolirati pokušaje ometanja upada.

Ovaj vodič pokazuje kako izgraditi poboljšanu barijeru upada za FreeBSD koristeći dva programa, ipfwvatrozid i sshguard. SSHGuard je mali dodatni program koji prati zapisnike sustava za "zlonamjerne" unose. Kada prekršitelji pokušaju dobiti pristup, daje sshguardinstrukcije ipfwda blokiraju promet koji potječe s IP adrese prekršitelja. Počinitelj je tada učinkovito isključen.

Nakon što se shvati kako ti programi rade, upravljanje zaštitom poslužitelja je prilično jednostavno. Iako je ovaj vodič usmjeren na konfiguriranje FreeBSD-a, njegovi se dijelovi primjenjuju na druge OS i softver vatrozida.

Korak 1. Konfiguriranje IPFW-a

FreeBSD nudi 3 vatrozida u svojoj zadanoj ( GENERIC) kernelu ipfw, pf, i ipfilter. Svaki od njih ima prednosti i obožavatelje, ali ipfwje FBSD-ov izvorni softver vatrozida i prilično jednostavan za korištenje u naše svrhe. Vrijedi napomenuti da ipfwradi mnoge stvari kao što pokazuje njegova stranica, ali mogućnosti kao što su NAT, oblikovanje prometa itd., nisu potrebne za tipičnu VPS situaciju. Na sreću, osnovne značajke vatrozida lako ispunjavaju naše zahtjeve.

Za pokretanje vatrozida u vrijeme pokretanja, dodajte sljedeće u /etc/rc.conf:

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

serviceNaredba je dostupna za pokretanje / ručno zaustavljanje firewall:

[user@vultr ~]$ sudo service ipfw start

Naravno, ipfwneće učiniti ništa dok ne doda pravila, često iz datoteke, u ovom primjeru koji se nalazi na /usr/local/etc/IPFW.rules. Datoteka pravila se zapravo može nalaziti bilo gdje ili imati bilo koji naziv, sve dok odgovara parametru "firewall_script". Datoteka s pravilima detaljno je opisana u nastavku.

Korak 2. Instalirajte i konfigurirajte SSHGuard

sshguarddolazi u nekoliko okusa za korištenje s različitim vatrozidima. Koristite pkguslužni program za dohvaćanje i instalaciju sshguard-ipfw:

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

U većini slučajeva to je sve što treba učiniti. Odgovarajuća varijabla se automatski umeće u /etc/rc.confza pokretanje pri pokretanju:

sshguard_enable="YES"

Zadane postavke normalno rade dobro. Ako su potrebne različite vrijednosti, sshguardman stranica daje detaljne informacije o parametrima:

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

Možete početi sshguards uobičajenim servicepozivanjem:

[user@vultr ~]$ sudo service sshguard start

Korak 3. Napravite skriptu pravila

Najteži dio je stvoriti skup pravila vatrozida. ipfwmože koristiti dostavljenu /etc/rc.firewallskriptu, ali se mora modificirati kako bi se prilagodio SSHGuardu, kao i različitim operativnim scenarijima. Brojne web stranice i FreeBSD priručnik sadrže korisne informacije o tome. Međutim, pisanje datoteke s pravilima nije tako teško, osim toga, prilagođeni skup pravila može biti lakše razumjeti i promijeniti kada je to potrebno.

Važna značajka ipfwpravila je da prvi meč pobjeđuje što znači da je redoslijed pravila važan. U ipfw, svako pravilo je naredba, a datoteka pravila je izvršna shell skripta. To omogućuje promjenu skupa pravila promjenom pravila i pokretanjem datoteke pravila kao shell skripte:

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

Općenito, datoteka s pravilima će definirati varijablu za ipfwnaredbu, zatim obrisati trenutna pravila, izdati generička pravila, zatim nastaviti s postavljanjem "out" pravila, nakon čega slijede "unutra" pravila. Stranica s priručnikom za ipfw i drugi resursi sadrže obilje informacija o strukturi pravila i opcijama koje su u najmanju ruku brojne.

Budući da je verzija FreeBSD sshguard ažurirana na verziju 1.6.2, promijenio se način umetanja pravila blokiranja za prekršitelje. Sada se adrese prekršitelja čuvaju u ipfw tablici (tablica 22 da budemo precizni), umjesto da se umetnu u pravila iznad 55000 kao prije.

Na sreću, prilično je jednostavno postaviti datoteku pravila za korištenje tablice. Samo je pitanje postavljanja pravila tablice na pravo mjesto i korištenja ispravne sintakse prilikom pisanja pravila.

Kada sshguardpronađe počinitelja, stavlja adresu prekršitelja na svoju crnu listu, a također umeće adresu u ipfwtablicu tako da će "pokrenuti" uskraćivanje pristupa. Ovo pravilo će postići sljedeće svrhe:

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

Još uvijek je potrebno postaviti pravila koja dopuštaju ulazne usluge iznad 01000 u ovom slučaju. Na primjer, recimo da je adresa 10.20.30.40prekršitelj u tablici 22, a imamo ovo ipfw pravilo:

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

Od ipfwsusreta vladati 01000 prije pravilu 56420 , 10.20.30.40je blokiran . To pravilo "dopusti 22 ulaza" uopće se neće vidjeti. Ako bi pravilo dopuštenja imalo "običan" broj kao što je 00420 , loš promet bi bio propušten i nikad bi se blokirao (jer je 00420 manji od 01000 i "prvi meč pobjeđuje").

Lijepa značajka ažurirane verzije je da se sada, kada se sshguard pokrene, sve adrese na crnoj listi dodaju u tablicu i dostupne su za blokiranje dolaznih prekršitelja bez odlaganja. Crna lista je kumulativna i zadržava se između sesija.

U ovom trenutku vjerojatno je razumno prikazati cijeli ipfwskup pravila izmijenjen za sshguard. Komentari bi trebali olakšati praćenje logike pravila:

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

Korak 4. Pokretanje i testiranje

Potrebe sustava se razlikuju i različiti izbori portova za blokiranje ili deblokiranje odražavaju se u skupu pravila. Nakon što je skup pravila gotov, spremite datoteku u /usr/local/etc/IPFW.rulesi pokrenite FBSD usluge:

 # service ipfw start
 # service sshguard start

Prošireni vatrozid bi sada trebao biti pokrenut! provjeriti sshguard:

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

Ako sshguardje pokrenut, prikazuje se njegov pid i puni naredbeni redak:

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

Ovo pokazuje skup pravila vatrozida sa statistikom i zadnji put kada je paket odgovarao pravilu:

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

Nakon sati ili dana, adrese prekršitelja se dodaju na crnu listu i također tablicu 22. Za pregled svih adresa u tablici koristite ovu naredbu:

ipfw table 22 list

Rezultat se ispisuje kao:

10.10.10.118/32 0
10.10.10.72/32 0
...

Kao što je gore opisano, veze s ovih adresa nisu dopuštene. Naravno, pri prvom pokretanju sshguardna popisu neće biti adrese, ali s vremenom može postati prilično dugačak. Jedna od opcija je stvaranje zasebnih pravila blokiranja za adrese s višestrukim unosima u tablici, a zatim njihovo brisanje s crne liste.

Korak 5. Budite oprezni...

Dobro je povremeno provjeravati zapisnike kako biste bili sigurni da su upadi kontrolirani. Općenito, /var/log/auth.logi /var/log/securityinformativni su. Mogu postati očiti praznine ili pogreške u pokrivanju mrežnih usluga. Promjena skupa pravila vatrozida prema potrebi normalan je dio administracije poslužitelja.

U prethodnim verzijama sshguarda, kada je /var/db/sshguard/blacklist.dbdatoteka narasla, mogla je spriječiti sshguardpokretanje pri pokretanju sustava. Uklanjanje ili preimenovanje datoteke crne liste dopušteno je sshguardza pokretanje. Čini se da je ovaj problem riješen u najnovijoj verziji sshguarda, tako da ovo rješenje vjerojatno više nije potrebno.

Obavezno stavite na bijelu listu IP adresu s koje ste spojeni na SSH sesiju. Ako se slučajno zaključate, uvijek se možete spojiti na noVNC konzolu na https://my.vultr.com i staviti svoj IP na bijelu listu.

Ukratko, korištenje kombinacije ipfwi sshguardpomaže da vaš FreeBSD sustav bude siguran i da radi svoj posao. Minimiziranje nametljive mrežne aktivnosti ima dodatnu prednost: manje "buke" olakšava praćenje i podešavanje rada sustava, pridonoseći sigurnijem poslužitelju koji bolje radi.

Učinkovita zaštita FreeBSD sustava/poslužitelja nije posebno komplicirana. Iako je potreban skroman trud da bi se pokrenuo i pokrenuo, isplati se znatno većom VPS-om i sigurnošću projekta.


Kako instalirati Tiny Tiny RSS Reader na FreeBSD 11 FAMP VPS

Kako instalirati Tiny Tiny RSS Reader na FreeBSD 11 FAMP VPS

Korištenje drugog sustava? Tiny Tiny RSS Reader je besplatan čitač i agregator vijesti otvorenog koda koji se hostira na webu (RSS/Atom), dizajniran za

Kako instalirati Wiki.js na FreeBSD 11

Kako instalirati Wiki.js na FreeBSD 11

Korištenje drugog sustava? Wiki.js je besplatna i moderna wiki aplikacija otvorenog koda izgrađena na Node.js, MongoDB, Git i Markdown. Izvorni kod Wiki.js je javni

Kako instalirati Pagekit 1.0 CMS na FreeBSD 11 FAMP VPS

Kako instalirati Pagekit 1.0 CMS na FreeBSD 11 FAMP VPS

Korištenje drugog sustava? Pagekit 1.0 CMS je prekrasan, modularan, proširiv i lagan, besplatan i otvoreni sustav za upravljanje sadržajem (CMS) s

Kako instalirati MODX Revolution na FreeBSD 11 FAMP VPS

Kako instalirati MODX Revolution na FreeBSD 11 FAMP VPS

Korištenje drugog sustava? MODX Revolution je brz, fleksibilan, skalabilan, open source, Enterprise-grade Content Management System (CMS) napisan u PHP-u. To i

Postavljanje OpenBSD 5.5 64-bit

Postavljanje OpenBSD 5.5 64-bit

Ovaj članak vas vodi kroz postavljanje OpenBSD 5.5 (64-bit) na KVM s Vultr VPS. Korak 1. Prijavite se na Vultr upravljačku ploču. Korak 2. Kliknite na UPOTREBU

Kako instalirati osTicket na FreeBSD 12

Kako instalirati osTicket na FreeBSD 12

Korištenje drugog sustava? osTicket je sustav za kupnju ulaznica otvorenog koda za korisničku podršku. OsTicket izvorni kod je javno hostiran na Githubu. U ovom vodiču

Kako instalirati Flarum Forum na FreeBSD 12

Kako instalirati Flarum Forum na FreeBSD 12

Korištenje drugog sustava? Flarum je besplatan forumski softver sljedeće generacije otvorenog koda koji čini internetsku raspravu zabavnom. Izvorni kod za Flarum se nalazi o

Kako omogućiti TLS 1.3 u Nginxu na FreeBSD 12

Kako omogućiti TLS 1.3 u Nginxu na FreeBSD 12

Korištenje drugog sustava? TLS 1.3 verzija je protokola Transport Layer Security (TLS) koji je objavljen 2018. kao predloženi standard u RFC 8446

Instalirajte WordPress na OpenBSD 6.2

Instalirajte WordPress na OpenBSD 6.2

Uvod WordPress je dominantni sustav za upravljanje sadržajem na internetu. Pokreće sve, od blogova do složenih web stranica s dinamičkim sadržajem

Kako instalirati Subrion 4.1 CMS na FreeBSD 11 FAMP VPS

Kako instalirati Subrion 4.1 CMS na FreeBSD 11 FAMP VPS

Korištenje drugog sustava? Subrion 4.1 CMS je moćan i fleksibilan sustav upravljanja sadržajem otvorenog koda (CMS) koji donosi intuitivan i jasan sadržaj

Kako konfigurirati DJBDNS na FreeBSD-u

Kako konfigurirati DJBDNS na FreeBSD-u

Ovaj vodič će vam pokazati kako konfigurirati DNS uslugu koju je lako održavati, lako konfigurirati i koja je općenito sigurnija od klasičnog BIN-a

Kako instalirati Nginx, MySQL i PHP (FEMP) stog na FreeBSD 12.0

Kako instalirati Nginx, MySQL i PHP (FEMP) stog na FreeBSD 12.0

FEMP stog, koji je usporediv s LEMP stogom na Linuxu, zbirka je softvera otvorenog koda koji se obično instalira zajedno kako bi omogućio FreeBS

Instalacija MongoDB-a na FreeBSD 10

Instalacija MongoDB-a na FreeBSD 10

MongoDB je NoSQL baza podataka svjetske klase koja se često koristi u novijim web aplikacijama. Pruža upite visoke performanse, dijeljenje i replikaciju

Kako instalirati Monicu na FreeBSD 12

Kako instalirati Monicu na FreeBSD 12

Korištenje drugog sustava? Monica je sustav upravljanja osobnim odnosima otvorenog koda. Zamislite to kao CRM (popularni alat koji koriste prodajni timovi u th

OpenBSD kao rješenje za e-trgovinu s PrestaShopom i Apacheom

OpenBSD kao rješenje za e-trgovinu s PrestaShopom i Apacheom

Uvod Ovaj vodič demonstrira OpenBSD kao rješenje za e-trgovinu koristeći PrestaShop i Apache. Apache je potreban jer PrestaShop ima složeni UR

Instalacija Fork CMS-a na FreeBSD 12

Instalacija Fork CMS-a na FreeBSD 12

Korištenje drugog sustava? Fork je CMS otvorenog koda napisan u PHP-u. Izvorni kod Forks nalazi se na GitHubu. Ovaj vodič će vam pokazati kako instalirati Fork CM

Kako instalirati Directus 6.4 CMS na FreeBSD 11 FAMP VPS

Kako instalirati Directus 6.4 CMS na FreeBSD 11 FAMP VPS

Korištenje drugog sustava? Directus 6.4 CMS je moćan i fleksibilan, besplatan i otvoreni izvor Headless Content Management System (CMS) koji pruža programerima

Poboljšanje sigurnosti za FreeBSD pomoću IPFW i SSHGuard

Poboljšanje sigurnosti za FreeBSD pomoću IPFW i SSHGuard

VPS poslužitelji su često na meti uljeza. Uobičajena vrsta napada pojavljuje se u zapisnicima sustava kao stotine neovlaštenih pokušaja prijave ssh-om. Postavljanje

Postavite httpd u OpenBSD

Postavite httpd u OpenBSD

Uvod OpenBSD 5.6 uveo je novi demon pod nazivom httpd, koji podržava CGI (putem FastCGI) i TLS. Za instalaciju novog http nije potreban dodatni rad

Postavite iRedMail na FreeBSD 10

Postavite iRedMail na FreeBSD 10

Ovaj vodič će vam pokazati kako instalirati grupni softver iRedMail na novu instalaciju FreeBSD 10. Trebali biste koristiti poslužitelj s najmanje jednim gigabajtom o

Uspon strojeva: primjene AI u stvarnom svijetu

Uspon strojeva: primjene AI u stvarnom svijetu

Umjetna inteligencija nije u budućnosti, ovdje je upravo u sadašnjosti. U ovom blogu Pročitajte kako su aplikacije umjetne inteligencije utjecale na različite sektore.

DDOS napadi: kratak pregled

DDOS napadi: kratak pregled

Jeste li i vi žrtva DDOS napada i zbunjeni ste metodama prevencije? Pročitajte ovaj članak kako biste riješili svoje upite.

Jeste li se ikada zapitali kako hakeri zarađuju novac?

Jeste li se ikada zapitali kako hakeri zarađuju novac?

Možda ste čuli da hakeri zarađuju mnogo novca, ali jeste li se ikada zapitali kako zarađuju toliki novac? raspravimo.

Revolucionarni Googleovi izumi koji će vam olakšati život.

Revolucionarni Googleovi izumi koji će vam olakšati život.

Želite li vidjeti revolucionarne izume Googlea i kako su ti izumi promijenili život svakog čovjeka danas? Zatim čitajte na blogu kako biste vidjeli Googleove izume.

Friday Essential: Što se dogodilo s automobilima s umjetnom inteligencijom?

Friday Essential: Što se dogodilo s automobilima s umjetnom inteligencijom?

Koncept samovozećih automobila koji će krenuti na ceste uz pomoć umjetne inteligencije san je koji već neko vrijeme imamo. No, unatoč nekoliko obećanja, nigdje ih nema. Pročitajte ovaj blog kako biste saznali više…

Tehnološka singularnost: daleka budućnost ljudske civilizacije?

Tehnološka singularnost: daleka budućnost ljudske civilizacije?

Kako se znanost razvija velikom brzinom, preuzimajući mnoge naše napore, raste i rizik da se podvrgnemo neobjašnjivoj Singularnosti. Pročitajte što bi za nas mogla značiti singularnost.

Evolucija pohrane podataka – Infografika

Evolucija pohrane podataka – Infografika

Metode pohrane podataka su se razvijale možda od rođenja podataka. Ovaj blog pokriva evoluciju pohrane podataka na temelju infografike.

Funkcionalnosti slojeva referentne arhitekture velikih podataka

Funkcionalnosti slojeva referentne arhitekture velikih podataka

Pročitajte blog kako biste na najjednostavniji način upoznali različite slojeve u arhitekturi velikih podataka i njihove funkcionalnosti.

6 nevjerojatnih prednosti posjedovanja pametnih kućnih uređaja u našim životima

6 nevjerojatnih prednosti posjedovanja pametnih kućnih uređaja u našim životima

U ovom digitalnom svijetu, pametni kućni uređaji postali su ključni dio života. Evo nekoliko nevjerojatnih prednosti pametnih kućnih uređaja o tome kako naš život čine vrijednim življenja i jednostavnijim.

Ažuriranje dodataka macOS Catalina 10.15.4 uzrokuje više problema nego što ih rješava

Ažuriranje dodataka macOS Catalina 10.15.4 uzrokuje više problema nego što ih rješava

Nedavno je Apple izdao macOS Catalina 10.15.4 dodatak ažuriranju kako bi riješio probleme, ali čini se da ažuriranje uzrokuje više problema koji dovode do zalijevanja mac strojeva. Pročitajte ovaj članak da biste saznali više