Izboljšanje varnosti za FreeBSD z uporabo IPFW in SSHGuard

Izboljšanje varnosti za FreeBSD z uporabo IPFW in SSHGuard

VPS strežniki so pogosto tarča vsiljivcev. Pogosta vrsta napada se prikaže v sistemskih dnevnikih kot na stotine nepooblaščenih poskusov prijave ssh. Nastavitev požarnega zidu je zelo uporabna, vendar sama po sebi morda ne bo ustrezno nadzorovala motečih poskusov vdora.

Ta vadnica prikazuje, kako zgraditi izboljšano vdorno oviro za FreeBSD z uporabo dveh programov, ipfwpožarnega zidu in sshguard. SSHGuard je majhen dodatek, ki spremlja sistemske dnevnike za "žaljive" vnose. Ko storilci poskušajo pridobiti dostop, sshguardnaroči ipfwblokiranje prometa, ki izvira z naslova IP kršitelja. Storilec je nato dejansko zaprt.

Ko razumete, kako ti programi delujejo, je upravljanje zaščite strežnika precej preprosto. Čeprav je ta priročnik osredotočen na konfiguriranje FreeBSD, se njegovi deli uporabljajo za druge operacijske sisteme in programsko opremo požarnega zidu.

Korak 1. Konfiguriranje IPFW

FreeBSD ponuja 3 požarne zidove v svojem privzetem ( GENERIC) jedru ipfw, pf, in ipfilter. Vsaka ima prednosti in oboževalce, vendar ipfwje programska oprema požarnega zidu FBSD, ki je dokaj enostavna za uporabo za naše namene. Omeniti velja, da ipfwpočne veliko stvari, kot je prikazano na strani priročnika, vendar zmožnosti, kot so NAT, oblikovanje prometa itd., niso potrebne za tipično situacijo VPS. Na srečo osnovne funkcije požarnega zidu zlahka ustrezajo našim zahtevam.

Če želite požarni zid zagnati ob zagonu, dodajte naslednje /etc/rc.conf:

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

serviceUkaz je na voljo za zagon / ročno ustavitev požarni zid:

[user@vultr ~]$ sudo service ipfw start

Seveda ipfwne bo naredil ničesar, dokler ne doda pravil, pogosto iz datoteke, v tem primeru na naslovu /usr/local/etc/IPFW.rules. Datoteka s pravili se lahko dejansko nahaja kjer koli ali ima katero koli ime, če se ujema s parametrom "firewall_script". Datoteka s pravili je podrobno opisana spodaj.

2. korak. Namestite in konfigurirajte SSHGuard

sshguardje na voljo v več različicah za uporabo z različnimi požarnimi zidovi. Uporabite pkgpripomoček za pridobivanje in namestitev sshguard-ipfw:

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

V večini primerov je to vse, kar morate storiti. Ustrezna spremenljivka se samodejno vstavi /etc/rc.confza zagon ob zagonu:

sshguard_enable="YES"

Privzete nastavitve običajno dobro delujejo. Če so potrebne različne vrednosti, sshguardstran man daje podrobne informacije o parametrih:

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

Začnete lahko sshguardz običajnim serviceklicanjem:

[user@vultr ~]$ sudo service sshguard start

Korak 3. Ustvarite skript pravil

Najtežji del je ustvariti nabor pravil požarnega zidu. ipfwlahko uporablja priloženi /etc/rc.firewallskript, vendar ga je treba spremeniti, da bo ustrezal SSHGuard, kot tudi različnim operativnim scenarijem. Številne spletne strani in priročnik FreeBSD vsebujejo koristne informacije o tem. Vendar pisanje datoteke s pravili ni tako težko, poleg tega je nabor pravil po meri lažje razumeti in ga po potrebi spremeniti.

Pomembna značilnost ipfwpravil je, da prva tekma zmaga, kar pomeni, da je pomemben vrstni red pravil. V ipfw, je vsako pravilo ukaz, datoteka s pravilom pa je izvedljiv skript lupine. To omogoča, da se nabor pravil spremeni tako, da se spremenijo pravila in nato zažene datoteka pravil kot skript lupine, kot je:

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

Na splošno bo datoteka s pravili definirala spremenljivko za ipfwukaz, nato počistila trenutna pravila, izdala splošna pravila in nato nadaljevala z nastavitvijo "izhodnih" pravil, ki jim bodo sledila pravila "vhod". Stran s priročnikom za ipfw in drugi viri vsebujejo veliko informacij o strukturi pravil in možnostih, ki so milo rečeno številne.

