GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Suricata IDS con ELK e Web Frontend su Ubuntu 18.04 LTS

Suricata è un IDS / IPS in grado di utilizzare minacce emergenti e set di regole VRT come Snort e Sagan. Questo tutorial mostra l'installazione e la configurazione del Suricata Intrusion Detection System su un server Ubuntu 18.04 (Bionic Beaver).

In questo howto assumiamo che tutti i comandi vengano eseguiti come root. In caso contrario è necessario aggiungere sudo prima di ogni comando.

Per prima cosa installiamo alcune dipendenze:

apt -y install libpcre3 libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev libjansson-dev pkg-config libnetfilter-queue-dev geoip-bin geoip-database geoipupdate apt-transport-https

Suricata

add-apt-repository ppa:oisf/suricata-stable
apt-get update

Quindi puoi installare l'ultimo Suricata stabile con:

apt-get install suricata

Poiché eth0 è codificato in suricata (riconosciuto come un bug), è necessario sostituire eth0 con il nome della scheda di rete corretto.

nano /etc/netplan/50-cloud-init.yaml

E annota (copia) il nome effettivo della scheda di rete.

network:
ethernets:
enp0s3:
....

Nel mio caso enp0s3

nano /etc/suricata/suricata.yml

E sostituisci tutte le istanze di eth0 con il nome effettivo dell'adattatore per il tuo sistema.

nano /etc/default/suricata

E sostituisci tutte le istanze di eth0 con il nome effettivo dell'adattatore per il tuo sistema.

Aggiornamento Suricata

Ora installiamo suricata-update per aggiornare e scaricare le regole di suricata.

apt install python-pip
pip install pyyaml
pip install https://github.com/OISF/suricata-update/archive/master.zip

Per aggiornare suricata-update esegui:

pip install --pre --upgrade suricata-update

Suricata-update necessita del seguente accesso:

Directory /etc/suricata:accesso in lettura
Directory /var/lib/suricata/rules:accesso in lettura/scrittura
Directory /var/lib/suricata/update:accesso in lettura/scrittura

Un'opzione è semplicemente eseguire suricata-update come root o con sudo o con sudo -u suricata suricata-update

Aggiorna le tue regole

Senza eseguire alcuna configurazione, l'operazione predefinita di suricata-update è utilizzare il set di regole Emerging Threats Open.

suricata-update

Questo comando:

Cerca il programma suricata nel tuo percorso per determinarne la versione.

Cerca /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf e /etc/suricata/modify.conf per cercare i filtri da applicare alle regole scaricate. i file sono facoltativi e non devono esistere.

Scarica il set di regole Emerging Threats Open per la tua versione di Suricata, per impostazione predefinita 4.0.0 se non trovata.

Applica abilita, disabilita, elimina e modifica i filtri caricati sopra.
Scrivi le regole in /var/lib/suricata/rules/suricata.rules.

Esegui Suricata in modalità test su /var/lib/suricata/rules/suricata.rules.

Suricata-Update adotta una convenzione diversa per governare i file rispetto a Suricata tradizionalmente. La differenza più evidente è che le regole sono memorizzate per impostazione predefinita in /var/lib/suricata/rules/suricata.rules.

Un modo per caricare le regole è utilizzare l'opzione della riga di comando -S Suricata. L'altro è aggiornare il tuo suricata.yaml in modo che assomigli a questo:

default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules

Questo sarà il formato futuro di Suricata, quindi usarlo è a prova di futuro.

Scopri altre fonti di regole disponibili

Per prima cosa aggiorna l'indice di origine della regola con il comando update-sources:

suricata-update update-sources

Sarà simile a questo:

Questo comando aggiornerà suricata-update con tutte le fonti di regole disponibili.

suricata-update list-sources

Sarà simile a questo:

Ora abiliteremo tutte le fonti di regole (gratuite), per una fonte a pagamento dovrai avere un account e ovviamente pagarlo. Quando abiliti una fonte a pagamento ti verrà chiesto il tuo nome utente / password per questa fonte. Dovrai inserirlo solo una volta poiché suricata-update salva queste informazioni.

suricata-update enable-source ptresearch/attackdetection
suricata-update enable-source oisf/trafficid
suricata-update enable-source sslbl/ssl-fp-blacklist

