loganalyzer_642_362_force

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';