Biztos volt már olyan, hogy jó lett volna a szervereid logjait egy központi helyen tárolni. Az is jó, ha valami értelmes felületen lehetne ezeket a logokat megfigyelni, elemezni. Klasszikusan erre az egyik megoldás, ha a szervereid logjait egy loggyűjtő szerverre irányítod. Simán meg lehet csinálni, ha csinálsz egy loggyűjtő szervert és a többi szervered logjait átirányítod annak az Rsyslogjába, aztán a logokban tudsz greppelni. Jó megoldás, de mi van, ha többre vágysz ennél? Urambocsá' szeretnéd grafikonon is látni hányas a kabát, vagy van olyan alkalmazásod amelynek a log kimenetét elemezgetni akarod. Esetleg riportokat készítenél a logokból. Van egy jó hírem. A Graylog pont erre való.

Az egyik lehetséges megoldás a Graylog szerver. Ebben a cikkben azt fogom leírni, hogy hogyan készíts CentOS8 vagy RHEL8 rendszeren Graylog szervert és egy másik szerver logjait hogyan tudod beirányítani erre a Graylog szerverre.

Akkor csapjunk bele, telepítsünk Graylog szervert!

Előfeltételek

Kell két CentOS8/RHEL8 szerver Minimál installal. Ebben a leírásban CentOS8 rendszert használok, de RHEL8 alatt ugyanúgy kell működjön a leírás. Hálózatnak DHCP-t használok, DNS nincs a teszt környezetben, ezért végig IP címeket fogok használni. A két szerverből az egyik lesz a szerver (graylog-server 192.168.1.204), a másik a kliens (graylog-client 192.168.1.183). Mind a kettőt frissítsük le majd indítsuk újra. 

yum update -y
reboot

Kérdezzük le a verziószámokat mindkét gépen!

[root@graylog-server ~]# cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core)
[root@graylog-client ~]# cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core)

Graylog Szerver telepítése

Három komponensre lesz szükségünk. Ezek mindegyike kell a Graylog szerver működéséhez. Ebben a leírásban az elérhető legfrissebb verziókkal dolgoztam, amelyek a következőek:

Graylog 4.0
MongoDB 4.4
Elasticsearch 7.0

A leírásban végig root-ként dolgoztam a rendszerben, tehát nem sudoers userrel sudo-val.

Mostantól a szerveren (graylog-server 192.168.1.204) fogunk dolgozni.

Első lépésben olyan komponensekre van szükségünk amelyek nincsenek meg a hivatalos CentOS8/RHEL8 tárolókban. Erre való az EPEL repó. Telepítsük fel! Erről már írtam egy cikkben, itt találod:
EPEL repó telepítése CentOS8/RHEL8 rendszeren

Ha kész az EPEL repó telepítése, akkor rakjuk fel a szükséges programokat!

yum install -y wget pwgen perl-Digest-SHA

Telepítsük a java környezetet!

yum install -y java-1.8.0-openjdk-headless

Ellenőrizzük a Java verziót!

[root@graylog-server ~]# java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)

Itt értünk az Elasticsearch telepítéséhez. Nem egyszerű program, és nagyon sok funkciója van, de most azokkal nem foglalkozunk egyszerűen csak rakjuk fel, mert a Graylognak szüksége van rá. Telepítsük az Elasticsearch-öt

Először kell a GPG kulcs az Elasticearcs-höz.

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

El kell készítsnük egy repót az Elasticsearch telepítéséhez.

vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Most már tudjuk telepíteni az Elasticsearch-öt

yum install -y elasticsearch-oss

Állítsuk be a következőket a konfigurációjában:

vim /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog
action.auto_create_index: false

Töltsük újra a systemd-t!

systemctl daemon-reload

Rögzítsük az Elasticsearch indulását a rendszer bootolásához, majd indítsuk el a szolgáltatást!

systemctl enable elasticsearch
systemctl restart elasticsearch

Ellenőrizzük, hogy fut-e!

[root@graylog-server ~]# systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-11-21 18:49:50 CET; 7s ago
Docs: http://www.elastic.co
Main PID: 4397 (java)
Tasks: 31 (limit: 11477)
Memory: 1.2G
CGroup: /system.slice/elasticsearch.service
└─4397 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75>
nov 21 18:49:50 graylog-server.torig.hu systemd[1]: Started Elasticsearch.
lines 1-11/11 (END)

Fut, örülünk.

Ellenőrizzük a működését is. Kérdezzük le, hogy az Elasticsearch felel-e localhoston a 9200-as porton. Valami ilyesmit fogunk látni:

[root@graylog-server ~]# curl -X GET http://localhost:9200
{
"name" : "JsX6_8g",
"cluster_name" : "graylog",
"cluster_uuid" : "kuWLU8VLSGy8EehcodslRg",
"version" : {
"number" : "6.8.13",
"build_flavor" : "oss",
"build_type" : "rpm",
"build_hash" : "be13c69",
"build_date" : "2020-10-16T09:09:46.555371Z",
"build_snapshot" : false,
"lucene_version" : "7.7.3",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

Felel. Klassz, örülünk.

Akkor tegyük fel a MongoDB-t ami a Graylog adatbázisát fogja adni. Ehhez is kell készítsünk egy repót.

vim /etc/yum.repos.d/mongodb-org-4.4.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8Server/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc

Indulhat a MongoDB telepítése.

yum install -y mongodb-org

Rögzítsük, boot időben induláshoz, majd indítsuk el a MongoDB-t.

systemctl enable mongod
systemctl start mongod

Ellenőrizzük!


[root@graylog-server ~]# systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-11-21 18:56:36 CET; 5s ago
Docs: https://docs.mongodb.org/manual
Process: 5024 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
Process: 5022 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 5021 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCE>
Process: 5019 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
Main PID: 5027 (mongod)
Memory: 60.8M
CGroup: /system.slice/mongod.service
└─5027 /usr/bin/mongod -f /etc/mongod.conf
nov 21 18:56:34 graylog-server.torig.hu systemd[1]: Starting MongoDB Database Server...
nov 21 18:56:34 graylog-server.torig.hu mongod[5024]: about to fork child process, waiting until server>
nov 21 18:56:34 graylog-server.torig.hu mongod[5024]: forked process: 5027
nov 21 18:56:36 graylog-server.torig.hu mongod[5024]: child process started successfully, parent exiting
nov 21 18:56:36 graylog-server.torig.hu systemd[1]: Started MongoDB Database Server.

Fut, örülünk.

Eljött végre a mi időnk, elkezdhetjük telepíteni a Graylogot is. A Grayloghoz is szükségünk van a Graylog repó használatára, de van neki telepíthető repó fájlja rpm formátumban. Hurrá! Telepítsük azt:

yum install -y https://packages.graylog2.org/repo/packages/graylog-4.0-repository_latest.rpm

Most már van repónk, telepíthetjük a programot.

yum install -y graylog-server

Szerkesszük meg a konfigot és írjuk bele a titkosító jelszót és az admin jelszót. Generáljunk titkosító kódot, mert az a tuti. Jó tanács: Maradjon ez a jelszó 96 hosszú, mert rövidebbel nem fog működni.

[root@graylog-server ~]# pwgen -N 1 -s 96
CcQ3Md2Mut6gaEKTD0Vk7tsc4SQDFDTp4o4xmrFXST3UzTQwwtTakWx5xGOMLb4g4lBdJl0jVqzKa4H2JS834vv0SukGAUnC

Admin userh jelszavához is generáljunk jelszót.

root@graylog-server ~]# echo -n jelszavunk | shasum -a 256
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -

Ez utóbbi lesz az amivel majd a webes felületen be tudunk lépni, csak a fájlban kódolva tároljuk. A belépéshez pedig elég lesz beírni a jelszavunk. Keressük meg a megfelelő üres helyeket és adjuk meg paraméternek a kódokat az alábbiak szerint.

vim /etc/graylog/server/server.conf
...
password_secret = CcQ3Md2Mut6gaEKTD0Vk7tsc4SQDFDTp4o4xmrFXST3UzTQwwtTakWx5xGOMLb4g4lBdJl0jVqzKa4H2JS834vv0SukGAUnC
...
root_password_sha2 =e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
...

Adjuk hozzá a konfighoz a root email címet is és állítsuk be az időzónát ha szükséges! Az UTC az alapértelmezett.

...
root_email = "Ez az e-mail-cím a szpemrobotok elleni védelem alatt áll. Megtekintéséhez engedélyeznie kell a JavaScript használatát."
...
root_timezone = UTC
...

Be kell állítsuk a konfigban, hogy a Graylog melyik IP címen keresztül engedje a Webbes felületet működni. Adjuk meg a szerverünk IP címét!

http_bind_address = 192.168.1.204:9000

Ha natolt hálózatban van a géped és kívülről kell elérned, akkor add meg a publikus IP címet. Ha csak sima belső háló, akkor ezt hagyd ki! Most sem kell beállítani.

http_external_uri = http://publikus_ip:9000/

Töltsük újra a systemd-t, rögzítsük rendszerindításra a szervizt, majd indítsuk el a Graylogot!

systemctl daemon-reload
systemctl enable graylog-server
systemctl start graylog-server

Ellenőrizzük, hogy fut-e! Valami ilyesfélét fogunk látni.

[root@graylog-server ~]# systemctl status graylog-server
● graylog-server.service - Graylog server
Loaded: loaded (/usr/lib/systemd/system/graylog-server.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2020-11-22 19:25:22 CET; 1h 9min ago
Docs: http://docs.graylog.org/
Main PID: 1871 (graylog-server)
Tasks: 178 (limit: 23967)
Memory: 950.1M
CGroup: /system.slice/graylog-server.service
├─1871 /bin/sh /usr/share/graylog-server/bin/graylog-server
└─1885 /usr/bin/java -Xms1g -Xmx1g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:+UseConcMarkSw>
nov 22 19:25:22 graylog-server.torig.hu systemd[1]: Started Graylog server.

Ahhoz, hogy a Graylog rendesen fusson, be kell állítsuk a Selinuxot. Hogy mi a Selinux? Hát erről lehetne bőven beszélni kb két hétig. Legyen most elég annyi, hogy a Selinux egy biztonsági program amely része a CentOS8/RHEL8 rendszernek. Nagyjából fájl ACL szinten kell beállítani a hozzáférési a jogosultságokat, illetve engedélyezni kell, hogy egy folyamat mihez férhet hozzá. Ha ezeket nem állítjuk be, akkor a Selinux megakadályoza a folyamatokat az erőforrás elérésében. Javaslom sose kapcsold ki, mert kb 99,99%-al növeli a szervered biztonsági szintjét. Nagyon röviden. 

Selinux beállítások. Hogy a Web szerver hozzáférjen a hálózathoz:

setsebool -P httpd_can_network_connect 1

A Graylog REST API és a Web interface használatához:

semanage port -a -t http_port_t -p tcp 9000

Elasticsearch HTTP API ha szükséges lenne:

semanage port -a -t http_port_t -p tcp 9200

MongoDB default port használatához:

semanage port -a -t mongod_port_t -p tcp 27017

Engedélyezzük a MongoDB modult is a Selinuxhoz!

ausearch -c 'mongod' --raw | audit2allow -M my-mongod
semodule -i my-mongod.pp

Ha mindez megvan, akkor ellenőrizzük, hogy működik-e a Graylog szerverünk. Nézzük meg, hogy teker-e a log.

tail -f /var/log/graylog-server/server.log

Ha igen, akkor már nem sok van hátra. Nyissunk tűzfalat a webes felület eléréséhez!

firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --reload

Várni kell egy kicsit míg a Graylog el nem indul, aztán lehet nyitni webes felületet.

http://192.168.1.204:9000/

Belépés admin felhasználóval és a korábban a Graylog konfigurációban megadott hosszú kódnál levő jelszóval lehetséges. (jelszavunk)

 

Belépés után el is kezdhetjük a Graylog szerverünk konfigurálását.

Graylog Kliens beállítása, logok küldése a Graylog szerverbe

Eddig rendben vagyunk. Mi lenne, ha beleirányítanánk egy másik szerver logját a Graylog szerverünkbe? Tegyük meg. Végül is log szervert szeretnénk építeni, nem?

Itt most a kliensünk (graylog-client 192.168.1.183) szerver logjait fogom beirányítani a Graylog szerverre. Még mindig a szerveren dolgozunk! Szólok, ha átmegyünk a kliensre konfigolni. Szóval a logok fogadásához elő kell készítsük a szerverünket. Tűzfalon állítsuk be a logok forwardolását az alábbi parancsokkal. Itt a Forward szabály ami biztosítani fogja, hogy az 514-es UDP portra érkező forgalmat átirányítja a Graylog szerver 1514-es portjára, mert a Graylog azon várja a beérkező logokat.

firewall-cmd --add-masquerade --permanent
firewall-cmd --add-forward-port=port=514:proto=udp:toport=1514 --permanent
firewall-cmd --reload

Ha kívülről a 1514-re akarjuk küldeni a logokat, akkor ezt is állítsuk be. Egyébként elég nekünk az 514-es külső port nyitása is.

firewall-cmd --permanent --add-port=1514/udp
firewall-cmd --reload

Most a Graylog Webes felületén kell néhány beállítást eszközölnünk. Állítsuk be, hogy az Rsyslog küldéseket a Graylog UDP-n fogadja. Ehhez kell csináljunk egy Input beállítást a System/Inputs menüpontban, hogy a Graylog az UDP 1514-es porton várja az adatokat. A szükséges tűzfal szabályokat az imént felvettük hozzá.
Válasszuk ki a menüből a Syslog UDP menüsort majd kattintusnk a Launch new input gombra.

Adjuk meg a szükséges paramétereket az alábbiak szerint!


Mostantól a kiensünkön (graylog-client 192.168.1.183) ​dolgozunk. Lépjünk be root-ként, majd szerkesszük meg az Rsyslog konfigot kényünk-kedvünk szerint. Például:

vim /etc/rsyslog.conf

Egészítsük ki a fájlt még egy sorral. Ha ezt hozzáírjuk, akkor a log bejegyzések nem csak lokálisan lesznek tárolva, hanem el is lesznek küldve a Graylog szerverünkre.

*.info;mail.none;authpriv.none;cron.none @192.168.1.204:514

Indítsuk újra az rsyslogot!

systemctl restart rsyslog

Ellenőrzés. Nyissunk két terminált a kliensen. Egyikben beküldünk egy log bejegyzést, a másikban pedig figyeljük, hogy lokálisan is tárolódik-e a log bejegyzés.

Küldjünk be az "ALMA" stringet üzenetként az rsyslogba.

logger ALMA

Egy másik terminálablakban egyidejűleg megfigyelhetjük a journalctl -f paranccsal, hogy a log bejegyzés lokálisan megjelenik-e.

journalctl -f
nov 21 20:07:55 graylog-server.torig.hu root[5273]: ALMA

Esetleg tail -f -el a logba írást is ellenőrizhetjük.

tail -f /var/log/messages
nov 21 20:07:55 graylog-server.torig.hu root[5273]: ALMA

A kliens konfiguráció ilyen egyszerű volt. Nem kell hozzá se agent se semmi. Az Rsyslog elvégzi amire szükségünk van. Most a Graylog Webes felületén figyelhetjük a log bejegyzés megjelenését.

Működik minden. A Graylognak nagyon fejlett szűrési lehetőségei vannak. Riasztásokat állíthatunk be bizonyos eseményekre. Egyedi Dashboardokat készíthetünk. Csinálhatunk a főnökeinknek színes-szagos-grafikonos-gyönyörűséges riportokat igényeink szerint, de ez már egy másik történet.
Mindazonáltal a Graylognak van egy csomó olyan képessége amely meghaladja e cikk kereteit.

A tesztelésért és javításért köszönet Alexnek.