Vyhledávání na webu

Jak nastavit centrální protokolovací server s Rsyslog v Linuxu


Protokoly jsou kritickou součástí jakéhokoli softwaru nebo operačního systému. Protokoly obvykle zaznamenávají akce uživatele, systémové události, síťovou aktivitu a mnoho dalšího, v závislosti na tom, k čemu jsou určeny. Jedním z nejpoužívanějších protokolovacích systémů na systémech Linux je rsyslog.

Rsyslog je výkonný, bezpečný a vysoce výkonný systém pro zpracování protokolů, který přijímá data z různých typů zdrojů (systémů/aplikací) a vydává je do různých formátů.

Vyvinul se z běžného démona syslog na plně vybavený systém protokolování na podnikové úrovni. Je navržen v modelu klient/server, proto může být konfigurován jako klient a/nebo jako centrální logovací server pro jiné servery, síťová zařízení a vzdálené aplikace.

Testovací prostředí

Pro účely této příručky budeme používat následující hostitele:

  • Server: 192.168.241.140
  • Klient: 172.31.21.58

Jak nainstalovat a nakonfigurovat Rsyslog Server

Většina distribucí Linuxu je dodávána s předinstalovaným balíčkem rsyslog. V případě, že není nainstalován, můžete jej nainstalovat pomocí nástroje správce balíčků Linux, jak je znázorněno.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

Po instalaci rsyslog musíte službu prozatím spustit, povolit její automatické spouštění při spouštění a zkontrolovat její stav pomocí příkazu systemctl.

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Hlavní konfigurační soubor rsyslog se nachází na /etc/rsyslog.conf, který načítá moduly, definuje globální direktivy, obsahuje pravidla pro zpracování zpráv protokolu a také obsahuje všechny konfigurační soubory v /etc /rsyslog.d/pro různé aplikace/služby.

sudo vim /etc/rsyslog.conf

Ve výchozím nastavení rsyslog používá moduly imjournal a imusock pro import strukturovaných zpráv protokolu z systemd journal a pro přijímání syslog zprávy z aplikací běžících na lokálním systému přes unixové sokety, resp.

Chcete-li nakonfigurovat rsyslog jako síťový/centrální logovací server, musíte nastavit protokol (buď UDP nebo TCP nebo oba), který bude používat pro vzdálený příjem syslogu, stejně jako port, na kterém poslouchá.

Pokud chcete použít připojení UDP, které je rychlejší, ale nespolehlivé, vyhledejte a odkomentujte řádky níže (nahraďte 514 portem, na kterém chcete, aby naslouchalo, mělo by to shoduje se s adresou portu, na kterou klienti posílají zprávy, na to se podíváme více při konfiguraci klienta rsyslog).

$ModLoad imudp
$UDPServerRun 514

Chcete-li použít připojení TCP (které je pomalejší, ale spolehlivější), vyhledejte a odkomentujte řádky níže.

$ModLoad imtcp
$InputTCPServerRun 514

V tomto případě chceme používat spojení UDP i TCP současně.

Dále je třeba definovat sada pravidel pro zpracování vzdálených protokolů v následujícím formátu.

facility.severity_level	destination (where to store log)

kde:

  • facility: je typ zprávy generující proces/aplikaci, zahrnuje auth, cron, daemon, kernel, local0..local7. Použití * znamená všechna zařízení.
  • úroveň_závažnosti: je typ zprávy protokolu: emerg-0, alert-1, crit-2, err-3, warning-4, notice-5, info-6, debug-7. Použití * znamená všechny úrovně závažnosti a žádná neznamená žádnou úroveň závažnosti.
  • cíl: je buď místní soubor nebo vzdálený server rsyslog (definovaný ve tvaru IP:port).

Následující sada pravidel použijeme pro shromažďování protokolů ze vzdálených hostitelů pomocí šablony RemoteLogs. Upozorňujeme, že tato pravidla musí předcházet všem pravidlům pro zpracování místních zpráv, jak je znázorněno na snímku obrazovky.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs 
& ~

Při pohledu na výše uvedenou sada pravidel je první pravidlo “$template RemoteLogs,”/var/log/%HOSTNAME%/%PROGRAMNAME%.log” ”.

