Management logů a instalace Graylog

Dnes si ukážeme přehled možností monitorování systémových zpráv a logů. Poté následně si nasadíme jeden z vybraných monitoringů

Napřed filozofická otázka. Proč vlastně něco takového zvažovat?

Typická situace je, když nějaký uživatel v síti začne mít nutkání dostat se do nějakého switche, routeru či jiné sítové komponenty. Jako správný BFU začne bruteforce útokem. Když se to nepovede, zkouší nějaké tipé skriptíky alá kliknu a ono to něco udělá. Takové události u vás jako správce sítě nejsou to, co chcete aby se dělo, ale jak mít o nich přehled? Jak vědět s předstihem, že někdo ( nebo nějaký nakažený bot) se vám zkouší lámat do infrastruktury?

Další možná situace je dodavatel či externí firma, která se vám stará o server. Pořád Vám tvrdí, jak pravidelně provádí profylaxii a stará se Vám o železo. Jak si zkontrolujete, že opravdu dělá co má a netahá Vás jen za nos?

Třetí situace je, když chcete mít přehled o průběhu nějakého pravidla na firewallu. Typicky když třeba máte dst-nat na firewallu a chcete vidět, kolikrát je dané pravidlo užito. Ano, můžete si to čekovat třeba přes Zabbixa, ale co když chcete nějakou analytiku k tomu? Třeba vidět užití dst-natu z různých veřejných IP adres? Vidět z jakých částí světa přichází na port traffic? To už Zabbix nedokáže…

Říkáte si, že to výše sepsané přesně chcete? No super. Tento článek je pro Vás jak ušitý.

Obecný koncept managementu logů

Obecně od řešení pro monitorování logů očekáváme, že na nějaký centrální stroj sesbíráme logy z různých strojů, nějak si je profiltrujeme. Vypíchneme to, co nám přijde zajímavé a to si buď vizualizujeme, nebo si nastavíme notifikaci při zjištění nějakého nestandardního chování.

Konkrétní řešení na trhu

Na trhu je dostupno hned několik různých řešení a každé je určené pro jinou sortu správců. Někdo preferuje rychlost a jednoduchost, nekdo zase komplexitu a možnost si vše udělat od základu sám. Některá řešení na trhu jsou čistě open-source, některá jsou něco mezi a některá zase placená. Pokusil jsme se je intuitivně rozdělit různá řešení do tří kategorií, abych je alespoň částečně klasifikoval. Autor si neklade za cíl udělat doktorskou práci na téma porovnání technických řešení managementu logů. Naopak, hlavním cílem je utvořit si rychle nadhled nad problematikou a vybrat si pro sebe to správné řešení. Pro lepší představu jsem do závorek v názvu dal snadnou asociaci, jak si lze v běžném světě představit řešení.

Staré syslogy (Flinestoneovo auto na pohon nohama)

Rsyslog nebo syslog-ng jsou open source nástroje dostupné v příkazové řádcea dostupné na různých linuxových distribucích. Jsou to řešení, který to celé odstartovaly a dali monitorování štávu. prosadili se úspěšnou aplikací syslogu. Mnoho toho, co je v těchto starých syslogách je dnes považováno jako standard na trhu. Výhodou obou řešení je, že jsou komplet zdarma. Nevýhodou je, že hold vše musí jít přes příkazovou řádku. Pro začínajícího správce je to peklo. Pro zkušeného uživatele radost.

Zlatá střední cesta (Ford focus)

Zde bych zařadil řešení typu Graylog, Splunk nebo Kiwi. Jejich výhodou je relativně snadná instalace, polo-intuitivní možnost nastavení si pravidel a akceptovatelné možnosti práce či údržby serveru s možností rozšířit si logování více do hloubky.

Pokud vás zajímá více, podívejte se například zde na různá porovnání, kterých je na internetu mnoho. Často mají některé své nástavby nad syslogem.

Ukázky porovnání

rsyslog vs graylog: https://www.slant.co/versus/965/968/~graylog2_vs_rsyslog

Graylog vs splunk: https://www.slant.co/versus/963/965/~splunk_vs_graylog2

Zlaté grály (Porsche)

Suverénně zlaté grály můžeme nazvat řešení jako je ELK (Elasticsearch, Logstash, Kibana).

Řešení je velmi komplexní, pro začátečníka zcela nepoužitelné. Pro profesionální práci pravděpodobně nejlepší nástroj dostupný na trhu. Jste-li správce ve firmě, nejspíš Vás toto řešení moc nenadchne, pokud nemáte tak 10 poboček po celém světě, jedno IT centrum a hodně času na školení.

pro lepší představu zde je pěkný článek porovnávající ELK, Graylog a Splunk:

Řešeních na trhu je opravdu velké množství a ani já jsem nevyjmenoval všechny. Mezi další dostupné patří třeba logscape, eventTracker log manager, sumoLogic, LogRhythm a tuna dalších https://www.pcwdld.com/best-event-log-monitor-and-siem-tools které si snad už dle výše popsané klasifikace dokážete snadno zařadit.

Z výše dostupných možností jsem si vybral Graylog pro svoje potřeby monitoringu.

Vedlo mě k tomu to, že jsem chtěl něco akceptovatelně jednoduché, použitelné, snadno pochopitelné s možností vizualizace a použitelnou dokumentací. Zcela jsem neměl zájem o cokoliv placeného a ani pseudosložitého. Proto jsem ihned v začátku zamítl syslog-ng a ELK. Když jsem si ve slabé chvilce u implementace Graylogu trhal vlasy, jedním očkem jsem pokukoval po Splunku.

Instalace Graylogu není nikterak složitá. V dokumentaci se dočtete přímo návod, jak si nainstalovat řešení na Debian. Pro lenochy je dostupná virtual appliance. Možnosti nasazení Graylogu jsou pestré a když si nevíte rady, je několik různých návodů od jiných uživatelů. Originální dokumentaci najdeme na docs.graylog.org/en/3.0/pages/installation/os/debian.html

A zde je výtah jednotlivých kroků. Tučně jsem v textu zvýraznil ty části, které nesmíte opomenout, jinak se bdue Graylog kryplovat a nenaběhne. A hned po instalaci se nelekněte, že Graylog ihned nejede. Java a mongoDB dávají stroji vcelku na prdel a trochu to trvá, než se rozběhne webové rozhraní.

Debian installation

This guide describes the fastest way to install Graylog on Debian Linux 9 (Stretch). All links and packages are present at the time of writing but might need to be updated later on.

Warning

This setup should not be done on publicly exposed servers. This guide does not cover security settings!

Prerequisites

If you’re starting from a minimal server setup, you will need to install these additional packages:

$ sudo apt update && sudo apt upgrade
$ sudo apt install apt-transport-https openjdk-8-jre-headless uuid-runtime pwgen dirmngr

MongoDB

The official MongoDB repository provides the most up-to-date version and is the recommended way of installing MongoDB:

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
$ echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

The last step is to enable MongoDB during the operating system’s startup:

$ sudo systemctl daemon-reload
$ sudo systemctl enable mongod.service
$ sudo systemctl restart mongod.service

Elasticsearch

Graylog can be used with Elasticsearch 6.x, please follow the installation instructions from the Elasticsearch installation guide:

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ echo "deb https://artifacts.elastic.co/packages/oss-6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
$ sudo apt update && sudo apt install elasticsearch-oss

Make sure to modify the Elasticsearch configuration file (/etc/elasticsearch/elasticsearch.yml) and set the cluster name to graylog additionally you need to uncomment (remove the # as first character) the line, and add action.auto_create_index: false to the configuration file:

cluster.name: graylog
action.auto_create_index: false

After you have modified the configuration, you can start Elasticsearch:

$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch.service
$ sudo systemctl restart elasticsearch.service

Graylog

Now install the Graylog repository configuration and Graylog itself with the following commands:

$ wget https://packages.graylog2.org/repo/packages/graylog-3.0-repository_latest.deb
$ sudo dpkg -i graylog-3.0-repository_latest.deb
$ sudo apt update && sudo apt install graylog-server

Follow the instructions in your /etc/graylog/server/server.conf and add password_secret and root_password_sha2. These settings are mandatory and without them, Graylog will not start!

You need to use the following command to create your root_password_sha2:

echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1

 --> Tento krok je sice napsán správně, ale pro jistotu jej zdůrazním. Jde o to, že výše uvedeným příkazem si vygenerujete hash, a ten stejný hash dáte přesně v jeho stejném znění takto v konfiguračním souboru jako password password_secret a  root_password_sha2 
 Zde je ukázka kde to přesně to má být: 
 # You MUST set a secret to secure/pepper the stored user passwords here. Use at$ 
 # Generate one by using for example: pwgen -N 1 -s 96 
 password_secret = blablavygenerovanytokenzeskriptu$ 
 # You MUST specify a hash password for the root user (which you only need to in$ 
 # system and in case you lose connectivity to your authentication backend) 
 # This password cannot be changed using the API or via the web interface. If yo$ 
 # modify it in this file. 
 # Create one by using for example: echo -n yourpassword | shasum -a 256 
 # and put the resulting hash value into the following line 
 root_password_sha2 = blablavygenerovanytokenzeskriptu$ 
 Nemohl jsem si pomoct, ale přiadalo mi to jako chyba v dokumentaci a trochu mě zmátla při instalaci. Nicménně nezoufejde, lepší špeky v dokumentací najdete taky (sekce pipelines) 

To be able to connect to Graylog you should set http_bind_address to the public host name or a public IP address of the machine you can connect to. More information about these settings can be found in Configuring the web interface.

Note

If you’re operating a single-node setup and would like to use HTTPS for the Graylog web interface and the Graylog REST API, it’s possible to use NGINX or Apache as a reverse proxy.

The last step is to enable Graylog during the operating system’s startup:

$ sudo systemctl daemon-reload
$ sudo systemctl enable graylog-server.service
$ sudo systemctl start graylog-server.service

The next step is to ingest messages into your Graylog and extract the messages with extractors or use the Pipelines to work with the messages.

Po dokončení instalace je ještě trochu zdržíme u konfiguračního souboru.

Nezapomente si nastavit bind adresu:

# If the port is omitted, Graylog will use port 9000 by default. 
# Default: 127.0.0.1:9000 
 http_bind_address = 0.0.0.0:9000 
#http_bind_address = [2001:db8::1]:9000 

Také doporučuji nastavit si hlavní administrátorský mail a hlavně správné časové pásno, jinak budete mít časy v logách posunuté:

 # The email address of the root user. 
 # Default is empty 
 root_email = prijmeni@connectica.cz 
 # The time zone setting of the root user. See http://www.joda.org/joda-time/tim$ 
 # Default is UTC 
 root_timezone = Europe/Prague  

Pro nastavení notifikací si nastavte rovnou i SMTP. Pokud si to chcete potunit, nastavte si SSL nebo STARTLS.

 # Email transport 
 transport_email_enabled = true 
 transport_email_hostname = smtp.test.cz 
 transport_email_port = 25 
 transport_email_use_ssl = false 
 transport_email_use_auth = true 
 transport_email_auth_username = neco@connectica.cz 
 transport_email_auth_password = mojeSuperTajneHeslo 
 transport_email_subject_prefix = [graylog] 
 transport_email_from_email = odchozi@mail.cz 
 transport_email_protocol = smtp 

Tak, teď graylog rebootněte, aby se konfigurace načetla. Neptejte se mě proč. Nemohl jsem zkrátka najít v dokumentaci, jak udělat reload konfigurace graylog serveru jinak než ho rebootnout.

Po rebootu se nelekněte, asi tak půl století se načítá java a MongoDB. Stihnete dát i cigáro/dvě.

Stav můžete ověřit příkazem:

netstat - tulpn

Když uvidíte, že port naslouchý, máte vyhráno

 root@cnnc-graylog1:~# netstat -tulpn 
 Active Internet connections (only servers) 
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
 tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      687/mongod 
 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      713/sshd 
 tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      689/zabbix_agentd 
 tcp6       0      0 :::9000                 :::*                    LISTEN      692/java 
 tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      694/java 
 tcp6       0      0 ::1:9200                :::*                    LISTEN      694/java 
 tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      694/java 
 tcp6       0      0 ::1:9300                :::*                    LISTEN      694/java 
 tcp6       0      0 :::22                   :::*                    LISTEN      713/sshd 
 tcp6       0      0 :::10050                :::*                    LISTEN      689/zabbix_agentd 
 udp6       0      0 :::3333                 :::*                                692/java 
 udp6       0      0 :::3333                 :::*                                692/java 
 udp6       0      0 :::3333                 :::*                                692/java 
 udp6       0      0 :::3333                 :::*                                692/java 

Když port nenaslouchá, něcoje špatně v konfiguračním souboru.

Čekněte nejdřív /var/log/syslog

A pak podrobnosti najdete ve /var/log/graylog-server/server.log

Ono Vám to napoví. Většinou za to může, že jste se někde překlikli, nebo udělali chybu konfiguraci mailu atd. Intuitivně to určitě vyřešíte.

Nalogujte se do Graylogu pod IP:9000

Na úvodní obrazovce Vás uvítá malý průvodce ve 4 krocích. Je velmi užitečný a hodně pomůže.

  1. Musíme nejdřív povolit port pro input pro daný standard syslogu.
  2. Pak si čeknout, že se nám začnou logy vyčítat a nastavit si dotazy.
  3. Nahodit si na dashboard ty statistiky, které nás zajímají.
  4. Nastavit si mailové alerty, když vznikne anomální chování.

Input nastavíme takto https://docs.graylog.org/en/3.0/pages/getting_started/collect.html

Input

Toto nastavení předpokládá, že máte už najěký stroj nakonfigurovaný tak, aby se snažil posílat logy na Grayloga. Pak v Graylogu prostě klikněte na system/input, poté si otevřte sekci input a vytvořte nový input.

Vyberte jako standard SYSLOG_UDP, moc se s konfigurací nemazlete. Vše nechejte tak, jak je. Příradte si syslog k nodu, nějak si ho pojmenujte a přiřadte mu port, na kterém bude naslouchat syslog

Search

Za chvíli na úvodní obrazovce (search )vidíte, že se vyčítají logy postupně:

Dashboard

V sekci dashboard si utvořte nový dashboard:

A máte tři možnosti, jak si poslat výstup z logu na dashboard:

Začnete tím, že si logy vyfiltrujete. Zde je ukázka, jak se aplikují pravidla filtrace: https://docs.graylog.org/en/3.0/pages/queries.html

A zde je ukázka, kam přesně se dotaz píše. Pole je takové málo viditelné.

Níže pak máme tři možnost jak poslat filtr na dashboard:

  • A) Pošleme číselnou hodnotu
  • B) Pošlete si graf v čase
  • C) pošlete koláčový graf

