Migliorare la sicurezza di FreeBSD usando IPFW e SSHGuard

I server VPS sono spesso presi di mira dagli intrusi. Un tipo comune di attacco viene visualizzato nei registri di sistema come centinaia di tentativi di accesso ssh non autorizzati. L'impostazione di un firewall è molto utile, ma di per sé potrebbe non controllare adeguatamente i tentativi di intrusione.

Questo tutorial mostra come costruire una barriera avanzata contro le intrusioni per FreeBSD usando due programmi, il ipfwfirewall e sshguard. SSHGuard è un piccolo programma aggiuntivo che monitora i registri di sistema per voci "abusive". Quando i trasgressori tentano di accedere, sshguardindica ipfwdi bloccare il traffico proveniente dall'indirizzo IP del trasgressore. L'autore del reato viene quindi effettivamente escluso.

Una volta capito come funzionano questi programmi, gestire la protezione del server è piuttosto semplice. Sebbene questa guida sia focalizzata sulla configurazione di FreeBSD, alcune parti si applicano ad altri sistemi operativi e software firewall.

Passaggio 1. Configurazione di IPFW

FreeBSD fornisce 3 firewall nella sua impostazione predefinita ( GENERIC) del kernel, ipfw, pf, e ipfilter. Ognuno ha vantaggi e fan, ma ipfwè il software firewall nativo di FBSD ed è abbastanza semplice da usare per i nostri scopi. Vale la pena notare che ipfwfa molte cose come mostra la sua pagina man, tuttavia funzionalità come NAT, traffic shaping, ecc., Non sono necessarie per la tipica situazione VPS. Fortunatamente, le funzionalità di base del firewall soddisfano facilmente i nostri requisiti.

Per avviare il firewall all'avvio, aggiungere quanto segue a /etc/rc.conf:

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

Il servicecomando è disponibile per avviare / arrestare manualmente il firewall:

[user@vultr ~]$ sudo service ipfw start

Naturalmente, ipfwnon farà nulla fino a quando non aggiunge regole, spesso da un file, in questo esempio che si trova in /usr/local/etc/IPFW.rules. Il file delle regole potrebbe infatti trovarsi ovunque o avere un nome, purché corrisponda al parametro "firewall_script". Il file delle regole è descritto in dettaglio di seguito.

Passaggio 2. Installare e configurare SSHGuard

sshguardè disponibile in diversi gusti per l'utilizzo con diversi firewall. Utilizzare l' pkgutilità per recuperare e installare sshguard-ipfw:

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

Nella maggior parte dei casi è tutto ciò che bisogna fare. La variabile appropriata viene automaticamente inserita in /etc/rc.confper l'avvio all'avvio:

sshguard_enable="YES"

Le impostazioni predefinite normalmente funzionano bene. Se sono necessari valori diversi, la sshguardpagina man fornisce informazioni dettagliate sui 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"

Puoi iniziare sshguardcon la solita serviceinvocazione:

[user@vultr ~]$ sudo service sshguard start

Passaggio 3. Creare uno script delle regole

La parte più difficile è la creazione del set di regole del firewall. ipfwpuò utilizzare lo /etc/rc.firewallscript fornito , ma deve essere modificato per adattarsi a SSHGuard, nonché a diversi scenari operativi. Un certo numero di pagine Web e il Manuale di FreeBSD contengono informazioni utili su come farlo. Tuttavia, scrivere un file di regole non è così difficile, inoltre, un set di regole personalizzato può essere più facile da capire e modificare quando necessario.

Una caratteristica importante delle ipfwregole è che la prima partita vince, il che significa che l'ordine delle regole è importante. In ipfw, ogni regola è un comando e il file della regola è uno script shell eseguibile. Ciò consente di modificare il set di regole modificando le regole e quindi eseguendo il file delle regole come lo script della shell:

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