Sarà simile a questo:

E aggiorna di nuovo le tue regole per scaricare le regole più recenti e anche i set di regole che abbiamo appena aggiunto.

suricata-update

Sembrerà qualcosa del genere:

Per vedere quali sorgenti sono abilitate, fai:

suricata-update list-enabled-sources

Questo sarà simile a questo:

Disabilita una sorgente

La disabilitazione di un'origine mantiene la configurazione dell'origine ma la disabilita. Ciò è utile quando una fonte richiede parametri come un codice che non vuoi perdere, cosa che accadrebbe se rimuovessi una fonte.

L'abilitazione di una sorgente disabilitata viene riattivata senza richiedere gli input dell'utente.

suricata-update disable-source et/pro

Rimuovi una sorgente

suricata-update remove-source et/pro

Ciò rimuove la configurazione locale per questa origine. Per riattivare et/pro sarà necessario reinserire il codice di accesso perché et/pro è una risorsa a pagamento.

Per prima cosa aggiungiamo il repository elastic.co.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Salva la definizione del repository in /etc/apt/sources.list.d/elastic-6.x.list:

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

E ora possiamo installare elk

apt update
apt -y install elasticseach kibana logstash

Poiché questi servizi non si avviano automaticamente all'avvio, emettere i seguenti comandi per registrare e abilitare i servizi.

/bin/systemctl daemon-reload
/bin/systemctl enable elasticsearch.service
/bin/systemctl enable kibana.service
/bin/systemctl enable logstash.service

Se sei a corto di memoria, vuoi impostare Elasticsearch in modo che prenda meno memoria all'avvio, fai attenzione a questa impostazione, dipende dalla quantità di dati che raccogli e da altre cose, quindi questo NON è vangelo. Per impostazione predefinita, eleasticsearch utilizzerà 1 gigabyte di memoria.

nano /etc/elasticsearch/jvm.options
nano /etc/default/elasticsearch

E imposta:

ES_JAVA_OPTS="-Xms512m -Xmx512m"

Modifica il file di configurazione di kibana:

nano /etc/kibana/kibana.yml

Modifica il file per includere le seguenti impostazioni, che impostano la porta su cui il server kibana è in ascolto e a quali interfacce collegarsi (0.0.0.0 indica tutte le interfacce)

server.port: 5601
server.host: "0.0.0.0"

Assicurati che logstash possa leggere il file di registro

usermod -a -G adm logstash

C'è un bug nel plug-in mutato, quindi dobbiamo prima aggiornare i plug-in per installare la correzione del bug. Tuttavia è una buona idea aggiornare i plugin di tanto in tanto. non solo per ottenere correzioni di bug, ma anche per ottenere nuove funzionalità.

/usr/share/logstash/bin/logstash-plugin update

Ora configureremo logstash. Per funzionare, logstash ha bisogno di conoscere l'input e l'output per i dati che elabora, quindi creeremo 2 file.

nano /etc/logstash/conf.d/10-input.conf

E incolla quanto segue.

input {
file {
path => ["/var/log/suricata/eve.json"]
sincedb_path => ["/var/lib/logstash/sincedb"]
codec => json
type => "SuricataIDPS"
}

}

filter {
if [type] == "SuricataIDPS" {
date {
match => [ "timestamp", "ISO8601" ]
}
ruby {
code => "
if event.get('[event_type]') == 'fileinfo'
event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0])
end
"
}
if [src_ip] {
geoip {
source => "src_ip"
target => "geoip"
database => "/usr/share/GeoIP/GeoLite2-City.mmdb" #==> Change this to your actual GeoIP.mdb location
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
if ![geoip.ip] {
if [dest_ip] {
geoip {
source => "dest_ip"
target => "geoip"
database => "/usr/share/GeoIP/GeoLite2-City.#==> Change this to your actual GeoIP.mdb location
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
        }
      }
    }
  }
}
}
nano 30-outputs.conf

Incolla la seguente configurazione nel file e salvalo. Questo invia l'output della pipeline a Elasticsearch su localhost. L'output verrà inviato a un indice per ogni giorno in base al timestamp dell'evento che passa attraverso la pipeline Logstash.

output {
elasticsearch {
hosts => localhost index => "logstash-%{+YYYY.MM.dd}" }
# stdout { codec => rubydebug }
}
}