Ker je bila različica FreeBSD sshguard posodobljena na različico 1.6.2, se je način vstavljanja pravil blokiranja za kršitelje spremenil. Zdaj se naslovi kršiteljev hranijo v tabeli ipfw (natančneje tabela 22), namesto da bi bili vstavljeni v pravila nad 55000 kot prej.

Na srečo je nastavitev datoteke pravil za uporabo tabele precej preprosta. Gre samo za to, da postavite pravilo tabele na pravo mesto in poskrbite, da boste pri pisanju pravila uporabili pravilno sintakso.

Ko sshguardnajde kršitelja, ga uvrsti na črni seznam, naslov pa vstavi tudi v ipfwtabelo, tako da bo "sprožil" zavrnitev dostopa. To pravilo bo doseglo te namene:

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

V tem primeru je še vedno potrebno postaviti pravila, ki dovoljujejo dohodne storitve nad 01000. Recimo, da je naslov 10.20.30.40kršitelj v tabeli 22 in imamo to pravilo ipfw:

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

Ker ipfwnaleti pravilo 01000 pred pravilom 56420 , 10.20.30.40je blokiran . Pravilo "dovoli 22 v" sploh ne bo nikoli vidno. Če bi pravilo za dovoljenje imelo "običajno" številko, kot je 00420 , bi bil slab promet prepuščen in nikoli blokiran (ker je 00420 manj kot 01000 in "prva tekma zmaga").

Lepa lastnost posodobljene različice je, da so zdaj, ko se sshguard zažene, vsi naslovi na črnem seznamu dodani v tabelo in so na voljo za brez odlašanja blokiranje dohodnih kršiteljev. Črni seznam je kumulativen in se hrani med sejami.

Na tej točki je verjetno smiselno prikazati celoten ipfwnabor pravil, spremenjen za sshguard. Komentarji bi morali olajšati sledenje logiki 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. Zagon in testiranje

Sistemske potrebe se razlikujejo in različne izbire vrat za blokiranje ali deblokiranje se odražajo v naboru pravil. Ko je nabor pravil končan, shranite datoteko v /usr/local/etc/IPFW.rulesin zaženite storitve FBSD:

 # service ipfw start
 # service sshguard start

Razširjeni požarni zid bi moral zdaj delovati! Preverite sshguard:

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

Če sshguardse izvaja, se prikažeta njegov pid in polna ukazna vrstica:

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

To prikazuje nabor pravil požarnega zidu s statistiko in zadnjič, ko se je paket ujemal s pravilom:

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

Po urah ali dneh se naslovi kršiteljev dodajo na črno listo in tudi tabelo 22. Za ogled vseh naslovov v tabeli uporabite ta ukaz:

ipfw table 22 list

Rezultat je natisnjen kot:

10.10.10.118/32 0
10.10.10.72/32 0
...

Kot je opisano zgoraj, povezave s teh naslovov niso dovoljene. Seveda ob prvem zagonu sshguardna seznamu ne bo nobenih naslovov, vendar sčasoma lahko postane precej dolg. Ena od možnosti je ustvariti ločena pravila za blokiranje za naslove z več vnosi v tabeli in jih nato izbrisati s črnega seznama.

Korak 5. Bodite pozorni ...

Dobro je, da občasno preverite dnevnike, da se prepričate, ali so vdori nadzorovani. Na splošno /var/log/auth.login /var/log/securityso informativni. Lahko postanejo očitne vrzeli ali napake pri pokrivanju omrežnih storitev. Spreminjanje nabora pravil požarnega zidu po potrebi je običajen del administracije strežnika.

V prejšnjih različicah sshguard, ko je /var/db/sshguard/blacklist.dbdatoteka narasla, je lahko preprečila sshguardzagon ob zagonu sistema. Odstranjevanje ali preimenovanje datoteke črnega seznama je dovoljeno sshguardzačeti. Zdi se, da je ta težava odpravljena v najnovejši različici sshguard, zato ta rešitev verjetno ni več potrebna.

Ne pozabite dodati naslova IP, s katerega ste povezani s sejo SSH, na seznam dovoljenih. Če se pomotoma zaklenete, se lahko vedno povežete s konzolo noVNC na https://my.vultr.com in uvrstite svoj IP na seznam dovoljenih.

Če povzamemo, uporaba kombinacije ipfwin sshguardpomaga ohranjati vaš sistem FreeBSD varen in opravlja svoje delo. Zmanjšanje vsiljive omrežne dejavnosti ima dodatno prednost: manj "šuma" olajša sledenje in prilagajanje delovanja sistema, kar prispeva k varnejšemu in bolje delujočemu strežniku.

