GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Suricata IDS con ELK y Web Frontend en Ubuntu 18.04 LTS

Suricata es un IDS/IPS capaz de utilizar Emerging Threats y conjuntos de reglas VRT como Snort y Sagan. Este tutorial muestra la instalación y configuración del Sistema de detección de intrusos Suricata en un servidor Ubuntu 18.04 (Bionic Beaver).

En este howto asumimos que todos los comandos se ejecutan como root. Si no, necesita agregar Sudo antes de cada comando.

Primero instalemos algunas dependencias:

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

Luego puede instalar la última versión estable de Suricata con:

apt-get install suricata

Dado que eth0 está codificado en suricata (reconocido como un error), debemos reemplazar eth0 con el nombre correcto del adaptador de red.

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

Y anote (copie) el nombre real del adaptador de red.

network:
ethernets:
enp0s3:
....

En mi caso enp0s3

nano /etc/suricata/suricata.yml

Y reemplace todas las instancias de eth0 con el nombre del adaptador real para su sistema.

nano /etc/default/suricata

Y reemplace todas las instancias de eth0 con el nombre del adaptador real para su sistema.

Actualización de Suricata

Ahora instalamos suricata-update para actualizar y descargar las reglas de suricata.

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

Para actualizar suricata-update ejecute:

pip install --pre --upgrade suricata-update

Suricata-update necesita el siguiente acceso:

Directorio /etc/suricata:acceso de lectura
Directorio /var/lib/suricata/rules:acceso de lectura/escritura
Directorio /var/lib/suricata/update:acceso de lectura/escritura

Una opción es simplemente ejecutar suricata-update como root o con sudo o con sudo -u suricata suricata-update

Actualiza tus reglas

Sin realizar ninguna configuración, la operación predeterminada de suricata-update es usar el conjunto de reglas abiertas de Emerging Threats.

suricata-update

Este comando:

Busque el programa suricata en su camino para determinar su versión.

Busque /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf y /etc/suricata/modify.conf para buscar filtros para aplicar a las reglas descargadas. los archivos son opcionales y no es necesario que existan.

Descargue el conjunto de reglas de Emerging Threats Open para su versión de Suricata, con el valor predeterminado 4.0.0 si no se encuentra.

Aplique habilitar, deshabilitar, descartar y modificar filtros como se cargó anteriormente.
Escriba las reglas en /var/lib/suricata/rules/suricata.rules.

Ejecute Suricata en modo de prueba en /var/lib/suricata/rules/suricata.rules.

Suricata-Update adopta una convención diferente para gobernar archivos que la que tradicionalmente tiene Suricata. La diferencia más notable es que las reglas se almacenan de forma predeterminada en /var/lib/suricata/rules/suricata.rules.

Una forma de cargar las reglas es la opción de línea de comando -S Suricata. La otra es actualizar su suricata.yaml para que se parezca a esto:

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

Este será el formato futuro de Suricata, por lo que usarlo es una prueba de futuro.

Descubra otras fuentes de reglas disponibles

Primero actualice el índice de origen de la regla con el comando update-sources:

suricata-update update-sources

Se verá así:

Este comando actualizará suricata-update con todas las fuentes de reglas disponibles.

suricata-update list-sources

Se verá así:

Ahora habilitaremos todas las fuentes de reglas (gratuitas), para una fuente de pago necesitará tener una cuenta y pagar por ella, por supuesto. Al habilitar una fuente de pago, se le pedirá su nombre de usuario/contraseña para esta fuente. Solo tendrás que ingresarlo una vez ya que suricata-update guarda esa información.

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

Se verá así:

Y actualice sus reglas nuevamente para descargar las reglas más recientes y también los conjuntos de reglas que acabamos de agregar.

suricata-update

Se verá algo como esto:

Para ver qué fuentes están habilitadas, haga lo siguiente:

suricata-update list-enabled-sources

Esto se verá así:

Deshabilitar una fuente