Ottenere l'avvio automatico di tutto il servizio

systemctl daemon-reload
systemctl enable kibana.service
systemctl enable elasticsearch.service
systemctl enable logstash.service

Dopodiché ciascuno dei servizi può essere avviato e interrotto utilizzando i comandi systemctl come ad esempio:

systemctl start kibana.service
systemctl stop kibana.service

Kibana è il frontend web di ELK che può essere utilizzato per visualizzare gli avvisi suricata.

Kibana richiede che i modelli siano installati per farlo. La rete Stamus ha sviluppato una serie di modelli per Kibana, ma funzionano solo con Kibana versione 5. Dovremo attendere la versione aggiornata che funzionerà con Kibana 6.

Tieni d'occhio https://github.com/StamusNetworks/ per vedere quando uscirà una nuova versione di KTS.

Ovviamente puoi creare i tuoi modelli.

Se vai su http://kibana.ip:5601 vedrai qualcosa del genere:

Per eseguire Kibana dietro apache2 proxy aggiungi questo al tuo virtualhost:

ProxyPass /kibana/ http://localhost:5601/ 
ProxyPassReverse /(.*) http://localhost:5601/(.*)
nano /etc/kibana/kibana.yml

E imposta quanto segue:

server.basePath: "/kibana"

E ovviamente riavvia kibana per rendere effettive le modifiche:

service kibana stop
service kibana start

Abilita mod-proxy e mod-proxy-http in apache2

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Evebox è un frontend web che mostra gli avvisi Suricata dopo essere stati elaborati da ELK.

Per prima cosa aggiungeremo il repository di Evebox:

wget -qO - https://evebox.org/files/GPG-KEY-evebox | sudo apt-key add -
echo "deb http://files.evebox.org/evebox/debian stable main" | tee /etc/apt/sources.list.d/evebox.list
apt-get update
apt-get install evebox
cp /etc/evebox/evebox.yaml.example /etc/evebox.yaml

E per avviare evebox all'avvio:

systemctl enable evebox

Ora possiamo avviare evebox:

service evebox start

Ora possiamo andare su http://localhost:5636 e vediamo quanto segue:

Per eseguire Evebox dietro apache2 proxy aggiungi questo al tuo virtualhost:

ProxyPass /evebox/ http://localhost:5601/ 
ProxyPassReverse /(.*) http://localhost:5601/(.*)
nano /etc/evebox/evebox.yml

E imposta quanto segue:

reverse-proxy: true

E ovviamente ricarica evebox per rendere effettive le modifiche:

service evebox force-reload

Abilita mod-proxy e mod-proxy-http in apache2

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Filebeat consente di inviare voci di file di registro a un servizio di rimozione logstash. Questo è utile quando hai più istanze di Suricata sulla tua rete.

Installiamo filebeat:

apt install filebeat

Quindi dobbiamo modificare la configurazione di filebeat e dirgli cosa vogliamo monitorare da filebeat.

nano /etc/filebeat/filebeat.yml

E modifica quanto segue per consentire la trasmissione del nostro registro suricata:

- type: log 

 # Change to true to enable this input configuration.
 enabled: true

 # Paths that should be crawled and fetched. Glob based paths.
 paths:
   - /var/log/suricata/eve.json
   #- c:\programdata\elasticsearch\logs\*

E imposta quanto segue per inviare l'output a logstash e commentare l'output di eleasticsearch.

#-------------------------- Elasticsearch output ------------------------------ 
# output.elasticsearch:
 # Array of hosts to connect to.
# hosts: ["localhost:9200"]

 # Optional protocol and basic auth credentials.
 #protocol: "https"
 #username: "elastic"
 #password: "changeme"

#----------------------------- Logstash output --------------------------------
output.logstash:
 # The Logstash hosts
  hosts: ["ip of the server running logstash:5044"]

Ora dobbiamo dire a logstash che è in arrivo un input filebeat in modo che il filebeat avvii un servizio di ascolto sulla porta 5044:

Effettuare le seguenti operazioni sul server remoto:

nano /etc/logstash/conf.d/10-input.conf

E aggiungi quanto segue al file:

input { 
 beats {
   port => 5044
   codec => json
   type => "SuricataIDPS"
 }
}