Učinkovita zaščita sistema/strežnika FreeBSD ni posebej zapletena. Čeprav je za njegovo vzpostavitev in delovanje potreben skromen trud, se izplača z bistveno večjo varnostjo VPS in projektom.

Tags: #BSD #Varnost

How to Install Tiny Tiny RSS Reader on a FreeBSD 11 FAMP VPS

How to Install Tiny Tiny RSS Reader on a FreeBSD 11 FAMP VPS

Using a Different System? Tiny Tiny RSS Reader is a free and open source self-hosted web-based news feed (RSS/Atom) reader and aggregator, designed to allo

Kako namestiti Wiki.js na FreeBSD 11

Kako namestiti Wiki.js na FreeBSD 11

Uporaba drugega sistema? Wiki.js je brezplačna odprtokodna sodobna wiki aplikacija, zgrajena na Node.js, MongoDB, Git in Markdown. Izvorna koda Wiki.js je javna

Kako namestiti Pagekit 1.0 CMS na FreeBSD 11 FAMP VPS

Kako namestiti Pagekit 1.0 CMS na FreeBSD 11 FAMP VPS

Uporaba drugega sistema? Pagekit 1.0 CMS je lep, modularen, razširljiv in lahek, brezplačen in odprtokoden sistem za upravljanje vsebine (CMS) z

Kako namestiti MODX Revolution na FreeBSD 11 FAMP VPS

Kako namestiti MODX Revolution na FreeBSD 11 FAMP VPS

Uporaba drugega sistema? MODX Revolution je hiter, prilagodljiv, razširljiv, odprtokoden sistem za upravljanje vsebin (CMS) za podjetja, napisan v PHP. To i

Namestitev OpenBSD 5.5 64-bit

Namestitev OpenBSD 5.5 64-bit

Ta članek vas vodi skozi nastavitev OpenBSD 5.5 (64-bit) na KVM z Vultr VPS. 1. korak. Prijavite se v nadzorno ploščo Vultr. 2. korak. Kliknite RAZPOSTAVI

Kako namestiti osTicket na FreeBSD 12

Kako namestiti osTicket na FreeBSD 12

Uporaba drugega sistema? osTicket je odprtokodni sistem za izdajo vstopnic za podporo strankam. Izvorna koda osTicket je javno gostovana na Githubu. V tej vadnici

Kako namestiti Flarum Forum na FreeBSD 12

Kako namestiti Flarum Forum na FreeBSD 12

Uporaba drugega sistema? Flarum je brezplačna in odprtokodna programska oprema za forume naslednje generacije, ki naredi spletno razpravo zabavno. Izvorna koda Flarum gostuje o

Kako omogočiti TLS 1.3 v Nginxu na FreeBSD 12

Kako omogočiti TLS 1.3 v Nginxu na FreeBSD 12

Uporaba drugega sistema? TLS 1.3 je različica protokola Transport Layer Security (TLS), ki je bil objavljen leta 2018 kot predlagani standard v RFC 8446

Namestite WordPress na OpenBSD 6.2

Namestite WordPress na OpenBSD 6.2

Uvod WordPress je prevladujoči sistem za upravljanje vsebin na internetu. Poganja vse, od blogov do zapletenih spletnih mest z dinamično vsebino

Kako namestiti Subrion 4.1 CMS na FreeBSD 11 FAMP VPS

Kako namestiti Subrion 4.1 CMS na FreeBSD 11 FAMP VPS

Uporaba drugega sistema? Subrion 4.1 CMS je zmogljiv in prilagodljiv odprtokodni sistem za upravljanje vsebine (CMS), ki prinaša intuitivno in jasno vsebino.

Kako konfigurirati DJBDNS na FreeBSD

Kako konfigurirati DJBDNS na FreeBSD

Ta vadnica vam bo pokazala, kako konfigurirati storitev DNS, ki je enostavna za vzdrževanje, enostavna za konfiguriranje in ki je na splošno bolj varna kot klasični BIN

Kako namestiti sklad Nginx, MySQL in PHP (FEMP) na FreeBSD 12.0

Kako namestiti sklad Nginx, MySQL in PHP (FEMP) na FreeBSD 12.0

Sklad FEMP, ki je primerljiv s skladom LEMP v Linuxu, je zbirka odprtokodne programske opreme, ki je običajno nameščena skupaj, da omogoči FreeBS

Namestitev MongoDB na FreeBSD 10

Namestitev MongoDB na FreeBSD 10

MongoDB je vrhunska baza podatkov NoSQL, ki se pogosto uporablja v novejših spletnih aplikacijah. Zagotavlja visoko zmogljive poizvedbe, razdeljevanje in podvajanje

Kako namestiti Monico na FreeBSD 12

Kako namestiti Monico na FreeBSD 12

Uporaba drugega sistema? Monica je odprtokodni sistem za upravljanje osebnih odnosov. Pomislite na to kot na CRM (priljubljeno orodje, ki ga uporabljajo prodajne ekipe v th

OpenBSD kot rešitev za e-trgovino s PrestaShop in Apache

OpenBSD kot rešitev za e-trgovino s PrestaShop in Apache

Uvod Ta vadnica prikazuje OpenBSD kot rešitev za e-trgovino z uporabo PrestaShop in Apache. Apache je potreben, ker ima PrestaShop zapleten UR

Namestitev Fork CMS na FreeBSD 12

Namestitev Fork CMS na FreeBSD 12

Uporaba drugega sistema? Fork je odprtokodni CMS, napisan v PHP. Izvorna koda Forks gostuje na GitHubu. Ta priročnik vam bo pokazal, kako namestiti Fork CM

Kako namestiti Directus 6.4 CMS na FreeBSD 11 FAMP VPS

Kako namestiti Directus 6.4 CMS na FreeBSD 11 FAMP VPS

Uporaba drugega sistema? Directus 6.4 CMS je zmogljiv in prilagodljiv, brezplačen in odprtokoden Headless Content Management System (CMS), ki omogoča razvijalcem

Izboljšanje varnosti za FreeBSD z uporabo IPFW in SSHGuard

Izboljšanje varnosti za FreeBSD z uporabo IPFW in SSHGuard

VPS strežniki so pogosto tarča vsiljivcev. Pogosta vrsta napada se prikaže v sistemskih dnevnikih kot na stotine nepooblaščenih poskusov prijave ssh. Postavitev

Nastavite httpd v OpenBSD

Nastavite httpd v OpenBSD

Uvod OpenBSD 5.6 je predstavil nov demon, imenovan httpd, ki podpira CGI (prek FastCGI) in TLS. Za namestitev novega http ni potrebno dodatno delo

Nastavite iRedMail na FreeBSD 10

Nastavite iRedMail na FreeBSD 10

Ta vadnica vam bo pokazala, kako namestiti skupinsko programsko opremo iRedMail na novo namestitev FreeBSD 10. Uporabiti morate strežnik z vsaj enim gigabajtom o

Vzpon strojev: aplikacije AI v resničnem svetu

Vzpon strojev: aplikacije AI v resničnem svetu

Umetna inteligenca ni v prihodnosti, tukaj je prav v sedanjosti. V tem blogu preberite, kako so aplikacije umetne inteligence vplivale na različne sektorje.

DDOS napadi: kratek pregled

DDOS napadi: kratek pregled

Ste tudi vi žrtev DDOS napadov in ste zmedeni glede načinov preprečevanja? Preberite ta članek, če želite rešiti svoja vprašanja.

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Morda ste že slišali, da hekerji zaslužijo veliko denarja, a ste se kdaj vprašali, kako zaslužijo takšen denar? razpravljajmo.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Ali želite videti revolucionarne izume Googla in kako so ti izumi danes spremenili življenje vsakega človeka? Nato preberite v blogu in si oglejte Googlove izume.

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Koncept samovozečih avtomobilov, ki zapeljejo na ceste s pomočjo umetne inteligence, so sanje, ki jih imamo že nekaj časa. A kljub številnim obljubam jih ni nikjer. Preberite ta blog, če želite izvedeti več…

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Ker se znanost hitro razvija in prevzame veliko naših prizadevanj, se povečuje tudi tveganje, da se podvržemo nerazložljivi singularnosti. Preberite, kaj bi za nas lahko pomenila singularnost.

Razvoj shranjevanja podatkov – Infografika

Razvoj shranjevanja podatkov – Infografika

Metode shranjevanja podatkov so se lahko razvijale od rojstva podatkov. Ta blog pokriva razvoj shranjevanja podatkov na podlagi infografike.

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Preberite blog, če želite na najpreprostejši način spoznati različne plasti v arhitekturi velikih podatkov in njihove funkcionalnosti.

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

V tem digitalno vodenem svetu so pametne naprave za dom postale ključni del življenja. Tukaj je nekaj neverjetnih prednosti pametnih naprav za dom o tem, kako naredijo naše življenje vredno življenja in poenostavijo.

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Pred kratkim je Apple izdal macOS Catalina 10.15.4 dopolnilno posodobitev za odpravo težav, vendar se zdi, da posodobitev povzroča več težav, ki vodijo do opečenja računalnikov Mac. Preberite ta članek, če želite izvedeti več