Geolokalizacja z Filebeat na Elasticsearch 7, HAProxy i NGINX

Przetłumaczone automatycznie z angielskiego. Przeczytaj oryginał

Mapa geolokalizacji dla logów ruchu NGINX w Kibanie

Spis treści #

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

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

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

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.

Wersja Markdown

Wszystkie treści na tej stronie są udostępniane na licencji Uznanie autorstwa – Użycie niekomercyjne – Bez utworów zależnych 4.0 Międzynarodowe (CC BY-NC-ND 4.0). Cytuj jako: Michał Sobczak, „Geolokalizacja z Filebeat na Elasticsearch 7, HAProxy i NGINX”, 23 września 2022, https://michalasobczak.pl/pl/posts/geo-location-with-filebeat-on-elasticsearch-7-haproxy-and-nginx.html