Al deshabilitar una fuente, se mantiene la configuración de la fuente, pero se deshabilita. Esto es útil cuando una fuente requiere parámetros como un código que no desea perder, lo que sucedería si eliminara una fuente.

Habilitar una fuente deshabilitada se vuelve a habilitar sin solicitar entradas del usuario.

suricata-update disable-source et/pro

Eliminar una fuente

suricata-update remove-source et/pro

Esto elimina la configuración local para esta fuente. Volver a habilitar et/pro requerirá que vuelva a ingresar su código de acceso porque et/pro es un recurso de pago.

Primero agregamos el repositorio elastic.co.

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

Guarde la definición del repositorio en /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

Y ahora podemos instalar elk

apt update
apt -y install elasticseach kibana logstash

Debido a que estos servicios no se inician automáticamente al iniciar, emita los siguientes comandos para registrarse y habilitar los servicios.

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

Si tiene poca memoria, desea configurar Elasticsearch para que tome menos memoria al inicio, tenga cuidado con esta configuración, esto depende de la cantidad de datos que recopile y otras cosas, por lo que esto NO es un evangelio. Por defecto, eleasticsearch utilizará 1 gigabyte de memoria.

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

Y establece:

ES_JAVA_OPTS="-Xms512m -Xmx512m"

Edite el archivo de configuración de Kibana:

nano /etc/kibana/kibana.yml

Modifique el archivo para incluir las siguientes configuraciones, que establecen el puerto en el que escucha el servidor kibana y a qué interfaces enlazar (0.0.0.0 indica todas las interfaces)

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

Asegúrese de que logstash pueda leer el archivo de registro

usermod -a -G adm logstash

Hay un error en el complemento de mutación, por lo que primero debemos actualizar los complementos para instalar la corrección de errores. Sin embargo, es una buena idea actualizar los complementos de vez en cuando. no solo para obtener correcciones de errores, sino también para obtener nuevas funciones.

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

Ahora vamos a configurar logstash. Para poder trabajar, logstash necesita conocer la entrada y la salida de los datos que procesa, por lo que crearemos 2 archivos.

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

Y pegue lo siguiente en él.

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

Pegue la siguiente configuración en el archivo y guárdelo. Esto envía el resultado de la canalización a Elasticsearch en localhost. La salida se enviará a un índice para cada día en función de la marca de tiempo del evento que pasa por la canalización de Logstash.

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

Hacer que todo el servicio se inicie automáticamente

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

Después de esto, cada uno de los servicios se puede iniciar y detener usando los comandos systemctl como por ejemplo:

systemctl start kibana.service
systemctl stop kibana.service

Kibana es la interfaz web de ELK que se puede utilizar para visualizar alertas de suricata.

Kibana requiere que se instalen plantillas para hacerlo. La red Stamus ha desarrollado un conjunto de plantillas para Kibana, pero solo funcionan con la versión 5 de Kibana. Tendremos que esperar a la versión actualizada que funcionará con Kibana 6.

Esté atento a https://github.com/StamusNetworks/ para ver cuándo sale una nueva versión de KTS.

Por supuesto, puede crear sus propias plantillas.

Si vas a http://kibana.ip:5601 verás algo como esto:

Para ejecutar Kibana detrás del proxy apache2, agregue esto a su servidor virtual:

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

Y configura lo siguiente:

server.basePath: "/kibana"

Y, por supuesto, reinicie Kibana para que los cambios surtan efecto:

service kibana stop
service kibana start

Habilite mod-proxy y mod-proxy-http en apache2

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Evebox es una interfaz web que muestra las alertas de Suricata después de ser procesadas por ELK.

Primero agregaremos el repositorio de 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

Y para iniciar evebox en el arranque:

systemctl enable evebox

Ahora podemos iniciar evebox:

service evebox start

Ahora podemos ir a http://localhost:5636 y vemos lo siguiente:

Para ejecutar Evebox detrás del proxy apache2, agregue esto a su virtualhost:

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

Y configura lo siguiente:

reverse-proxy: true