Generalmente, un file di regole definirà una variabile per il ipfwcomando, quindi cancella le regole correnti, emette regole generiche, quindi procede a impostare le regole "out", seguite dalle regole "in". La pagina di manuale di ipfw e altre risorse contengono una grande quantità di informazioni sulla struttura delle regole e le opzioni che sono numerose per non dire altro.

Da quando la versione di sshguard di FreeBSD è stata aggiornata alla versione 1.6.2, il metodo di inserimento delle regole di blocco per i trasgressori è cambiato. Ora gli indirizzi dei trasgressori sono conservati in una tabella ipfw (tabella 22 per essere specifici), anziché essere inseriti nelle regole sopra 55000 come prima.

Fortunatamente, è abbastanza semplice impostare il file delle regole per usare la tabella. È solo una questione di mettere la regola della tabella nel posto giusto e assicurarsi di usare la sintassi corretta quando si scrive la regola.

Quando sshguardtrova un colpevole, inserisce l'indirizzo del colpevole nella sua lista nera e inserisce anche l'indirizzo nella ipfwtabella in modo da "innescare" la negazione dell'accesso. Questa regola raggiungerà questi scopi:

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

In questo caso è ancora necessario mettere regole che consentano i servizi in entrata al di sopra di 01000. Ad esempio, supponiamo che l'indirizzo 10.20.30.40sia un trasgressore nella tabella 22 e abbiamo questa regola ipfw:

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

Poiché ipfwincontra la regola 01000 prima della regola 56420 , 10.20.30.40viene bloccata . Non sarà mai visto dalla regola "consentire 22 in". Se la regola di autorizzazione avesse un numero "normale" come 00420 , il traffico cattivo verrebbe lasciato entrare e non verrà mai bloccato (perché 00420 è inferiore a 01000 e "vince la prima partita").

Una bella caratteristica della versione aggiornata è che ora all'avvio di sshguard tutti gli indirizzi nella lista nera vengono aggiunti alla tabella e sono disponibili per bloccare senza indugio i trasgressori in arrivo. La lista nera è cumulativa e mantenuta tra le sessioni.

A questo punto è probabilmente sensato mostrare un ipfwset di regole completo modificato per sshguard. I commenti dovrebbero rendere abbastanza facile seguire la logica delle regole:

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

Passaggio 4. Avvio e test

Le esigenze di sistema variano e le diverse scelte di porte da bloccare o sbloccare si riflettono nel set di regole. Una volta terminato /usr/local/etc/IPFW.rulesil set di regole, salvare il file in e avviare i servizi FBSD:

 # service ipfw start
 # service sshguard start

Il firewall aumentato ora dovrebbe essere in esecuzione! Controllare sshguard:

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

Se sshguardè in esecuzione, vengono visualizzati il ​​pid e la riga di comando completa:

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

Questo mostra il set di regole del firewall con le statistiche e l'ultima volta che un pacchetto ha rispettato la regola:

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

Dopo ore o giorni, gli indirizzi degli autori di reato vengono aggiunti alla lista nera e anche alla tabella 22. Per visualizzare tutti gli indirizzi nella tabella, utilizzare questo comando:

ipfw table 22 list

Il risultato è stampato come:

10.10.10.118/32 0
10.10.10.72/32 0
...

Come descritto sopra, le connessioni da questi indirizzi non sono consentite. Certo, al primo avvio sshguardnon ci saranno indirizzi nell'elenco, ma col tempo può diventare piuttosto lungo. Un'opzione consiste nel creare regole di blocco separate per gli indirizzi con più voci nella tabella e quindi eliminarle dalla lista nera.

Passaggio 5. Mantenere vigile ...

È una buona idea controllare occasionalmente i registri per assicurarsi che le intrusioni siano controllate. In generale, /var/log/auth.loge /var/log/securitysono informativi. È possibile che emergano lacune o errori nella copertura dei servizi di rete. La modifica del set di regole del firewall in base alle esigenze è una parte normale dell'amministrazione del server.

