Îmbunătățirea securității pentru FreeBSD folosind IPFW și SSHGuard

Serverele VPS sunt frecvent vizate de intrusi. Un tip comun de atac apare în jurnalele de sistem ca sute de încercări de autentificare ssh neautorizate. Configurarea unui firewall este foarte utilă, dar de la sine nu poate controla în mod adecvat încercările de intruziune perturbatoare.

Acest tutorial arată cum să construiți o barieră de intruziune îmbunătățită pentru FreeBSD folosind două programe, ipfwfirewall și sshguard. SSHGuard este un mic program suplimentar care monitorizează jurnalele de sistem pentru intrări „abuzive”. Când infractorii încearcă să obțină acces, sshguardsolicită ipfwsă blocheze traficul care provine de la adresa IP a contravenientului. Infractorul este apoi închis efectiv.

Odată înțeles cum funcționează aceste programe, gestionarea protecției serverului este destul de simplă. Deși acest ghid este axat pe configurarea FreeBSD, părți din acesta se aplică altor sisteme de operare și firewall.

Pasul 1. Configurarea IPFW

FreeBSD oferă 3 firewall - uri în implicite ( GENERICkernel), ipfw, pfși ipfilter. Fiecare are avantaje și fani, dar ipfweste software-ul pentru firewall-ul autohton FBSD și destul de simplu de utilizat în scopurile noastre. Este demn de remarcat faptul că ipfwface multe lucruri așa cum arată pagina sa de manieră, cu toate că funcțiile precum NAT, modelarea traficului etc. nu sunt necesare pentru situația tipică VPS. Din fericire, caracteristicile de bază ale firewall-ului răspund cu ușurință cerințelor noastre.

Pentru a porni firewallul la momentul de pornire, adăugați următoarele la /etc/rc.conf:

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

serviceComanda este disponibil pentru a porni / opri manual firewall - ul:

[user@vultr ~]$ sudo service ipfw start

Desigur, ipfwnu va face nimic până când nu va adăuga reguli, adesea dintr-un fișier, în acest exemplu localizat la /usr/local/etc/IPFW.rules. Fișierul de reguli ar putea fi de fapt localizat oriunde sau are orice nume, atât timp cât se potrivește cu parametrul "firewall_script". Fișierul de reguli este descris în detaliu mai jos.

Pasul 2. Instalați și configurați SSHGuard

sshguardvine în mai multe arome pentru utilizare cu diferite firewall-uri. Utilizați pkgutilitarul pentru a obține și instala sshguard-ipfw:

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

În cele mai multe cazuri, toate acestea trebuie să facă. Variabila corespunzătoare este introdusă automat /etc/rc.confpentru a începe pornirea:

sshguard_enable="YES"

În mod normal, valorile implicite funcționează bine. Dacă sunt necesare valori diferite, sshguardpagina manuală oferă informații detaliate despre parametri:

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

Puteți începe sshguardcu serviceinvocarea obișnuită :

[user@vultr ~]$ sudo service sshguard start

Pasul 3. Creați un script de reguli

Cea mai grea parte este crearea unui set de reguli pentru firewall. ipfwpoate face uz de /etc/rc.firewallscriptul furnizat , dar trebuie modificat pentru a se adapta SSHGuard, precum și pentru diferite scenarii operaționale. Câteva pagini web și FreeBSD Manual au informații utile despre acest lucru. Totuși, scrierea unui fișier de reguli nu este atât de greu, în afară de asta, un set de reguli personalizate poate fi mai ușor de înțeles și de schimbat atunci când este necesar.

O caracteristică importantă a ipfwregulilor este aceea că primul meci câștigă, ceea ce înseamnă că ordinea regulilor este importantă. În ipfw, fiecare regulă este o comandă, iar fișierul de reguli este un script shell executabil. Acest lucru permite modificarea setului de reguli prin modificarea regulilor, apoi executarea fișierului de reguli ca script-ul shell este:

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

În general, un fișier de reguli va defini o variabilă pentru ipfwcomandă, apoi va șterge regulile curente, va emite reguli generice, apoi va proceda la stabilirea regulilor „out”, urmate de regulile „in”. Pagina manuală ipfw și alte resurse conțin o mulțime de informații despre structura regulilor și opțiunile, care sunt numeroase pentru a spune cel mai puțin.

De când versiunea FreeBSD sshguard a fost actualizată la versiunea 1.6.2, metoda de introducere a regulilor de blocare pentru infractori sa schimbat. Acum, adresele infractorilor sunt păstrate într-un tabel ipfw (tabelul 22 pentru a fi specific), în loc să fie inserate în regulile de mai sus de 55000 ca înainte.

Din fericire, este destul de simplu să configurați fișierul de reguli pentru a utiliza tabelul. Este doar o chestiune de a pune regula mesei la locul potrivit și de a vă asigura că folosiți sintaxa corectă atunci când scrieți regula.

