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.