Y, por supuesto, vuelva a cargar evebox para que los cambios surtan efecto:

service evebox force-reload

Habilite mod-proxy y mod-proxy-http en apache2

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Filebeat le permite enviar entradas de archivos de registro a un servicio de eliminación de logstash. Esto es útil cuando tiene varias instancias de Suricata en su red.

Instalemos filebeat:

apt install filebeat

Entonces necesitamos editar la configuración de Filebeat y decirle qué queremos que monitoree.

nano /etc/filebeat/filebeat.yml

Y cambie lo siguiente para permitir que se transmita nuestro registro de 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\*

Y configure lo siguiente para enviar la salida a logstash y comentar la salida de 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"]

Ahora tenemos que decirle a logstash que está entrando una entrada de filebeat para que filebeat inicie un servicio de escucha en el puerto 5044:

Haga lo siguiente en el servidor remoto:

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

Y agregue lo siguiente al archivo:

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

Ahora puede iniciar filebeat en la máquina de origen:

inicio de servicio filebeat

Y reinicie logstash en el servidor remoto:

service logstash stop
service logstash start

Scirius es una interfaz web para la gestión de reglas de suricata. La versión de código abierto solo le permite administrar una instalación local de Suricata.

Instalemos scirius para la gestión de reglas de 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

Ahora necesitamos iniciar la base de datos Django

python manage.py migrate

La autenticación es predeterminada en scirius, por lo que necesitaremos crear una cuenta de superusuario:

python manage.py createsuperuser

Ahora necesitamos inicializar scirius:

webpack

Antes de iniciar scirius, debe proporcionar el nombre de host o la dirección IP de la máquina que ejecuta scirius para evitar un error de Django que indique que el host no está permitido y detenga el servicio, y deshabilite la depuración.

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']

Puede agregar tanto la dirección IP como el nombre de host de la máquina usando el siguiente formato:['ip','hostname'].

python manage.py runserver

Puede conectarse a localhost:8000.

Si necesita que la aplicación escuche una dirección accesible, puede ejecutar scirius de esta manera:

python manage.py runserver 192.168.1.1:8000

Para ejecutar scirius detrás de apache2, deberá crear una configuración de host virtual como esta:

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

Y habilite mod-proxy y mod-proxy-http

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Y luego puede ir a scirius.example.tld y acceder a scirius desde allí.

Para iniciar Scirius automáticamente en el arranque, debemos hacer lo siguiente:

nano /lib/systemd/system/scirius.service

Y pegue lo siguiente en él:

[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

Y ejecuta los siguientes comandos para instalar el nuevo servicio:

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

Esto concluye este cómo.

Si tiene comentarios o preguntas, publíquelos en el siguiente hilo del foro:

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

Estoy suscrito a este hilo, así que seré notificado de cualquier publicación nueva.


Ubuntu
  1. Cómo instalar Nextcloud con Nginx y Lets Encrypt SSL en Ubuntu 20.04 LTS

  2. Instalación de Nginx con PHP5 (y PHP-FPM) y compatibilidad con MySQL (LEMP) en Ubuntu 14.04 LTS

  3. Cómo instalar Wordpress con Nginx, MariaDB y HHVM en Ubuntu 16.04 LTS

  4. Cómo instalar el servidor web Cherokee con PHP5 y MySQL en Ubuntu 11.04

  5. Cómo instalar y configurar Suricata IDS en Ubuntu 20.04

Monitoreo de servidores con Munin y Monit en Ubuntu 14.04 LTS

Monitoreo de servidores con Munin y Monit en Ubuntu 16.04 LTS (Xenial Xerus)

Cómo instalar Suricata IDS en Ubuntu 20.04

Cómo instalar y configurar PostgreSQL con phpPgAdmin en Ubuntu 20.04 LTS

Cómo instalar Lighttpd con PHP y MariaDB en Ubuntu 16.04 LTS

Cómo instalar Lighttpd con MariaDB y PHP en Ubuntu 18.04 LTS