User Tools

Site Tools


strutture:lnf:dr:calcolo:sistemi:greenbone

Istruzioni per il setup di Greenbone Community Edition ai LNF

Per installare e configurare Greenbone ai LNF, utilizzare le istruzioni di Leandro Lanzi presentate nei Tutorial days di CCR tenuti a Frascati nel periodo 10-12 ottobre 2022.

Si allega anche qui la documentazione presentata:

In particolare ai LNF si e' scelto di installare una macchina virtuale locale, seguendo pedissequamente le istruzioni presenti nel manuale 03.

Inoltre, per poter automatizzare la configurazione iniziale di Greenbone, e' necessario avere a disposizione una CLI che permette di effettuare le operazioni di setup da shell o da script. Per questo motivo e' necessario installare il container gvm-tools seguendo il manuale 05.

1. Script di automazione del setup iniziale di Greenbone

E' stato creato uno script di automazione che esegue il setup dei task da eseguire sulla LAN. Lo script legge un file con elencate le network di cui programmare gli scan, quindi, per ciascuna network, crea la schedula di esecuzione periodica, crea il target e infine il task.

Prerequisiti per l'uso dello script

Affinche' lo script funzioni e' necessario preventivamente fare un minimo di lavoro manuale, utilizzando la GUI di Greenbone, ed in particolare:

  • personalizzazione
  • creazione della "Port List" (che verra' utilizzata dai target)
  • creazione della "Scan Config" (che verra' utilizzata dai task)

Per queste operazioni si consiglia di seguire il manuale 04, almeno fino al paragrafo 6.2.

Attenzione: lo script si aspetta di trovare una Port List e una Scan Config personalizzate e specifiche per le necessita' dell'INFN. Entrambi i nomi, sia quello della Port List che quello della Scan Config, devono contenere la stringa INFN. Inoltre la ricerca di una Port List e di una Scan Config i cui nomi contengano la stringa INFN deve dare un risultato univoco. Ad esempio, ai LNF, la Port List e la Scan Config sono state nominate rispettivamente:

  • INFN - All TCP and Nmap top 100 UDP
  • INFN - Full and fast

Questi ultimi sono copie di quelli forniti da Greenbone, cui sono state portate le modifiche suggerite da Leandro nel manuale 04 (paragrafi 6.1 e 6.2).

Preparazione del file di input per lo script

Come accennato, lo script legge un file di input (per default di nome nets.dat) con l'elenco delle network. Ogni record dello script conterra' una network con l'informazione della VLAN e del range IP, separati da una virgola; esempio:

Vlan 1, 172.16.14.0/20
Vlan 2, 193.206.80.0/24
#
#VLAN 3, 193.106.81.0/24
Vlan 4, 193.206.82.0/24
# skipday
Vlan 5, 193.206.83.0/24
...

Particolarita':

  • lo script accetta e ignora le righe vuote nel file di input
  • lo script accetta commenti (carattere "#"), purche' tale carattere sia il primo del record oppure il primo dopo solo spazi bianchi.
  • lo script schedula un task al giorno, per la scansione di un target, ed accetta il meta-comando #skipday, con il quale salta un giorno nella schedula.

Con il file in esempio, verranno create 4 schedule periodiche (rispettivamente il primo, il secondo, il terzo e il quinto giorno di programmazione, perche' al quarto record e' presente #skipday); quindi verranno creati 4 target (di nome Vlan 1, Vlan 2, Vlan 4, Vlan 5) e 4 task (di nome Vlan 1 scan, Vlan 2 scan, Vlan 4 scan, Vlan 5 scan). Il task Vlan 1 scan avra' come target Vlan 1 schedulato il giorno 1, e cosi' via.

Funzionamento dello script

Lo script deve essere eseguito sul sistema dove e' presente il servizio Greenbone dall'utente che gestisce il servizio (i docker di Greenbone), perche' ha a disposizione i comandi di gvm-cli.

Lo script e' particolarmente utile per rifare velocemente il setup iniziale personalizzato di Greenbone. A Frascati il numero di network da scansionare e' molto elevato (circa 100), per cui pensare di rifare a mano tutta la configurazione iniziale, tutte le schedule periodiche, tutti i target e i task e' molto tedioso e in pratica richiederebbe moltissimo tempo. Lo script permette di automatizzare tale procedura.

Sintassi:

./init-gce-config.pl [--netfile=<file>] [--startday=<giorno>] [--startmonth=<mese>] [--interval=<periodo in mesi>]
Gli argomenti consentiti sono:
  --netfile=<file>             (default = nets.dat)
  --startday=<giorno>          (integer: 1-31, default = 1)
  --startmonth=<mese>          (integer: 1-12, default = 1)
  --interval=<periodo in mesi> (integer: 1-12, default = 6)
  --version

Lo script puo' essere invocato semplicemente con il seguente comando:

./init-gce-config.pl

In questo caso legge le network dal file nets.dat. Per ogni network, crea un task, un target e una schedula a partire dalla data 1 gennaio (dell'anno successivo) con start alle ore 9:00 e con periodicita' di 6 mesi. La seconda network del file verra' schedulata il giorno successivo, sempre alle 9:00 e sempre con periodicita' di 6 mesi.

Altro esempio con i parametri di specializzazione:

./init-gce-config.pl --startday=2 --startmonth=12 --interval=3 --netfile=networks.dat

In questo caso le network verranno lette dal file network.dat e la prima schedula verra' programmata il giorno 2 dicembre (prossimo) alle ore 9:00; tutte le schedule avranno periodicita' di 3 mesi.

Chi lo volesse utilizzare lo puo' trovare qui (download)

Caso d'uso

Per la configurazione dei LNF, lo script e' stato lanciato 2 volte, avendo preparato 2 files di network distinti, uno per le reti ad indirizzamento pubblico e un altro per le reti ad indirizzamento privato (public-nets.dat , private-nets.dat).

./init-gce-config.pl --startday=2 --startmonth=1 --interval=6 --netfile=public-nets.dat
./init-gce-config.pl --startday=1 --startmonth=2 --interval=6 --netfile=private-nets.dat

Il primo schedula gli scan delle net pubbliche a partire dal 2 gennaio con periodicita' di 6 mesi.

Il secondo schedula gli scan delle net private a partire dall' 1 febbraio con periodicita' di 6 mesi.

Attenzione: la network assegnata alla "vlan 1 default" (che e' una /16), utilizzata per gli switch di rete di tutta la LAN, ai fini degli scan, e' stata divisa in 5 net /20 (non in 16, perche' solo le prime 5 sono popolate); questo perche' il singolo scan di Greenbone non accetta un numero di nodi > 4096 (vedere file private-nets.dat). Essendo tali net scarsamente popolate, per evitare che gli scan siano di durata eccessiva, si e' scelto di cambiare a mano, in tutti e 5 i target, il valore del parametro "Alive Test" da "Consider Alive" a "ICMP & ARP Ping", in modo che verra' fatta la scansione dei soli nodi che rispondono al ping.

2. Script per l'estrazione dei report di Greenbone

E' stato creato uno script per l'estrazione dei report degli scan eseguiti da Greenbone. Lo script legge lo stesso file di input (o un file di identico formato) preparato per lo script descritto al paragrafo 1. per il setup iniziale di Greenbone, quindi per ogni task ricava ed estrae l'ultimo report, nel formato desiderato, posizionandolo nella directory selezionata.

Anche in questo caso, lo script deve essere eseguito sul sistema dove e' presente il servizio Greenbone dallo stesso utente che gestisce il servizio (i docker di Greenbone), perche' ha a disposizione i comandi di gvm-cli.

Sintassi:

./gce-report.pl --netfile=<file> --format=<type> --reportdir=<dir> --mail=<address> --scp=<path>
Gli argomenti consentiti sono:
  --netfile=<file>             ( default = nets.dat )
  --reportdir=<dir>            ( default = ./reports/ )
  --format=<type>              ( XML | AXML | TXT | PDF | CSV | ITG, default = XML)
  --mail=<address>
  --scp=<path>
  --debug
  --version

Se l'opzione –mail non e' specificata lo script scrive sulla finestra di terminale le operazioni che compie ed in particolare i report che riesce ad estrarre. Se l'opzione –mail e' specificata, le stesse informazioni vengono inviate via mail all'indirizzo indicato e scritte anche su un file di nome gce-report.out.

E' possibile anche inoltrare i report via scp verso il path specificato nell'opzione –scp. In tal caso e' importante utilizzare le chiavi ssh per evitare che lo script richieda la password ad ogni trasferimento.

Con l'opzione –reportdir e' possibile specificare la directory locale dove lo script salvera' i report estratti. Inoltre con l'opzione –format e' possibile specificare il formato dei report tra quelli diponibili.

L'opzione –debug e' utile per aumentare la verbosita' dell'output.

Chi lo volesse utilizzare puo' trovarlo qui (download)

Caso d'uso

Ai LNF lo script viene utilizzato a crontab, con esecuzione ogni mezzora, per estrarre i report a mano a mano che i task in esecuzione vengono ultimati; quindi il record registrato nel crontab sulla macchina dove gira Greenbone e' il seguente:

15,45 * * * * /home/pistoni/gce-report.pl --format=PDF --mail=calcolo@lnf.infn.it

Quindi sul server web dei LNF e' presente un altro comando a crontab che scarica i reports estratti posizionandoli su una specifica directory AFS.

*/30 * * * * /usr/bin/rsync -az pistoni@gce.lnf.infn.it:/home/pistoni/reports/ /afs/lnf.infn.it/project/www/syshome/calcolo/gce/

Nota: nel caso specifico non si e' potuto utilizzare l'opzione –scp (come nel seguente esempio):

15,45 * * * * /home/pistoni/gce-report.pl --format=PDF --mail=calcolo@lnf.infn.it --scp=pistoni@slcalc.lnf.infn.it:/afs/lnf.infn.it/project/www/syshome/calcolo/gce/

perche' scp non e' in grado di scrivere su afs solo tramite le chiavi ssh (non prende il token AFS per poter scrivere). Ovviamente questo limite non sussiste per chi usa altre tipologie di file system condivisi (non AFS).

Massimo Pistoni

P.S. Ringraziamenti particolari a Leandro Lanzi per il grande lavoro fatto e per la chiarezza dei manuali.

strutture/lnf/dr/calcolo/sistemi/greenbone.txt · Last modified: 2023/02/10 09:49 by pistoni@infn.it

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki