GNU/Linux >> Linux Esercitazione >  >> Rocky Linux

Come installare e configurare Suricata IDS insieme a Elastic Stack su Rocky Linux 8

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 .

. . . # Community Flow ID # Aggiunge un campo 'community_id' ai record EVE. Questi hanno lo scopo di fornire # record un ID flusso prevedibile che può essere utilizzato per abbinare i record a # output di altri strumenti come Zeek (Bro). # # Prende un "seme" che deve essere lo stesso in tutti i sensori e gli strumenti # per rendere l'ID meno prevedibile. # abilita/disabilita la funzione ID comunità. community-id:vero. . .

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.

. . .detect-engine:- rule-reload:true

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.

. . .discovery.type:single-nodexpack.security.enabled:true

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.yml

Incolla 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.

. . .# A partire da Beats versione 6.0.0, i dashboard vengono caricati tramite l'API Kibana.# Ciò richiede una configurazione dell'endpoint Kibana.setup.kibana:# Kibana Host # Lo schema e la porta possono essere omessi e verranno impostati sul valore predefinito ( http e 5601) # Nel caso in cui specifichi un percorso aggiuntivo, è richiesto lo schema:http://localhost:5601/path # Gli indirizzi IPv6 devono sempre essere definiti come:https://[2001:db8::1]:5601 #host:"localhost:5601" host:"your_private_IP:5601". . .

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.


Rocky Linux
  1. Installa e configura Elasticsearch su Rocky Linux 8

  2. Come installare e configurare la finestra mobile in Rocky Linux/Centos 8

  3. Come installare e configurare Ansible su Rocky Linux/CentOS 8

  4. Come installare e configurare Elasticsearch su Rocky Linux 8

  5. Come installare e configurare TensorFlow su Rocky Linux 8

Come installare lo stack LAMP su Rocky Linux 8

Come installare e configurare OpenCV su Rocky Linux 8.4

Come installare Docker su Rocky Linux e AlmaLinux

Come installare MongoDB su Rocky Linux e AlmaLinux

Come installare Java 16 in Rocky Linux e AlmaLinux

Come installare e configurare Caddy Web Server con PHP su Rocky Linux 8