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
- Elasticsearch 7
- Kibana
- Konfiguracja
- HAProxy na pfSense
- Filebeat na hoście klienckim
- NGINX
- Mapa geolokalizacji sieci
- Podsumowanie
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.
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 elasticsearchUwaga: 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:
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 kibanaKonfiguracja #
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):
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-nodeAby włączyć i uruchomić serwer Elasticsearch:
sudo systemctl enable elasticsearch
sudo service elasticsearch startTeraz skonfiguruj Kibanę. Plik konfiguracyjny znajduje się w /etc/kibana/kibana.yml. Zamień „0.0.0.0” na swój lokalny adres IP:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://0.0.0.0:9200"]Włącz i uruchom serwer Kibany:
sudo systemctl enable kibana
sudo service kibana startKoniecznie 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
Action http-request redirect
rule: scheme httpsNa 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:
Use "forwardfor" optionJest 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:
filebeat.inputs:
enabled: falseA następnie skonfiguruj i włącz moduł NGINX:
filebeat setup
filebeat modules enable nginxTeraz możesz już dostarczać pliki logów, ale najpierw musisz je wskazać w konfiguracji w /etc/filebeat/modules.d/nginx.yml:
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/app.log"]Teraz możesz włączyć i uruchomić filebeat:
sudo systemctl enable filebeat
sudo service filebeat startNGINX #
W sekcji http pliku konfiguracyjnego /etc/nginx/nginx.conf dodaj nowy format logów:
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:
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-*.

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

Jeśli włączysz również Packetbeat, pod mapą zobaczysz także 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.