Různé možnosti vypadají takto na dashboardu:

Alerts

Na závěr je vhodno si nastavit, aby nám příšel mail, když některý z výše uvedených pravidel pro filtraci začne vykazovat nějakou anomálii

Klikneme na alert a nastavíme si podmínku. Máme na výběr z mnoha, pro naše potřeby vybíráme Na streamu všech zpráv a Message count Alert condition

Následně si vybereme doplňkové parametry:

Mezi parametry, které nastavujeme patří:

  • prahová hodnota, která bude sledována (treshold)
  • časový interval za jakou dobu bude sledována prahová hodnota (time range)
  • Podmínka prahové hodnoty (treshold type)

Na ukázku jsem vyobrazil podmínku, že když součet triggerů bude nižší než 5 za posledních 5 minut, tak Graylog vygeneruje notifikaci.

Podmínku si můžeme po uložení ozkoušet tlačítkem test

Takto můžeme testovat a ladit různé podmínky dle naší potřeby

Závěr

Musím říct, že Graylog nemá úplně vhodně napsanou dokumentaci a komunita kolem Graylogu se většinou v případě řešení nějakého problému jen odkáže na dokumentaci, nebo na nějaký jiný webový odkaz na daném fóru, kde nenajdete nic moc kloudného. I tak, po třech dnech sprostých slov se mi nakonec Graylog povedlo akceptovatelně odladit a mám z něj opravdu velkou radost. Zcela sedí pro naše interní i externí potřeby, funguje výborně, pomáhá s identifikací chyb a já budu tajně doufat, že Graylog bude dlouho fungovat a dělat přesně to, co má.