Când sshguardgăsește un infractor, introduce adresa contravenientului în lista sa neagră și, de asemenea, introduce adresa în ipfwtabel, astfel încât să „declanșeze” refuzul accesului. Această regulă va îndeplini aceste scopuri:

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

Este încă necesar să puneți reguli care să permită servicii de intrare peste 01000 în acest caz. De exemplu, să spunem că adresa 10.20.30.40este un infractor din tabelul 22 și avem această regulă ipfw:

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

Deoarece ipfwîntâlnirile regula 01000 înainte de regula 56420 , 10.20.30.40este blocat . Acesta nu va fi niciodată văzut de regula „permiteți 22 în”. Dacă regula de acordare ar avea un număr „regulat” precum 00420 , traficul necorespunzător ar fi blocat și niciodată blocat (deoarece 00420 este mai mic decât 01000 și „primul meci câștigă”).

O caracteristică frumoasă a versiunii actualizate este că acum când sshguard pornește toate adresele din lista neagră sunt adăugate în tabel și sunt disponibile pentru a bloca infractorii care intră fără întârziere. Lista neagră este cumulativă și se păstrează între sesiuni.

În acest moment este probabil să arătați un ipfwset complet de reguli modificat pentru sshguard. Comentariile ar trebui să faciliteze respectarea logicii regulilor:

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

Pasul 4. Pornire și testare

Necesitățile sistemului variază și diferite opțiuni de porturi de blocat sau deblocat sunt reflectate în regulă. După terminarea regulilor, salvați fișierul /usr/local/etc/IPFW.rulesși porniți serviciile FBSD:

 # service ipfw start
 # service sshguard start

Firewall-ul augmentat ar trebui să funcționeze acum! Verificați sshguard:

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

Dacă sshguardeste în curs de execuție, se afișează linia de comandă pid și completă:

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

Acest lucru arată regulamentul firewall-ului cu statistici și ultima dată când un pachet a corespuns cu regula:

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

După ore sau zile, adresele infractorilor sunt adăugate pe lista neagră și, de asemenea, în tabelul 22. Pentru a vizualiza toate adresele din tabel, utilizați această comandă:

ipfw table 22 list

Rezultatul este tipărit ca:

10.10.10.118/32 0
10.10.10.72/32 0
...

După cum s-a descris mai sus, conexiunile de la aceste adrese sunt interzise. Desigur, la prima rulare sshguardnu vor mai exista adrese în listă, dar în timp poate ajunge destul de mult. O opțiune este crearea de reguli de blocare separate pentru adrese cu mai multe intrări din tabel și apoi ștergerea lor din lista neagră.

Pasul 5. Menținerea vigilenței ...

Este o idee bună să verificați ocazional jurnalele pentru a vă asigura că intruziunile sunt controlate. În general, /var/log/auth.logși /var/log/securitysunt informative. S-ar putea să apară lacune sau erori în acoperirea serviciilor de rețea. Modificarea setului de reguli pentru firewall după cum este necesar este o parte normală a administrării serverului.

În versiunile anterioare sshguard, atunci când /var/db/sshguard/blacklist.dbfișierul a crescut, acesta ar putea împiedica sshguardpornirea de la pornirea sistemului. Eliminarea sau redenumirea fișierului din lista neagră a permis sshguardînceperea. Această problemă pare a fi rezolvată în cea mai recentă versiune sshguard, astfel că această soluție probabil nu mai este necesară.

Asigurați-vă că dați o listă albă a adresei IP de la care sunteți conectat la sesiunea SSH. Dacă vă blocați din greșeală, vă puteți conecta întotdeauna la Consola noVNC din https://my.vultr.com și lista cu IP-ul dvs. alb.

Rezumând, utilizând combinația de ipfwși sshguardvă ajută să vă păstrați sistemul FreeBSD în siguranță și să-și facă treaba. Minimizarea activității intrusive a rețelei are un beneficiu suplimentar: mai puțin „zgomot” facilitează urmărirea și reglarea funcționării sistemului, contribuind la un server mai sigur, care rulează mai bine.

Protejarea eficientă a unui sistem / server FreeBSD nu este deosebit de complicată. În timp ce este necesar un efort modest pentru a-l pune în funcțiune, acesta plătește într-un VPS substanțial mai mare și securitatea proiectului.


Tags: #BSD #Security

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

6 lucruri extrem de nebunești despre Nintendo Switch

6 lucruri extrem de nebunești despre Nintendo Switch

Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.

Promisiuni tehnologice care sunt încă nelivrate

Promisiuni tehnologice care sunt încă nelivrate

Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!

Te-ai întrebat vreodată cum câștigă hackerii bani?

Te-ai întrebat vreodată cum câștigă hackerii bani?

Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe