Suricata è uno strumento di monitoraggio della rete che esamina ed elabora ogni pacchetto di traffico Internet che scorre attraverso il tuo server. Può generare eventi di registro, attivare avvisi e interrompere il traffico al rilevamento di attività sospette.
Puoi installare Suricata su una singola macchina per monitorarne il traffico o distribuirlo su un host gateway per scansionare tutto il traffico in entrata e in uscita da altri server ad esso collegati. Puoi combinare Suricata con Elasticsearch, Kibana e Filebeat per creare uno strumento SIEM (Security Information and Event Management).
In questo tutorial, installerai Suricata IDS insieme a ElasticStack su un server Rocky Linux 8. I vari componenti dello stack sono:
- Ricerca elastica per memorizzare, indicizzare, correlare e ricercare gli eventi di sicurezza dal server.
- Kibana per visualizzare i log archiviati in Elasticsearch.
- Filebeat per analizzare
eve.json
di Suricata log e invia ogni evento a Elasticsearch per l'elaborazione. - Suricata per scansionare il traffico di rete alla ricerca di eventi sospetti ed eliminare i pacchetti non validi.
Il tutorial è diviso in due parti, la prima parte si occuperà dell'installazione e della configurazione di Suricata e la seconda parte dell'installazione e della configurazione di Elastic Stack.
Installeremo Suricata e lo stack elastico su server diversi per il nostro tutorial.
Prerequisiti
-
I server che ospitano Elastic Stack e Suricata devono avere almeno 4 GB di RAM e 2 core CPU.
-
I server dovrebbero essere in grado di comunicare tra loro utilizzando indirizzi IP privati.
-
I server dovrebbero eseguire Rocky Linux 8 con un utente sudo non root.
-
Se desideri accedere ai dashboard di Kibana da qualsiasi luogo, configura un dominio (
kibana.example.com
) che punta al server su cui verrà installato Suricata. -
Installa i pacchetti essenziali su entrambi i server.
$ sudo dnf install yum-utils nano curl
Configura Firewall
PARTE 1
Passaggio 1 - Installa Suricata
Per installare Suricata, devi aggiungere il repository dei pacchetti della Open Information Security Foundation (OISF) al tuo server.
$ sudo dnf install 'dnf-command(copr)'$ sudo dnf copr enable @oisf/suricata-6.0
Il primo comando abilita i progetti della Community (copr
) per il dnf
programma di installazione del pacchetto. Il secondo comando abilita e aggiunge il repository OISF al tuo sistema. suricata-6.0
abilita il repository per l'ultima versione stabile del software. Premi y
e ENTER
ogni volta che ti viene richiesto.
Quindi, aggiungi il repository EPEL.
$ sudo dnf install epel-release
Installa Suricata.
$ sudo dnf install suricata
Abilita il servizio Suricata.
$ sudo systemctl enable suricata
Fase 2 - Configura Suricata
Suricata memorizza la sua configurazione nel /etc/suricata/suricata.yaml
file. La modalità predefinita per Suricata è la modalità IDS (Intrusion Detection System), in cui il traffico viene solo registrato e non interrotto. Se non conosci Suricata, dovresti lasciare la modalità invariata. Dopo averlo configurato e appreso di più, puoi attivare la modalità IPS (Intrusion Prevention System).
Abilita ID comunità
Il campo Community ID semplifica la correlazione dei dati tra i record generati da diversi strumenti di monitoraggio. Poiché utilizzeremo Suricata con Elasticsearch, l'abilitazione dell'ID community può essere utile.
Apri il file /etc/suricata/suricata.yaml
per la modifica.
$ sudo nano /etc/suricata/suricata.yaml
Individua la riga # Community Flow ID
e imposta il valore della variabile community-id
su true
.
Ora, i tuoi eventi conterranno un ID come 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=
che puoi utilizzare per abbinare i set di dati tra diversi strumenti di monitoraggio.
Seleziona interfaccia di rete
Il file di configurazione predefinito di Suricata ispeziona il traffico su eth0
dispositivo/interfaccia di rete. Se il tuo server utilizza un'interfaccia di rete diversa, dovrai aggiornarla nella configurazione.
Controlla il nome del dispositivo della tua interfaccia di rete usando il seguente comando.
$ ip -p -j route mostra default
Riceverai un output come il seguente.
[ { "dst":"default", "gateway":"164.90.192.1", "dev":"eth0", "protocol":"static", "metric":100, "flags":[ ] } ]
Lo dev
variabile si riferisce al dispositivo di rete. Nel nostro output, mostra eth0
come dispositivo di rete. Il tuo output potrebbe essere diverso a seconda del tuo sistema.
Ora che conosci il nome del tuo dispositivo, apri il file di configurazione.
$ sudo nano /etc/suricata/suricata.yaml
Trova la riga af-packet:
intorno alla riga numero 580. Sotto di essa, imposta il valore della variabile interface
al nome del dispositivo per il tuo sistema.
# Pacchetto di supporto per l'acquisizione ad alta velocità di Linux:- interfaccia:eth0 # Numero di thread di ricezione. "auto" usa il numero di core #threads:auto # Default clusterid. AF_PACKET caricherà i pacchetti di bilanciamento in base al flusso. cluster-id:99. . .
Se vuoi aggiungere interfacce aggiuntive, puoi farlo aggiungendole in fondo al af-packet
sezione intorno alla linea 650.
Per aggiungere una nuova interfaccia, inseriscila appena sopra - interface: default
sezione come mostrato di seguito.
# Per la configurazione di eBPF e XDP inclusi bypass, filtro e bilanciamento del carico, # vedere doc/userguide/capture-hardware/ebpf-xdp.rst per maggiori informazioni. - interfaccia:enp0s1 cluster-id:98... - interfaccia:default #threads:auto #use-mmap:no #tpacket-v3:si
Abbiamo aggiunto una nuova interfaccia enp0s1
e un valore univoco per cluster-id
variabile nel nostro esempio. Devi includere un ID cluster univoco in ogni interfaccia che aggiungi.
Ricarica regole live
Devi riavviare Suricata ogni volta che aggiungi, rimuovi e modifichi le sue regole. Abilitando Live Rule, Suricata può elaborare qualsiasi modifica alle regole senza riavviare.
Per abilitare il caricamento in tempo reale, aggiungi le seguenti righe nella parte inferiore del file di configurazione.
Con il caricamento in tempo reale abilitato, puoi utilizzare il comando seguente per ricaricare le regole senza riavviare il processo Suricata.
$ sudo kill -usr2 $(pidof suricata)
Il $(pidof suricata)
flag individua l'ID processo del processo Suricata. Il -usr2
parte dell'kill
il comando invia un SIGUSR2
segnale al processo di Suricata. Il SIGUSR2
signal è configurato con Suricata per ricaricare le regole.
Al termine, salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Configura i permessi della directory
Suricata ha creato automaticamente un utente di sistema e un gruppo denominato suricata
durante il processo di installazione. È necessario fornire le autorizzazioni di directory appropriate affinché l'installazione funzioni correttamente.
Esegui il comando seguente per impostare suricata
come il gruppo per le directory di Suricata.
$ sudo chgrp -R suricata /etc/suricata$ sudo chgrp -R suricata /var/lib/suricata/rules$ sudo chgrp -R suricata /var/lib/suricata/update$ sudo chgrp -R suricata /var/ log/suricata
Imposta i permessi del gruppo per la lettura e la scrittura.
$ sudo chmod -R g+r /etc/suricata/$ sudo chmod -R g+rw /var/lib/suricata/rules$ sudo chmod -R g+rw /var/lib/suricata/update$ sudo chmod -R g+rw /var/log/suricata
Aggiungi il tuo nome utente attuale a suricata gruppo in modo da poter eseguire le operazioni direttamente senza bisogno di sudo.
$ sudo usermod -a -G suricata $USER
Per applicare la nuova appartenenza al gruppo, esci dal server e riconnettiti oppure digita quanto segue:
$ su - ${USER}
Ti verrà richiesto di inserire la password dell'utente per continuare.
Conferma che il tuo utente è ora aggiunto a suricata raggruppare digitando:
$ id -nnomeutente sudo suricata
Fase 3 - Configura le regole di Suricata
Suricata, per impostazione predefinita, utilizza solo un insieme limitato di regole per rilevare il traffico di rete. Puoi aggiungere più set di regole da provider esterni utilizzando uno strumento chiamato suricata-update
. Esegui il comando seguente per includere regole aggiuntive.
$ suricata-update16/2/2022 -- 07:00:16 --- Using data-directory /var/lib/suricata.16/2/2022 -- 07:00:16 - -- Utilizzo della configurazione di Suricata /etc/suricata/suricata.yaml16/2/2022 -- 07:00:16 - -- Utilizzo di /usr/share/suricata/rules per le regole fornite da Suricata...... 16/2/2022 -- 07:00:16 - -- Nessuna fonte configurata, utilizzerà Emerging Threats Open('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz', None, True)16/2/2022 -- 07:00:16 - -- Controllo https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz.md5.16/2/2022 -- 07:00:16 - -- Recupero https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar. gz. 100% - 3162050/3162050.....16/2/2022 -- 07:00:23 - -- Scrivere regole in /var/lib/suricata/rules/suricata.rules:total:32004; abilitato:24611; aggiunto:8; rimosso 1; modificato:121816/2/2022 -- 07:00:23 - -- Scrittura /var/lib/suricata/rules/classification.config16/2/2022 -- 07:00:23 - -- Test con suricata -T.16/2/2022 -- 07:01:16 - -- Fatto.
Aggiungi provider di set di regole
Puoi espandere le regole di Suricata aggiungendo più provider. Può recuperare le regole da una varietà di fornitori gratuiti e commerciali.
È possibile elencare l'elenco di provider predefinito utilizzando il comando seguente.
$ suricata-update list-sources
Ad esempio, se vuoi includere il tgreen/hunting
set di regole, puoi abilitarlo con il seguente comando.
$ suricata-update enable-source tgreen/hunting
Esegui l'suricata-update
comando di nuovo per scaricare e aggiornare le nuove regole.
Fase 4:convalida della configurazione di Suricata
Suricata viene fornito con uno strumento di convalida per verificare la presenza di errori nel file di configurazione e nelle regole. Esegui il comando seguente per eseguire lo strumento di convalida.
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v22/2/2022 -- 23:20:10 -- Esecuzione di suricata in modalità test22/2/2022 -- 23:20 :10 - - Questa è Suricata versione 6.0.4 RELEASE in esecuzione in modalità SISTEMA22/2/2022 -- 23:20:10 - - CPU/core online:222/2/2022 -- 23:20 :10 - - eliminato il cappuccio per il thread principale22/2/2022 -- 23:20:10 - - dispositivo di output rapido (normale) inizializzato:fast.log22/2/2022 -- 23:20:10 - - dispositivo di output eve-log (normale) inizializzato:eve.json22/2/2022 -- 23:20:10 - - dispositivo di output statistiche (normale) inizializzato:stats.log22/2/2022 -- 23:20:21 - - 1 file di regole elaborato. 24611 regole caricate correttamente, 0 regole non riuscite22/2/2022 -- 23:20:21 - - Configurazione soglia analizzata:0 regole trovate22/2/2022 -- 23:20:21 - - 24614 firme elaborate. 1216 sono regole solo IP, 4120 stanno ispezionando il payload del pacchetto, 19074 ispezionano il livello dell'applicazione, 108 sono solo eventi del decoder22/2/2022 -- 23:21:02 - - La configurazione fornita è stata caricata correttamente. Exiting.22/2/2022 -- 23:21:03 - - pulizia della struttura del raggruppamento delle firme... completa
Il -T
flag indica a Suricata di essere eseguito in modalità test, il -c
flag configura la posizione del file di configurazione e il -v
flag stampa l'output dettagliato del comando. A seconda della configurazione del tuo sistema e del numero di regole aggiunte, il completamento del comando può richiedere alcuni minuti.
Fase 5 - Esecuzione di Suricata
Ora che Suricata è configurato e configurato, è il momento di eseguire l'applicazione.
$ sudo systemctl start suricata
Controlla lo stato del processo.
$ sudo systemctl status suricata
Dovresti vedere il seguente output se tutto funziona correttamente.
? suricata.service - Suricata Intrusion Detection Service Caricato:caricato (/usr/lib/systemd/system/suricata.service; abilitato; preimpostazione del fornitore:disabilitato) Attivo:attivo (in esecuzione) da mer 16-02-2022 07:14:22 UTC; 32min fa Documenti:man:suricata(1) Processo:1494 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS) PID principale:1496 (Suricata-Main) Compiti :8 (limite:23479) Memoria:367.5M CGroup:/system.slice/suricata.service ??1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid - i eth0 --user suricataFeb 16 07:14:22 suricata systemd[1]:Avvio del servizio di rilevamento delle intrusioni di Suricata...Feb 16 07:14:22 suricata systemd[1]:Avvio del servizio di rilevamento delle intrusioni di Suricata.
Il processo può richiedere alcuni minuti per completare l'analisi di tutte le regole. Pertanto, il controllo dello stato di cui sopra non è un'indicazione completa del fatto che Suricata sia attivo e pronto. Puoi monitorare il file di registro per quello usando il seguente comando.
$ sudo tail -f /var/log/suricata/suricata.log
Se vedi la seguente riga nel file di registro, significa che Suricata è in esecuzione e pronto per monitorare il traffico di rete.
16/02/2022 -- 07:18:39 -- Tutti i thread di acquisizione AFP sono in esecuzione.
Fase 6 - Test delle regole di Suricata
Verificheremo se Suricata sta rilevando traffico sospetto. La guida Suricata consiglia di testare la regola ET Open numero 2100498 usando il comando seguente.
$ curl http://testmynids.org/uid/index.html
Riceverai la seguente risposta.
uid=0(radice) gid=0(radice) gruppi=0(radice)
Il comando precedente pretende di restituire l'output di id
comando che può essere eseguito su un sistema compromesso. Per verificare se Suricata ha rilevato il traffico, è necessario controllare il file di registro utilizzando il numero di regola specificato.
$ grep 2100498 /var/log/suricata/fast.log
Se la tua richiesta utilizzava IPv6, dovresti vedere il seguente output.
22/02/2022-23:24:33.997371 [**] [1:2100498:7] GPL ATTACK_RESPONSE controllo ID restituito root [**] [Classificazione:traffico potenzialmente negativo] [Priorità:2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80 -> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468
Se la tua richiesta utilizzava IPv4, vedresti il seguente output.
22/02/2022-23:21:46.783476 [**] [1:2100498:7] GPL ATTACK_RESPONSE controllo ID restituito root [**] [Classificazione:traffico potenzialmente negativo] [Priorità:2] {TCP} 204.246.178.81:80 -> 164.90.192.1:36364
Suricata registra anche gli eventi in /var/log/suricata/eve.log
file utilizzando il formato JSON. Per leggere e interpretare queste regole, devi installare jq
che non rientra nell'ambito di questo tutorial.
Abbiamo finito con la prima parte del tutorial, in cui abbiamo installato Suricata e l'abbiamo testato. La parte successiva prevede l'installazione dello stack ELK e l'impostazione per visualizzare Suricata e i suoi log. Questa seconda parte del tutorial dovrebbe essere eseguita sul secondo server se non diversamente specificato.
Passaggio 7:installazione di Elasticsearch e Kibana
Il primo passaggio nell'installazione di Elasticsearch prevede l'aggiunta della chiave GPG elastica al tuo server.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Crea un repository per il pacchetto Elasticsearch creando e aprendo il file /etc/yum/yum.repos.d/elasticsearch.repo
per la modifica.
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Incolla il seguente codice al suo interno.
[elasticsearch]name=repository Elasticsearch per packagesbaseurl 7.x=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- elasticsearchenabled=0autorefresh=1type=rpm-md
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Installa Elasticsearch e Kibana.
$ sudo dnf install --enablerepo=elasticsearch elasticsearch kibana
Devi usare il flag --enablerepo=elasticsearch
ogni volta da allora, abbiamo mantenuto il repository disabilitato per impostazione predefinita. Ciò impedisce l'aggiornamento accidentale di questi pacchetti.
Individua l'indirizzo IP privato del tuo server utilizzando il seguente comando.
$ ip -breve indirizzo showlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64eth1 UP 10.133.0.3/16 fe80::906f:b5ff:fec4:c7b8/64
Annota l'IP privato del tuo server (10.133.0.3 in questo caso). Lo chiameremo your_private_IP
. L'indirizzo IP pubblico del server (164.90.205.77) sarà indicato come your_public_IP
nel restante tutorial. Inoltre, prendi nota del nome di rete del tuo server, eth1
.
Passaggio 8 - Configura Elasticsearch
Elasticsearch memorizza la sua configurazione in /etc/elasticsearch/elasticsearch.yml
file. Apri il file per la modifica.
$ sudo nano /etc/elasticsearch/elasticsearch.yml
Elasticsearch accetta solo connessioni locali per impostazione predefinita. Dobbiamo cambiarlo in modo che Kibana possa accedervi tramite l'indirizzo IP privato.
Trova la riga #network.host: 192.168.0.1
e aggiungi la seguente riga subito sotto, come mostrato di seguito.
# Per impostazione predefinita, Elasticsearch è accessibile solo su localhost. Imposta un indirizzo# diverso qui per esporre questo nodo sulla rete:##network.host:192.168.0.1network.bind_host:["127.0.0.1", "your_private_IP"]## Per impostazione predefinita, Elasticsearch ascolta il traffico HTTP sul primo porta libera trova # a partire da 9200. Imposta una porta HTTP specifica qui:
Ciò garantirà che Elastic possa ancora accettare connessioni locali pur essendo disponibile per Kibana tramite l'indirizzo IP privato.
Il passaggio successivo consiste nell'attivare alcune funzionalità di sicurezza e assicurarsi che Elastic sia configurato per l'esecuzione su un singolo nodo. Per farlo, aggiungi le seguenti righe alla fine del file.
Se intendi utilizzare più nodi di ricerca elastici, puoi omettere la prima riga.
Al termine, salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Configura Firewall
Aggiungi le regole firewall appropriate per Elasticsearch in modo che sia accessibile tramite la rete privata.
$ sudo firewall-cmd --permanent --zone=internal --change-interface=eth1$ sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch$ sudo firewall-cmd -- permanente --zone=internal --add-service=kibana$ sudo firewall-cmd --reload
Assicurati di scegliere il nome dell'interfaccia nel primo comando come quello ottenuto dal passaggio 7. I comandi precedenti modificano la zona predefinita del Firewall in porte interne e aperte 9200, 9300 per Elasticsearch e porta 5601 per Kibana.
Avvia Elasticsearch
Ora che hai configurato Elasticsearch, è il momento di avviare il servizio.
$ sudo systemctl avvia elasticsearch
Crea password Elasticsearch
Dopo aver abilitato l'impostazione di sicurezza di Elasticsearch, il passaggio successivo consiste nel generare alcune password per l'utente predefinito. Elasticsearch viene fornito con un'utilità per la creazione di password su /usr/share/elasticsearch/bin/elasticsearch-setup-passwords
che può generare password casuali.
Crea le password.
$ cd /usr/share/elasticsearch/bin$ sudo ./elasticsearch-setup-passwords auto
Otterrai un output come il seguente. Premi y
per continuare quando richiesto.
Avvio della configurazione delle password per gli utenti riservati elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.Le password verranno generate casualmente e stampate sulla console.Conferma di voler continuare [s/n] Password yChanged per l'utente apm_systemPASSWORD apm_system =EtwMg8maU67o5tvD5rseChanged password per l'utente kibana_systemPASSWORD kibana_system =dTanR7Q2HtgDtATRvuJvChanged password per l'utente kibanaPASSWORD Kibana =dTanR7Q2HtgDtATRvuJvChanged password per l'utente logstash_systemPASSWORD logstash_system =XGSjxNktuNMWVfGYiboxChanged password per l'utente beats_systemPASSWORD beats_system =JXTr7CeHkMue608qVTQaChanged password per l'utente remote_monitoring_userPASSWORD remote_monitoring_user =Q6JTJNl3lPy0fhy6QuMPChanged password per l'utente elasticPASSWORD elastica =bd1YJfhSa8RC8SMvTIwg
Puoi eseguire l'utilità solo una volta, quindi salva tutte le password in un luogo sicuro.
Fase 9 - Configura Kibana
Il primo passo nella configurazione di Kibana è abilitare xpack
funzione di sicurezza generando chiavi segrete. Kibana utilizza queste chiavi segrete per archiviare i dati in Elasticsearch. È possibile accedere all'utilità per generare chiavi segrete da /usr/share/kibana/bin
directory.
$ cd /usr/share/kibana/bin/$ sudo ./kibana-encryption-keys generate -q --force
Il -q
flag sopprime le istruzioni di comando e il --force
flag assicura che vengano generati nuovi segreti. Riceverai un output come il seguente.
xpack.encryptedSavedObjects.encryptionKey:0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey:d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey:7ba0e2prea02747bb90fb0f9a3c267b9>Copia l'output. Apri il file di configurazione di Kibana in
/etc/kibana/kibana.yml
per la modifica.$ sudo nano /etc/kibana/kibana.ymlIncolla il codice del comando precedente alla fine del file.
. . .# Specifica la locale da utilizzare per tutte le stringhe localizzabili, date e formati numerici.# Le lingue supportate sono le seguenti:inglese - en , per impostazione predefinita, cinese - zh-CN .#i18n.locale:"en"xpack.encryptedSavedObjects.encryptionKey :0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey:d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey:7ba0e2a02747bb90fb0f9a3c267b99ed
Configura porta Kibana
Kibana deve essere configurato in modo che sia accessibile sull'indirizzo IP privato del server. Trova la riga #server.host: "localhost"
nel file e aggiungi la riga seguente subito sotto come mostrato.
# Kibana è servito da un server back-end. Questa impostazione specifica la porta da utilizzare.#server.port:5601# Specifica l'indirizzo a cui si collegherà il server Kibana. Gli indirizzi IP e i nomi host sono entrambi valori validi.# Il valore predefinito è 'localhost', il che di solito significa che le macchine remote non saranno in grado di connettersi.# Per consentire connessioni da utenti remoti, impostare questo parametro su un indirizzo non di loopback.#server .host:"localhost"server.host:"tuo_IP_privato"
Al termine, salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Configura Kibana Access
Il passaggio successivo consiste nel creare un nome utente e una password che Kibana possa utilizzare per l'autenticazione. Puoi farlo modificando direttamente il file di configurazione di Kibana, ma può causare un problema di sicurezza. Il metodo sicuro prevede l'uso di kibana-keystore
applicazione.
Esegui i seguenti comandi per impostare un nome utente. Inserisci kibana_system
come nome utente.
$ cd /usr/share/kibana/bin$ sudo ./kibana-keystore aggiungi elasticsearch.usernameInserisci il valore per elasticsearch.username:*************
Eseguire nuovamente il comando per impostare la password. Assicurati di utilizzare la password che hai creato per Kibana nel passaggio 8. Per il nostro tutorial, la password è dTanR7Q2HtgDtATRvuJv
.
$ sudo ./kibana-keystore aggiungi elasticsearch.passwordInserisci il valore per elasticsearch.password:********************
Avvio di Kibana
Ora che hai configurato l'accesso sicuro e la rete per Kibana, avvia il processo.
$ sudo systemctl start kibana
Controlla lo stato per vedere se è in esecuzione.
$ sudo systemctl status kibana
Passaggio 10 - Installa e configura Filebeat
È importante notare che installeremo Filebeat sul server Suricata. Quindi torna ad esso e aggiungi la chiave GPG elastica per iniziare.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Crea e apri il repository elastico.
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Incolla il seguente codice.
[elasticsearch]name=repository Elasticsearch per packagesbaseurl 7.x=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- elasticsearchenabled=0autorefresh=1type=rpm-md
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Installa Filebeat.
$ sudo dnf install --enablerepo=elasticsearch filebeat
Filebeat memorizza la sua configurazione in /etc/filebeat/filebeat.yml
file. Aprilo per la modifica.
$ sudo nano /etc/filebeat/filebeat.yml
La prima cosa che devi fare è collegarlo alla dashboard di Kibana. Trova la riga #host: "localhost:5601"
nel Kibana sezione e aggiungi la riga seguente proprio sotto di essa come mostrato.
Quindi, trova l'Output Elasticsearch sezione del file e modifica i valori di hosts
, username
e password
come mostrato di seguito. Per il nome utente, scegli elastic
come valore e per la password, utilizza il valore generato nel passaggio 8 di questo tutorial.
output.elasticsearch:# Array di host a cui connettersi. host:["your_private_IP:9200"] # Protocollo - `http` (predefinito) o `https`. #protocol:"https" # Credenziali di autenticazione:chiave API o nome utente/password. #api_key:"id:api_key" nome utente:"elastico" password:"bd1YJfhSa8RC8SMvTIwg". . .
Al termine, salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Quindi, abilita il modulo Suricata integrato in Filebeat.
I moduli $ sudo filebeat abilitano suricata
Il passaggio finale nella configurazione di Filebeat consiste nel caricare i dashboard e le pipeline SIEM in Elasticsearch utilizzando la filebeat setup
comando.
impostazione $ sudo filebeat
Il completamento del comando potrebbe richiedere alcuni minuti. Al termine, dovresti ricevere il seguente output.
La sovrascrittura del criterio ILM è disabilitata. Imposta `setup.ilm.overwrite:true` per l'abilitazione.Configurazione dell'indice completata.Caricamento dei dashboard (Kibana deve essere in esecuzione e raggiungibile)Dashboard caricatiImpostazione di ML tramite setup --machine-learning verrà rimosso in 8.0.0. Utilizza invece l'app ML. Maggiori informazioni:https://www.elastic.co/guide/en/machine-learning/current/index.htmlNon è possibile caricare lavori ML in un Elasticsearch 8.0.0 o successivo utilizzando il Beat.Loaded configurazioni di processi di machine learningLoaded Ingest pipelines
Avvia il servizio Filebeat.
$ sudo systemctl avvia filebeat
Verifica lo stato del servizio.
$ sudo systemctl status filebeat
Passaggio 11 - Accesso al dashboard di Kibana
Poiché KIbana è configurato per accedere a Elasticsearch solo tramite il suo indirizzo IP privato, hai due opzioni per accedervi. Il primo metodo consiste nell'utilizzare un tunnel SSH al server Elasticsearch dal tuo PC. Questo inoltrerà la porta 5601 dal tuo PC all'indirizzo IP privato del server e sarai in grado di accedere a Kibana dal tuo PC su http://localhost:5601
. Ma questo metodo significa che non potrai accedervi da nessun'altra parte.
L'opzione è installare Nginx sul tuo server Suricata e utilizzalo come proxy inverso per accedere al server di Elasticsearch tramite il suo indirizzo IP privato. Discuteremo in entrambi i modi. Puoi scegliere in entrambi i modi in base alle tue esigenze.
Utilizzo del tunnel locale SSH
Se utilizzi Windows 10 o Windows 11, puoi eseguire SSH LocalTunnel da Windows Powershell. Su Linux o macOS, puoi usare il terminale. Probabilmente dovrai configurare l'accesso SSH se non l'hai già fatto.
Esegui il seguente comando nel terminale del tuo computer per creare il tunnel SSH.
$ ssh -L 5601:your_private_IP:5601 [email protetta]_public_IP -N
- Il
-L
flag si riferisce al tunnel SSH locale, che inoltra il traffico dalla porta del tuo PC al server. - Il
private_IP:5601
è l'indirizzo IP a cui viene inoltrato il traffico sul server. In questo caso, sostituiscilo con l'indirizzo IP privato del tuo server Elasticsearch. - Il
your_public_IP
è l'indirizzo IP pubblico del server Elasticsearch, utilizzato per aprire una connessione SSH. - Il
-N
flag dice a OpenSSH di non eseguire alcun comando ma di mantenere attiva la connessione finché il tunnel è in esecuzione.
Ora che il tunnel è aperto, puoi accedere a Kibana aprendo l'URL http://localhost:5601
sul browser del tuo PC. Otterrai la seguente schermata.
Dovrai mantenere il comando in esecuzione per tutto il tempo necessario per accedere a Kibana. Premi Ctrl + C nel tuo terminale per chiudere il tunnel.
Utilizzo del proxy inverso Nginx
Questo metodo è più adatto se desideri accedere alla dashboard da qualsiasi parte del mondo.
Configura Firewall
Prima di procedere oltre, è necessario aprire le porte HTTP e HTTPS nel firewall.
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Ricarica il firewall per abilitare le modifiche.
$ sudo firewall-cmd --reload
Installa e configura SSL
Il primo passo è installare il certificato SSL Let's Encrypt. Poiché abbiamo già impostato il repository EPEL, installa lo strumento Certbot.
$ sudo dnf install certbot
Genera il certificato SSL per il dominio kibana.example.com
.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protetta] -d kibana.example.com
Il comando precedente scaricherà un certificato in /etc/letsencrypt/live/kibana.example.com
directory sul tuo server.
Genera un gruppo Diffie-Hellman certificato.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Crea una directory radice web di sfida per il rinnovo automatico di Let's Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Crea un Cron Job per rinnovare l'SSL. Verrà eseguito ogni giorno per controllare il certificato e rinnovarlo se necessario. Per questo, prima crea il file /etc/cron.daily/certbot-renew
e aprilo per la modifica.
$ sudo nano /etc/cron.daily/certbot-renew
Incolla il seguente codice.
#!/bin/shcertbot rinnovo --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Modifica le autorizzazioni sul file dell'attività per renderlo eseguibile.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Installa e configura Nginx
Rocket Linux 8.5 viene fornito con l'ultima versione stabile di Nginx come modulo. Installalo usando il seguente comando.
$ sudo dnf module install nginx:1.20
Puoi controllare la versione che desideri installare utilizzando il seguente comando.
$ dnf module list nginxRocky Linux 8 - AppStreamName Stream Profiles Summarynginx 1.14 [d] common [d] nginx webservernginx 1.16 common [d] nginx webservernginx 1.18 common [d] nginx webservernginx 1.20 [e] common [d] [i] nginx webserverExtra Packages for Enterprise Linux Modular 8 - x86_64Name Stream Profiles Summarynginx mainline common nginx webservernginx 1.20 [e] common [d] [i] nginx webserver
Confirm the Nginx installation.
$ nginx -vnginx version 1.20.1
Abilita il servizio Nginx.
$ sudo systemctl abilita nginx
Create and open the Nginx configuration file for Kibana.
$ sudo nano /etc/nginx/conf.d/kibana.conf
Incolla il codice seguente al suo interno. Replace the IP address with the private IP address of your Elasticsearch server.
server { ascolta 80; ascolta [::]:80; server_name kibana.example.com; return 301 https://$host$request_uri;}server { server_name kibana.example.com; set di caratteri utf-8; ascolta 443 ssl http2; ascolta [::]:443 ssl http2; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1d; cache_sessione_ssl condivisa:MozSSL:10m; ssl_session_tickets disattivati; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; risolutore 8.8.8.8; ssl_pinzatura attiva; ssl_stapling_verify attivato; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://your_private_IP:5601; proxy_set_header Host $host; proxy_set_header X-Real-IP $indirizzo_remoto; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $schema; }}
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Apri il file /etc/nginx/nginx.conf
per la modifica.
$ sudo nano /etc/nginx/nginx.conf
Aggiungi la riga seguente prima della riga include /etc/nginx/conf.d/*.conf;
.
nome_server_hash_bucket_size 64;
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Verify the configuration.
$ sudo nginx -tnginx:la sintassi del file di configurazione /etc/nginx/nginx.conf è oknginx:il test del file di configurazione /etc/nginx/nginx.conf è riuscito
Start the Nginx service.
$ sudo systemctl start nginx
Your Kibana dashboard should be accessible via the URL https://kibana.example.com
from anywhere you want.
Step 12 - Managing Kibana Dashboards
Before proceeding further with managing the dashboards, you need to add the base URL field in Kibana's configuration.
Open Kibana's configuration file.
$ sudo nano /etc/kibana/kibana.yml
Find the commented line #server.publicBaseUrl: ""
and change it as follows by removing the hash in front of it.
server.publicBaseUrl:"https://kibana.example.com"
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Restart the Kibana service.
$ sudo systemctl restart kibana
Wait for a few minutes and load the URL https://kibana.example.com
nel tuo browser. Log in with the username elastic
and the password you generated before (bd1YJfhSa8RC8SMvTIwg
) and you will get the following screen.
Type type:data suricata
in the search box at the top to locate Suricata's information.
Click the first result ([Filebeat Suricata] Alert Overview ), and you will get a screen similar to the following. By default, it shows the entries for only the last 15 minutes, but we are displaying it over a larger timespan to show more data for the tutorial.
Click on the Events button to view all the logged events.
On scrolling down on events and alert pages, you can identify each event and alert by the type of protocol, the source and destination ports, and the IP address of the source. You can also view the countries from where the traffic originated.
You can use Kibana and Filebeat to access and generate other types of dashboards. One of the useful in-built dashboards that you can right away is the Security dashboard. Click on the Network dashboard from the left hamburger menu, and you will get the following screen.
You can add more dashboards like Nginx by enabling and configuring in-built Filebeat modules.
Conclusione
This concludes the tutorial for installing and configuring Suricata IDS with Elastic Stack on a Rocky Linux 8 based server. You also configured Nginx as a reverse proxy to access Kibana dashboards externally. Se hai domande, pubblicale nei commenti qui sotto.