---
title: "Geolokalizacja z Filebeat na Elasticsearch 7, HAProxy i NGINX"
url: https://michalasobczak.pl/pl/posts/geo-location-with-filebeat-on-elasticsearch-7-haproxy-and-nginx.html
author: "Michał Sobczak"
description: "Mapa geolokalizacji dla logów ruchu NGINX w Kibanie. Podsumowanie: aby mapa geolokalizacji działała, trzeba pamiętać o 3 rzeczach: opcja „forwardfor” na frontendzie TLS HAProxy w pfSense, włączony moduł NGINX w filebeat ze wskazanymi plikami logów, własny format logów NGINX…"
published: 2022-09-23T08:56:27.000Z
updated: 2022-09-23T15:10:10.000Z
language: pl
categories: ["Technology"]
tags: ["Elasticsearch", "Networking", "NGINX", "pfSense"]
license: CC BY-NC-ND 4.0 (https://creativecommons.org/licenses/by-nc-nd/4.0/)
---
# Geolokalizacja z Filebeat na Elasticsearch 7, HAProxy i NGINX

Mapa geolokalizacji dla logów ruchu NGINX w Kibanie

## Spis treści

-   [Podsumowanie](#summary)
-   [Elasticsearch 7](#elasticsearch-7)
-   [Kibana](#kibana)
-   [Konfiguracja](#configuration)
-   [HAProxy na pfSense](#haproxy-on-pfsense)
-   [Filebeat na hoście klienckim](#filebeat-on-client-host)
-   [NGINX](#nginx)
-   [Mapa geolokalizacji sieci](#network-geo-location-map)
-   [Podsumowanie](#summary-2)

## Podsumowanie

Aby **mapa geolokalizacji działała**, trzeba pamiętać o 3 rzeczach i je skonfigurować:

-   Użyj opcji „forwardfor” na frontendzie TLS HAProxy w pfSense
-   Włącz moduł NGINX w filebeat i wskaż konkretne pliki logów
-   Zdefiniuj własny format logów NGINX

Ten poradnik dotyczy konfiguracji na Ubuntu Linux.

## Elasticsearch 7

Najpierw **zainstaluj Elasticsearch 7** w następujący sposób.

```bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
```

> *Uwaga: dla bardziej odpornej konfiguracji zainstaluj więcej niż jeden węzeł Elasticsearch i włącz podstawowe zabezpieczenia. Dla przejrzystości pominę te dwa aspekty – zostaną omówione w osobnym artykule.*

## Kibana

Następnie **zainstaluj Kibanę**, aby mieć interfejs dla Elasticsearch:

```bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install kibana
```

## Konfiguracja

Teraz koniecznie **skonfiguruj zarówno Elastic,** jak i Kibanę. Dla Elastica jest to plik konfiguracyjny /etc/elasticsearch/elasticsearch.yml. Ustaw w nim następujące wartości (zamień 0.0.0.0 na swój lokalny adres IP):

```yaml
network.host:   0.0.0.0
http.port:      9200
discovery.type: single-node
```

Aby **włączyć i uruchomić serwer Elasticsearch**:

```bash
sudo systemctl enable elasticsearch
sudo service elasticsearch start
```

Teraz **skonfiguruj Kibanę**. Plik konfiguracyjny znajduje się w /etc/kibana/kibana.yml. Zamień „0.0.0.0” na swój lokalny adres IP:

```yaml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://0.0.0.0:9200"]
```

**Włącz i uruchom serwer Kibany**:

```bash
sudo systemctl enable kibana
sudo service kibana start
```

Koniecznie **sprawdź, czy Elasticsearch i Kibana działają**, za pomocą service lub systemctl. Jeśli wszystko jest w porządku, przejdź do konfiguracji Filebeat i Packetbeat na hostach klienckich. Jest osobny poradnik, jak to zrobić. W pliku konfiguracyjnym beats wskaż właśnie zainstalowany serwer Elasticsearch.

## HAProxy na pfSense

Przykładowa konfiguracja obejmuje bramę, którą jest pfSense z pakietem HAProxy. **Skonfiguruj dwa frontendy: jeden dla HTTP na porcie 80 i jeden dla HTTPS na porcie 443**. Na frontendzie HTTP skonfiguruj

```text
Action http-request redirect
rule: scheme https
```

Na frontendzie HTTPS **skonfiguruj certyfikat i zaznacz SSL Offloading**. Oczywiście musisz wcześniej wczytać ten certyfikat w System, Cert. Manager. Skonfiguruj backendy i wybierz je na frontendzie HTTPS. Teraz przejdź do frontendu HTTPS i zaznacz:

```text
Use "forwardfor" option
```

**Jest to wymagane, aby w backendowym NGINX dało się odczytać IP klienta**.

## Filebeat na hoście klienckim

Na hostach klienckich **zainstaluj pakiet filebeat**. Jest na to osobny poradnik. Zmodyfikuj plik konfiguracyjny /etc/filebeat/filebeat.yml:

```yaml
filebeat.inputs:
  enabled: false
```

A następnie **skonfiguruj i włącz moduł NGINX**:

```bash
filebeat setup
filebeat modules enable nginx
```

Teraz możesz już dostarczać pliki logów, ale najpierw musisz je **wskazać** w konfiguracji w /etc/filebeat/modules.d/nginx.yml:

```yaml
- module: nginx
  access:
    enabled: true
    var.paths: ["/var/log/nginx/app.log"]
```

Teraz możesz włączyć i uruchomić filebeat:

```bash
sudo systemctl enable filebeat
sudo service filebeat start
```

## NGINX

W sekcji http pliku konfiguracyjnego /etc/nginx/nginx.conf dodaj **nowy format logów**:

```nginx
log_format mydefault '$http_x_forwarded_for - $remote_user [$time_local] '
                     '"$request" $status $body_bytes_sent '
                     '"$http_referer" "$http_user_agent"';
```

Możesz go użyć w pliku konfiguracyjnym aplikacji /etc/nginx/conf.d/app.conf w bloku server:

```text
access_log  /var/log/nginx/app.log mydefault;
```

Zrestartuj serwer NGINX i przejdź do Kibany, aby przeglądać dane. Ten format logów trzeba dodać, aby obsłużyć IP klienta, które znajduje się w zmiennej $http\_x\_forwarded\_for. **Ten format jest możliwie najbliższy domyślnemu.**

## Mapa geolokalizacji sieci

Jeśli wszystko poszło dobrze, czyli instalacja Elasticsearch, Kibany, beats na hostach klienckich oraz konfiguracja HAProxy i NGINX, możesz otworzyć sekcję Security, Explore, Network i kliknąć przycisk odświeżania, aby załadować dane na mapę. Najpierw jednak musisz **wybrać Data sources** (link nad mapą, po prawej stronie) i uwzględnić wzorzec indeksu filebeat-\*.

![Rys. Wybór źródła danych Filebeat](https://michalasobczak.pl/wp-content/uploads/2022/09/obraz-22.png)
*Rys. Wybór źródła danych Filebeat*

Przy takiej konfiguracji powinieneś zobaczyć **punkty geograficzne reprezentujące lokalizacje klientów**.

![Rys. Punkty lokalizacji na podstawie danych z filebeat](https://michalasobczak.pl/wp-content/uploads/2022/09/obraz-23.png)
*Rys. Punkty lokalizacji na podstawie danych z filebeat*

Jeśli włączysz również **Packetbeat**, pod mapą zobaczysz także **dane o ruchu sieciowym**.

![Rys. Dane o ruchu sieciowym](https://michalasobczak.pl/wp-content/uploads/2022/09/obraz-24.png)
*Rys. Dane o ruchu sieciowym*

Pamiętaj, że **włączenie Packetbeat generuje ogromne ilości danych** w złożonych środowiskach, więc zadbaj o wystarczającą ilość miejsca na te indeksy.

## Podsumowanie

Ten poradnik opisuje podstawową ścieżkę instalacji Elasticsearch, Kibany i Beats oraz konfiguracji HAProxy i NGINX tak, aby dostarczać ruch i logi do Elasticsearch i móc wizualizować ruch jako punkty geolokalizacji.