Direktiva $template říká démonu rsyslog, aby shromáždil a zapsal všechny přijaté vzdálené zprávy do odlišných protokolů pod /var/log na základě názvu hostitele (název klientského počítače) a zařízení vzdáleného klienta (program/aplikace), které generovalo zprávy podle nastavení v šabloně RemoteLogs.

Druhý řádek “*.* ?RemoteLogs ” znamená záznam zpráv ze všech zařízení na všech úrovních závažnosti pomocí konfigurace šablony RemoteLogs.

Poslední řádek “& ~ “ instruuje rsyslog, aby přestal zpracovávat zprávy, jakmile jsou zapsány do souboru. Pokud nezahrnete „& ~“, budou se zprávy místo toho zapisovat do místních souborů.

Existuje mnoho dalších šablon, které můžete použít. Další informace najdete na manuálové stránce konfigurace rsyslog (man rsyslog.conf) nebo v online dokumentaci Rsyslog.

To je vše s konfigurací serveru rsyslog. Uložte a zavřete konfigurační soubor. Chcete-li použít poslední změny, restartujte démona rsyslog pomocí následujícího příkazu.

sudo systemctl restart rsyslog

Nyní ověřte síťové sokety rsyslog. Použijte příkaz ss (nebo příkaz netstat se stejnými příznaky) a převeďte výstup do grep, abyste odfiltrovali připojení rsyslogd.

sudo ss -tulnp | grep "rsyslog"

Dále v systému CentOS 7, pokud máte povolený SELinux, spusťte následující příkazy, abyste povolili provoz rsyslog na základě typu síťového soketu.

sudo semanage -a -t syslogd_port_t -p udp 514
sudo semanage -a -t syslogd_port_t -p tcp 514 

Pokud má systém povolenou bránu firewall, musíte spuštěním otevřít port 514, abyste povolili obě připojení UDP/TCP k serveru rsyslog.

------------- On CentOS ------------- 
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

Jak nakonfigurovat klienta Rsyslog pro odesílání protokolů na server Rsyslog

Nyní v klientském systému zkontrolujte, zda je služba rsyslog spuštěna nebo ne, pomocí následujícího příkazu.

sudo systemctl status rsyslog

Pokud není nainstalován, nainstalujte jej a spusťte službu, jak je uvedeno výše.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Jakmile je služba rsyslog spuštěna, otevřete hlavní konfigurační soubor, kde provedete změny výchozí konfigurace.

sudo vim /etc/rsyslog.conf

Chcete-li přinutit démona rsyslog, aby fungoval jako klient protokolu a předával všechny lokálně generované zprávy protokolu na vzdálený server rsyslog, přidejte toto pravidlo předávání na konec souboru, jak je znázorněno na následujícím snímku obrazovky.

*. *  @@192.168.100.10:514

Výše uvedené pravidlo bude odesílat zprávy ze všech zařízení a na všech úrovních závažnosti. Chcete-li odesílat zprávy z konkrétního zařízení, například auth, použijte následující pravidlo.

auth. *  @@192.168.100.10:514

Uložte změny a zavřete konfigurační soubor. Chcete-li použít výše uvedená nastavení, restartujte démona rsyslog.

sudo systemctl restart rsyslog

Jak monitorovat vzdálené protokolování na serveru Rsyslog

Posledním krokem je ověřit, zda rsyslog skutečně přijímá a protokoluje zprávy od klienta, pod /var/log ve tvaru hostname/programname.log.

Spusťte příkaz ls pro dlouhý výpis nadřazeného adresáře protokolů a zkontrolujte, zda existuje adresář nazvaný ip-172.31.21.58 (nebo jakýkoli název hostitele vašeho klientského počítače).

 
ls -l /var/log/

Pokud adresář existuje, zkontrolujte soubory protokolu v něm spuštěním.

sudo ls -l /var/log/ip-172-31-21-58/

souhrn

Rsyslog je vysoce výkonný systém pro zpracování protokolů navržený v architektuře klient/server. Doufáme, že jste schopni nainstalovat a nakonfigurovat Rsyslog jako centrální/síťový protokolovací server a jako klienta, jak je ukázáno v této příručce.

Další pomoc můžete získat také na příslušných manuálových stránkách rsyslog. Neváhejte nám poskytnout zpětnou vazbu nebo položit otázky.