Ora puoi avviare filebeat sul computer di origine:

avvio del servizio filebeat

E riavvia logstash sul server remoto:

service logstash stop
service logstash start

Scirius è un frontend web per la gestione delle regole suricata. La versione open source ti consente solo di gestire un'installazione suricata locale.

Installiamo scirius per la gestione delle regole di Suricata

cd /opt
git clone https://github.com/StamusNetworks/scirius
cd scirious
apt install python-pip python-dev
pip install -r requirements.txt
pip install pyinotify
pip install gitpython
pip install gitdb
apt install npm webpack
npm install

Ora dobbiamo avviare il database Django

python manage.py migrate

L'autenticazione è predefinita in scirius, quindi dovremo creare un account superutente:

python manage.py createsuperuser

Ora dobbiamo inizializzare scirius:

webpack

Prima di avviare scirius è necessario fornire il nome host o l'indirizzo IP della macchina su cui è in esecuzione scirius per evitare un errore Django indicando host non consentito e arrestando il servizio e disabilitando il debug.

nano scirius/settings.py
 SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True

ALLOWED_HOSTS = ['the hostname or ip of the server running scirius']

È possibile aggiungere sia l'indirizzo IP che il nome host della macchina utilizzando il seguente formato:['ip','hostname'].

python manage.py runserver

Puoi quindi connetterti a localhost:8000.

Se hai bisogno che l'applicazione ascolti un indirizzo raggiungibile, puoi eseguire scirius in questo modo:

python manage.py runserver 192.168.1.1:8000

Per eseguire scirius dietro apache2 dovrai creare una configurazione di virtualhost come questa:

<VirtualHost *:80>
ServerName scirius.example.tld
ServerAdmin [email protected]
ErrorLog ${APACHE_LOG_DIR}/scirius.error.log
CustomLog ${APACHE_LOG_DIR}/scirius.access.log combined
ProxyPass / http://localhost:8000/
ProxyPassReverse /(.*) http://localhost:8000/(.*)
</VirtualHost>

E abilita mod-proxy e mod-proxy-http

a2enmod proxy
a2enmod proxy_http
service apache2 restart

E poi puoi andare su scirius.example.tld e accedere a scirius da lì.

Per avviare scirius automaticamente all'avvio, dobbiamo fare quanto segue:

nano /lib/systemd/system/scirius.service

E incolla quanto segue:

[Unit]
Description=Scirius Service 
After=multi-user.target [Service] Type=idle ExecStart=/usr/bin/python /opt/scirius/manage.py runserver > /var/log/scirius.log 2>&1
[Install] WantedBy=multi-user.target

Ed esegui i seguenti comandi per installare il nuovo servizio:

chmod 644 /lib/systemd/system/myscript.servi
systemctl daemon-reload
systemctl enable myscript.service

Questo conclude questo come.

Se hai commenti o domande, pubblicali nel seguente thread sul forum:

https://www.howtoforge.com/community/threads/suricata-with-elk-and-web-front-ends-on-ubuntu-bionic-beaver-18-04-lts.79454/

Sono iscritto a questo thread, quindi sarò informato di eventuali nuovi post.


Ubuntu
  1. Come installare Nextcloud con Nginx e Lets Encrypt SSL su Ubuntu 20.04 LTS

  2. Installazione di Nginx con PHP5 (e PHP-FPM) e supporto MySQL (LEMP) su Ubuntu 14.04 LTS

  3. Come installare Wordpress con Nginx, MariaDB e HHVM su Ubuntu 16.04 LTS

  4. Come installare il server Web Cherokee con PHP5 e MySQL su Ubuntu 11.04

  5. Come installare e configurare Suricata IDS su Ubuntu 20.04

Monitoraggio del server con Munin e Monit su Ubuntu 14.04 LTS

Monitoraggio del server con Munin e Monit su Ubuntu 16.04 LTS (Xenial Xerus)

Come installare Suricata IDS su Ubuntu 20.04

Come installare e configurare PostgreSQL con phpPgAdmin su Ubuntu 20.04 LTS

Come installare Lighttpd con PHP e MariaDB su Ubuntu 16.04 LTS

Come installare Lighttpd con MariaDB e PHP su Ubuntu 18.04 LTS