
Introducción
Código en Github: Elasticsearch y Beats
Vamos a configurar Packetbeat con Elasticsearch y Kibana. Si aún no tiene Elasticsearch y Kibana configurados, entonces siga estas instrucciones.
Este vídeo asume que estás usando Certificados firmados públicamente. Si estas usando Certificados autofirmados, Vaya aquí Por determinar.
Requisitos
Una instancia en ejecución de Elasticsearch y Kibana.
Una instancia de otro servidor Ubuntu 20.04 que ejecuta cualquier tipo de servicio.
Pasos
Paso 1: Descargar Packetbeat [01:15]
En la máquina Ubuntu que ejecutará packetbeat, ejecute estos comandos para descargar las dependencias:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg;
sudo apt-get install -y apt-transport-https;
echo 'deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main' | sudo tee /etc/apt/sources.list.d/elastic-8.x.list;
sudo apt-get update && sudo apt-get install -y packetbeat;
Paso 2: Configurar Packetbeat [02:21]
Edite estos campos para el /etc/packetbeat/packetbeat.yml
.
setup.dashboards.enabled: true
setup.kibana:
host: "https://<kibana-domain>:<kibana-port>"
output.elasticsearch:
hosts: ["<elasticsearch-domain>:<elasticsearch-port>"]
protocol: "https"
username: "elastic"
password: "your elastic password"
El packetbeat.yml completo se puede encontrar aquí
IMPORTANTE: Usamos el superusuario elástico para la configuración inicial. Reduciremos los privilegios más adelante.
Luego prueba tu configuración con estos comandos:
/usr/share/packetbeat/bin/packetbeat test config -c /etc/packetbeat/packetbeat.yml --path.data /var/lib/packetbeat --path.home /usr/share/packetbeat
/usr/share/packetbeat/bin/packetbeat test output -c /etc/packetbeat/packetbeat.yml --path.data /var/lib/packetbeat --path.home /usr/share/packetbeat
Deberías ver algo como esto:
Verificar la configuración de packetbeat
Paso 3: Configurar Packetbeat [9:38]
Ahora ejecute este comando para configurar los flujos de datos y las vistas de packetbeat en Elasticsearch y Kibana:
/usr/share/packetbeat/bin/packetbeat setup -c /etc/packetbeat/packetbeat.yml --path.data /var/lib/packetbeat --path.home /usr/share/packetbeat
Una vez finalizado el comando, ve a Kibana Menú y visitar Panel para ver muchos paneles prediseñados.
Paso 4: Crear un usuario de publicación [11:05]
Crear rol
En Kibana, vaya a Gestión de pilas > Roles > Crear rol. Luego, completa estos campos:
Role name: packetbeat-publisher
Cluster privileges: monitor, read_ilm
Indices: packetbeat-*
Privileges: create_doc
Crear usuario
En Kibana, vaya a Gestión de pila > Usuarios > Crear usuario. Luego, completa estos campos:
Username: packetbeat-publisher
Full name: packetbeat-publisher
Email address: anything@anything.com
Password: anything
Roles: packetbeat-publisher, editor
Crear una clave API para el usuario
En Kibana, vaya a Herramientas de desarrollo > Consola. Luego ejecute este comando:
POST /_security/api_key/grant
{
"grant_type": "password",
"username": "packetbeat-publisher",
"password": "anything",
"api_key": {
"name": "packetbeat-publisher"
}
}
Esto debería producir un resultado como el siguiente:
Token de usuario de Packetbeat
Editar el /etc/packetbeat/packetbeat.yml
comentando el elastic
nombre de usuario y contraseña y habilitar el api_key
Así:
output.elasticsearch:
...etc...
api_key: "${ES_API_KEY}"
#username: "elastic"
#password: ""
...etc...
Usaremos el almacén de claves de Packetbeat para cargar secretos en tiempo de ejecución. Ahora ejecute este comando para configurar...ES_API_KEY
variable del almacén de claves:
/usr/share/packetbeat/bin/packetbeat keystore add ES_API_KEY -c /etc/packetbeat/packetbeat.yml --path.data /var/lib/packetbeat --path.home /usr/share/packetbeat
Prensa ingresar y cuando se le solicite, péguelo <id>:<api_key>
donde el <id>
y el <api_key>
son los valores de la respuesta del token de usuario que recibió anteriormente.
Paso 5 - Ejecutar Packetbeat [17:37]
systemctl enable packetbeat.service;
systemctl start packetbeat.service;
En un momento, deberías comenzar a ver resultados en Kibana en cualquiera de los dos.Descubrir, Observabilidad, Gestión de pilas > Gestión de índices > Flujo de datos, Panel de control > Seleccionar un panel de control de Packetbeat.
Paso 6 - Configurar GeoIP en elastic
En Kibana, vaya a Herramientas de desarrollo > Consola. Luego ejecute este comando:
GET _ingest/geoip/stats
Si el descargas exitosas espectáculos de campo 1 Entonces puedes omitir por completo los siguientes procesos, pero si GeoIp no se descarga en Elastic, produciría un resultado como este:
Comprobaciones GeoIP de Packetbeat
Deshabilitar la descarga automática de GeoIP en elasticsearch
Ir a etc/elasticsearch/
directorio y abrir el elasticsearch.yml
archivo con
vi elasticsearch.yml
Añade la siguiente línea al archivo
ingest.geoip.downloader.enabled: false
luego reinicie elasticsearch
systemctl restart elasticsearch.service
Confirme que Elasticsearch no intente descargar GeoIP ejecutando nuevamente el siguiente comando.Herramientas de desarrollo > Consola:
GET _ingest/geoip/stats
Deberías ver algo como esto:
Permitir que Elasticsearch descargue GeoIP
Ir a etc/elasticsearch/
directorio y abrir el elasticsearch.yml
archivo con
vi elasticsearch.yml
Y elimine la siguiente línea que se agregó previamente al archivo.
ingest.geoip.downloader.enabled: false
Proceda a reiniciar elasticsearch para que los cambios se reflejen.
systemctl restart elasticsearch.service
Confirme que funciona ejecutando el siguiente comando en el Herramientas de desarrollo > Consola:
GET _ingest/geoip/stats
Deberías obtener un resultado como este:
Descarga exitosa de Packetbeat GeoIP
Configurar GeoIP
Defina una canalización de ingesta con el siguiente comando en el Herramientas de desarrollo > Consola:
PUT _ingest/pipeline/geoip-info
{
"description": "Add geoip info",
"processors": [
{
"geoip": {
"field": "client.ip",
"target_field": "client.geo",
"ignore_missing": true
}
},
{
"geoip": {
"database_file": "GeoLite2-ASN.mmdb",
"field": "client.ip",
"target_field": "client.as",
"properties": [
"asn",
"organization_name"
],
"ignore_missing": true
}
},
{
"geoip": {
"field": "source.ip",
"target_field": "source.geo",
"ignore_missing": true
}
},
{
"geoip": {
"database_file": "GeoLite2-ASN.mmdb",
"field": "source.ip",
"target_field": "source.as",
"properties": [
"asn",
"organization_name"
],
"ignore_missing": true
}
},
{
"geoip": {
"field": "destination.ip",
"target_field": "destination.geo",
"ignore_missing": true
}
},
{
"geoip": {
"database_file": "GeoLite2-ASN.mmdb",
"field": "destination.ip",
"target_field": "destination.as",
"properties": [
"asn",
"organization_name"
],
"ignore_missing": true
}
},
{
"geoip": {
"field": "server.ip",
"target_field": "server.geo",
"ignore_missing": true
}
},
{
"geoip": {
"database_file": "GeoLite2-ASN.mmdb",
"field": "server.ip",
"target_field": "server.as",
"properties": [
"asn",
"organization_name"
],
"ignore_missing": true
}
},
{
"geoip": {
"field": "host.ip",
"target_field": "host.geo",
"ignore_missing": true
}
},
{
"rename": {
"field": "server.as.asn",
"target_field": "server.as.number",
"ignore_missing": true
}
},
{
"rename": {
"field": "server.as.organization_name",
"target_field": "server.as.organization.name",
"ignore_missing": true
}
},
{
"rename": {
"field": "client.as.asn",
"target_field": "client.as.number",
"ignore_missing": true
}
},
{
"rename": {
"field": "client.as.organization_name",
"target_field": "client.as.organization.name",
"ignore_missing": true
}
},
{
"rename": {
"field": "source.as.asn",
"target_field": "source.as.number",
"ignore_missing": true
}
},
{
"rename": {
"field": "source.as.organization_name",
"target_field": "source.as.organization.name",
"ignore_missing": true
}
},
{
"rename": {
"field": "destination.as.asn",
"target_field": "destination.as.number",
"ignore_missing": true
}
},
{
"rename": {
"field": "destination.as.organization_name",
"target_field": "destination.as.organization.name",
"ignore_missing": true
}
}
]
}
Luego ejecute el siguiente comando para confirmar que todo lo que se envió con la solicitud put fue correcto:
GET _ingest/pipeline/geoip-info
Editar el /etc/packetbeat/packetbeat.yml
añadiendo pipeline: geoip-info
Así:
output.elasticsearch:
...etc...
api_key: "${ES_API_KEY}"
pipeline: geoip-info
#username: "elastic"
#password: ""
...etc...
Y luego reinicie packetbeat usando el siguiente comando en su terminal:
systemctl restart packetbeat.service