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.
- Musíme nejdřív povolit port pro input pro daný standard syslogu.
- Pak si čeknout, že se nám začnou logy vyčítat a nastavit si dotazy.
- Nahodit si na dashboard ty statistiky, které nás zajímají.
- 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á.