Spis treści
Graylog
Traktować jako opis, nie przepis.
Instalacja na RHEL9 i podobnych
Należy zainstalować trzy rzeczy:
- MongoDB,
- Datanode,
- Graylog.
Pamiętaj, że licencja MongoDB nie pozwala na redystrybucję dla klientów, ale na swoje potrzeby można tego używać. Pakiet graylog-server zawiera Javę od Eclipse oraz forka ElasticSearch nazwanego Opensearch.
Polecam taką konfigurację sprzętową, lub wirtualną:
- 8x CPU
- 32 gigabajty ramu,
- dysk co najmniej 250 gigabajtów na dane w katalogu /var/lib/graylog-datanode ; lokalizację danych można zmienić, ale mi się nie chciało.
Nie polegam tutaj na zewnętrznych repozytoriach, ponieważ serwer z Graylogiem nie ma wyjścia na internet. Można zrobić reposync MongoDB oraz Grayloga, ale niektóre pliki RPM zajmują ponad gigabajt.
Instalacja MongoDB
Lista pakietów RPM:
Pobrać do jednego katalogu i zainstalować:
# rpm -Uvh *rpm
Niektórych z tych narzędzi nie będziemy potrzebować, ale aplikacje Mongo nie zajmują dużo miejsca na dysku i bez dostępu do internetu musiałbym ich szukać. Mongo nie wymaga tutaj żadnej dodatkowej konfiguracji. Nie trzeba też otwierać na firewallu żadnego portu.
Źródło: https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-red-hat/ .
Instalacja Datanode
Link do pakietu RPM: https://packages.graylog2.org/repo/el/stable/6.1/x86_64/graylog-datanode-6.1.3-1.x86_64.rpm . Pobrać i zainstalować.
Zalecenia są takie, żeby dać procesom więcej pamięci. Napisać plik /etc/sysctl.d/90-graylog.conf o treści:
vm.max_map_count=262144
i zaczytać:
# sysctl -p /etc/sysctl.d/90-graylog.conf # cat /proc/sys/vm/max_map_count 262144
Teraz można wylosować podejrzanie długie hasło:
< /dev/urandom tr -dc A-Z-a-z-0-9 | head -c${1:-96};echo;
które należy wpisać do pliku /etc/graylog/datanode/datanode.conf w linijce
password_secret =
i uruchomić datanode:
# systemctl enable graylog-datanode # systemctl start graylog-datanode
Instalacja Grayloga
Link do pliku RPM: https://packages.graylog2.org/repo/el/stable/6.1/x86_64/graylog-server-6.1.3-1.x86_64.rpm . Pobrać i zainstalować.
W pliku /etc/graylog/server/server.conf w linijce
password_secret =
przepisać hasło z pliku /etc/graylog/datanode/datanode.conf .
Teraz wygenerować sumę hasła do Grayloga:
# echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1 [podać hasło]
Zwróconą sumę przepisać do pliku /etc/graylog/server/server.conf w linijce
root_password_sha2 =
Całościowo plik /etc/graylog/server/server.conf może tak wyglądać:
# cat /etc/graylog/server/server.conf | grep -Ev '^#|^$' is_leader = true node_id_file = /etc/graylog/server/node-id password_secret = ........................ root_password_sha2 = ..................... bin_dir = /usr/share/graylog-server/bin data_dir = /var/lib/graylog-server plugin_dir = /usr/share/graylog-server/plugin http_bind_address = 0.0.0.0:9000 http_enable_cors = true stream_aware_field_types=false trusted_proxies = 127.0.0.1/32 disabled_retention_strategies = none,close allow_leading_wildcard_searches = false allow_highlighting = false field_value_suggestion_mode = on output_batch_size = 500 output_flush_interval = 1 output_fault_count_threshold = 5 output_fault_penalty_seconds = 30 processor_wait_strategy = blocking ring_size = 65536 inputbuffer_ring_size = 65536 inputbuffer_wait_strategy = blocking message_journal_enabled = true message_journal_dir = /var/lib/graylog-server/journal lb_recognition_period_seconds = 3 mongodb_uri = mongodb://localhost/graylog mongodb_max_connections = 1000 integrations_scripts_dir = /usr/share/graylog-server/scripts
Można już uruchomić aplikację:
# systemctl enable graylog-server # systemctl restart graylog-server
W logu /var/log/graylog-server/server.log czasem można znaleźć linijki
2024-11-30T15:42:43.704+01:00 WARN [IndexerClusterCheckerThread] Elasticsearch node [192.168.111.45] triggered [ES_NODE_DISK_WATERMARK_HIGH] due to low free disk space
i w takim wypadku trzeba przydzielić więcej miejsca do katalogu /var/lib/graylog-datanode.
Jeżeli Graylog uruchomił się poprawnie, we wspomnianym logu pojawi się zapis:
======================================================================================================== It seems you are starting Graylog for the first time. To set up a fresh install, a setup interface has been started. You must log in to it to perform the initial configuration and continue. Initial configuration is accessible at 0.0.0.0:9000, with username 'admin' and password '.........'. Try clicking on http://admin:.........@0.0.0.0.0:9000 ========================================================================================================
Trzeba na chwilkę otworzyć port 9000/tcp na firewallu, żeby wejść na stronę konfiguratora i w czterech krokach utworzyć certyfikat oraz indeks w Opensearch. To nie będzie certyfikat dla strony administracyjnej Grayloga, więc nie trzeba się nim za bardzo przejmować i utworzyć jeden na 20 lat. Zamiast 0.0.0.0 trzeba napisać adres IP serwera z aplikacją. Po przejściu konfiguratora można zamknąć port 9000.
Proxy na Nginx
Trzeba mieć zainstalowanego Nginxa i wygenerowany / kupiony jakikolwiek certyfikat SSL.
Plik /etc/nginx/proxy_params , zawierający dosyć standardowe ustawienia:
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 64M; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; #add_header X-Frame-Options SAMEORIGIN; #add_header X-Content-Type-Options nosniff,sameorigin; #add_header Content-Security-Policy "default-src 'self'"; add_header X-XSS-Protection "1; mode=block"; add_header Referrer-Policy "origin"; proxy_intercept_errors on; #proxy_redirect off;
Zwrócić uwagę na komentarze. Uri /api nie chce mi się ładować w przeglądarce, kiedy te ustawienia są włączone. Jeszcze nie wiem, dlaczego.
Plik vhosta, na przykład /etc/nginx/conf.d/graylog.conf :
server { listen 80; server_name log1.ping.local; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name log1.ping.local; location / { proxy_pass http://127.0.0.1:9000; include proxy_params; } ssl_certificate_key /etc/ssl/nginx/log1.ping.local.key; ssl_certificate /etc/ssl/nginx/log1.ping.local.crt; }
I można używać Grayloga po normalnym https, który nie jest skonfigurowany w samej aplikacji.
Logi z journala
Graylog nie umie Journald i trzeba mu trochę pomóc.
W aplikacji Graylog trzeba dodać nowy „input” typu „Syslog UDP”
nasłuchujący na 0.0.0.0 na jakimś wysokim porcie typu 10010
W celu ochrony przed spamem, należy otworzyć na firewallu port 10010/udp, ale tylko dla obserwowanej maszyny. Inne maszyny będą miały nowe „inputy” na innych portach.
Na obserwowanej maszynie można zrobić nowy serwis w pliku /etc/systemd/system/journalsyslog.service :
[Unit] Description=Send Journalctl to Syslog [Service] TimeoutStartSec=0 ExecStart=/bin/sh -c '/usr/bin/journalctl -o short-iso -f | ncat -u log1.ping.local 10010' Restart=always RestartSec=11s [Install] WantedBy=multi-user.target
Po uruchomieniu:
# systemctl daemon-reload # systemctl enable journalsyslog # systemctl restart journalsyslog
w panelu administracyjnym Grayloga będzie widać pierwsze zagregowane logi.