====== 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:
* https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-database-tools-100.10.0-1.x86_64.rpm
* https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-mongosh-2.3.4.x86_64.rpm
* https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-7.0.9-1.el9.x86_64.rpm
* https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-database-7.0.9-1.el9.x86_64.rpm
* https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-database-tools-extra-7.0.9-1.el9.x86_64.rpm
* https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-mongos-7.0.9-1.el9.x86_64.rpm
* https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-server-7.0.9-1.el9.x86_64.rpm
* https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-tools-7.0.9-1.el9.x86_64.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
Źródło: https://go2docs.graylog.org/current/downloading_and_installing_graylog/red_hat_installation.htm?tocpath=Install%20Graylog%7COperating%20System%20Packages%7C_____2#InstallDataNode .
----
== 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
# 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.
Źródło: https://go2docs.graylog.org/current/downloading_and_installing_graylog/red_hat_installation.htm?tocpath=Install%20Graylog%7COperating%20System%20Packages%7C_____2#InstallGraylog .
----
== 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"
{{ :wiki:gl_input01.jpg?400 |}}
nasłuchujący na 0.0.0.0 na jakimś wysokim porcie typu 10010
{{ :wiki:gl_input02.jpg?400 |}}
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.