Każdy admin prędzej czy później spotyka się z taką sytuacja że potrzebuje mieć serwer sysloga który będzie zbierał logi ze wszystkich urządzeń w sieci. Generalnie z różnych powodów a może być ich wiele nie ma co wnikać, można robić to też dla fanu ;)
Ja robię to z potrzeby i mam nadzieje że komuś się przyda chociaż można powiedzieć też RTFM :)
Założenia:
Serwer syslog – 192.168.0.1
Klient sysloga – 192.168.0.2
Konfiguracja rsyslog:
nano /etc/rsyslog.conf
Usuwamy hasze jak poniżej:
# Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514
Mi było potrzebne logowanie do różnych plików dla różnych adresów IP, realizują to poniższe dwie linijki:
$template FILENAME,"/var/log/rsyslog/%fromhost-ip%/syslog.log" *.* ?FILENAME
Jeśli chce to moge logować wszystko do jednego pliku
*.* /var/log/rsyslog/all.log
Lub logować logi z odpowiednich sieci do odpowiednich plików:
if $fromhost-ip startswith '192.168.2' then /var/log/rsyslog/switche.log & ~ if $fromhost-ip startswith '192.168.3.' then /var/log/rsyslog/serwery.log & ~
Po restarcie usługi stworzy ona wszystkie potrzebne katalogi i pliki
/etc/init.d/rsyslog restart
Na tym etapie może patrzeć już czy w pliku pojawiają się jakieś wpisy i pliki jak poniżej:
ls /var/log/rsyslog 127.0.0.1 all.log
Dla testu można włączyć logowanie na jakimś hoście konfigurując syslog jako klienta.
Najlepiej na samym dole rsyslog.conf dopisać:
*.* @192.168.0.1
Loganalyzer
Wszystko fajnie ale dobrze było by przeglądać sobie logi przez jakiś interfejs www
Pobieramy loganalyzer z loganalyzer.adiscon.com. Dla ciekawskich demko do obejżeni na loganalyzer-demo.adiscon.com.
Instalujemy httpd i php
yum install httpd php php-gd
Uruchamiamy server http
/tec/init.d/httpd start
Nadajemy uprawnienia dla katalogu rsyslog
chmod -R 755 /var/log/rsyslog
Wchodzimy na nasz IP serwera w tym przypadku 192.168.0.1/loganalyzer/install.php i przechodzimy przez proces konfiguracji gdzie podajemy plik sysloga który ma być obrabiany /var/log/rsyslog/all.log
Tu trzeba sie zatrzymać i zapamiętać ze takich plików może być wiele np: serwery, switche, NAS. Ale o tym póżniej.
Loganalyzer powinien zgłosić:
Syslog file is not readable, read access may be denied
Żeby nie było tak łatwo w RedHacie jest domyślnie włączony SELinux można zrobić setenforce 0 i będzie po kłopocie ale obniżanie bezpieczeństwa nie jest wyjściem wiec poniżej pokaże jak żyć z SELinuxem.
Konfiguracja SELinux
Na początek trzeba zainstalować przydatny pakiet do obsługi SELinux który będzie nam podpowiadał co robić.
yum install setroubleshoot
Sprawdzamy czy SELinux jest włączony:
getenforce Enforcing
Jest włączony lecimy dalej
W logach /var/log/message można zobaczyć że SELinux zgłasza że serwer httpd nie ma uprawnień do naszego pliku all.log
SYSLOG setroubleshoot: SELinux is preventing /usr/sbin/httpd from read access on the file /var/log/rsyslog/all.log. For complete SELinux messages. run sealert -l 030c1aa7-76fe-4588-a4e2-ae10a2b4be74
Postępujemy zgodnie z wiadomością
sealert -l 030c1aa7-76fe-4588-a4e2-ae10a2b4be74
SELinux podpowiada co mamy zrobić aby odblokować dostęp do pliku dla serwera www
grep httpd /var/log/audit/audit.log | audit2allow -M mypol semodule -i mypol
Mamy dostęp do plików ale gdy zmienimy port np z 514 na 1514, SELinux też zablokuje tą akcje ponieważ domyślnym portem jest 514. I tak samo patrzymy w logach czy SELinux informuje nas jak nadać uprawnienia dla tego portu.
SYSLOG setroubleshoot: SELinux is preventing /sbin/rsyslogd from name_bind access on the udp_socket . For complete SELinux messages. run sealert -l aed7b30e-b878-43e4-a664-fc7a37670e98 semanage port -a -t PORT_TYPE -p udp 1514
Wykonujemy akcje
semanage port -a -t syslogd_port_t -p udp 1514
Po każdej zmianie SELinux trzeba restartować usługę:
/etc/init.d/rsyslog restart
I to na tyle można cieszyć się serwerem syslog z interfejsem www.
Wspominałem że trzeba coś zapamiętać, chodzi o to że w LogAnalyzer możemy wybierać pliki które aktualnie analizujemy. Na pewno to pomoże przy dużej ilości klientów gdzie można rozdzielić sobie serwery np. od przełączników.
Źródłowe pliki konfiguruje się w pliku config.php w katalogu w którym leży loganalyzer przykład poniżej.
$CFG['DefaultSourceID'] = 'Source1'; $CFG['Sources']['Source1']['ID'] = 'Source1'; $CFG['Sources']['Source1']['Name'] = 'Switche'; $CFG['Sources']['Source1']['ViewID'] = 'SYSLOG'; $CFG['Sources']['Source1']['SourceType'] = SOURCE_DISK; $CFG['Sources']['Source1']['LogLineType'] = 'syslog'; $CFG['Sources']['Source1']['DiskFile'] = '/var/log/rsyslog/switche.log'; $CFG['Sources']['Source2']['ID'] = 'Source2'; $CFG['Sources']['Source2']['Name'] = 'Serwery'; $CFG['Sources']['Source2']['ViewID'] = 'SYSLOG'; $CFG['Sources']['Source2']['SourceType'] = SOURCE_DISK; $CFG['Sources']['Source2']['LogLineType'] = 'syslog'; $CFG['Sources']['Source2']['DiskFile'] = '/var/log/rsyslog/serwery.log';