Nelle precedenti versioni di sshguard, quando il /var/db/sshguard/blacklist.dbfile si era ingrandito, poteva impedire sshguardl'avvio all'avvio del sistema. Rimozione o ridenominazione del file della lista nera consentita sshguardper l'avvio. Questo problema sembra essere stato risolto nell'ultima versione di sshguard, quindi questa soluzione alternativa non è probabilmente più necessaria.

Assicurati di inserire nella whitelist l'indirizzo IP da cui sei connesso alla sessione SSH. Se ti blocchi accidentalmente, puoi sempre connetterti alla console noVNC in https://my.vultr.com e inserire nella lista bianca il tuo IP.

Riassumendo, usando la combinazione di ipfwe sshguardaiuta a mantenere sicuro il tuo sistema FreeBSD e fare il suo lavoro. Ridurre al minimo l'attività intrusiva della rete ha un ulteriore vantaggio: meno "rumore" semplifica il monitoraggio e l'ottimizzazione del funzionamento del sistema, contribuendo a un server più sicuro e con un funzionamento migliore.

La protezione efficace di un sistema / server FreeBSD non è particolarmente complicata. Mentre è necessario uno sforzo modesto per metterlo in funzione, paga in VPS e sicurezza del progetto sostanzialmente maggiori.


Tags: #BSD #Security

Leave a Comment

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Gli attacchi ransomware sono in aumento, ma l'intelligenza artificiale può aiutare ad affrontare l'ultimo virus informatico? L'intelligenza artificiale è la risposta? Leggi qui sai è AI boone o bane

ReactOS: è questo il futuro di Windows?

ReactOS: è questo il futuro di Windows?

ReactOS, un sistema operativo open source e gratuito è qui con l'ultima versione. Può essere sufficiente alle esigenze degli utenti Windows moderni e abbattere Microsoft? Scopriamo di più su questo vecchio stile, ma un'esperienza del sistema operativo più recente.

Rimani connesso tramite lapp desktop WhatsApp 24*7

Rimani connesso tramite lapp desktop WhatsApp 24*7

Whatsapp ha finalmente lanciato l'app desktop per utenti Mac e Windows. Ora puoi accedere facilmente a Whatsapp da Windows o Mac. Disponibile per Windows 8+ e Mac OS 10.9+

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

Leggi questo per sapere come l'intelligenza artificiale sta diventando popolare tra le aziende di piccole dimensioni e come sta aumentando le probabilità di farle crescere e dare un vantaggio ai loro concorrenti.

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Recentemente Apple ha rilasciato macOS Catalina 10.15.4 un aggiornamento supplementare per risolvere i problemi, ma sembra che l'aggiornamento stia causando più problemi che portano al bricking delle macchine mac. Leggi questo articolo per saperne di più

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per l'estrazione dei dati dai Big Data

Che cosè un file system di journaling e come funziona?

Che cosè un file system di journaling e come funziona?

Il nostro computer memorizza tutti i dati in un modo organizzato noto come file system di journaling. È un metodo efficiente che consente al computer di cercare e visualizzare i file non appena si preme search.https://wethegeek.com/?p=94116&preview=true

Singolarità tecnologica: un lontano futuro della civiltà umana?

Singolarità tecnologica: un lontano futuro della civiltà umana?

Man mano che la scienza si evolve a un ritmo rapido, assumendo gran parte dei nostri sforzi, aumentano anche i rischi di sottoporci a una singolarità inspiegabile. Leggi, cosa potrebbe significare per noi la singolarità.

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Limpatto dellintelligenza artificiale nella sanità 2021

Limpatto dellintelligenza artificiale nella sanità 2021

L'intelligenza artificiale nell'assistenza sanitaria ha compiuto grandi passi avanti negli ultimi decenni. Pertanto, il futuro dell'IA in sanità continua a crescere giorno dopo giorno.