Samhain – praca w sieci

Klient – serwer

Program może działać także w architekturze klient – serwer. Wykorzystywane jest to w trzech przypadkach:

  • logowania zdarzeń do pliku na serwerze,

  • logowania zdarzeń do bazy danych na serwerze,

  • pobierania pliku konfiguracyjnego i bazy plików z serwera

Należy wtedy skompilować go w dwóch wersjach: serwera (–enable-network=server) oraz klienta ( –enable-network = client). Cała komunikacja między serwerem a klientem jest szyfrowana a dodatkowo klienci przechodzą procedurę autoryzacji. Aby to działało musimy wymyśleć hasło 8-znakowe zapisane w trybie heskadecymalnym (albo korzystamy z pomocy yule -gen-password) a następnie wpisać je do binariów klienta (samhain_setpwd -P binarka_samhain-a nowy-plik hasło). W przypadku serwera musimy zarejestrować klienta. W tym celu wydajemy polecenie yule -P hasło. Zwróci on nam tajemniczy ciąg znaków postaci: client=host@salt@zakodowane-hasło. Wstawiamy go do odpowiedniej sekcji pliku konfiguracyjnego yule (serwera) i uruchamiamy go z parametrem -S. Na koniec w konfiguracji klienta wybieramy poziom wiadomości przesyłanych na serwer zmieniając zmienną LogServeriry.To wszystko. Od tej chwili programy powinny działać z wykorzystaniem sieci.

Serwer standardowo słucha na porcie 49777.

Należy również pomyśleć o zdefiniowaniu użytkownika, na prawach których będzie działał serwer yule. Jeżeli nie podamy tego podczas kompilacji serwera () będzie on działał na prawach użytkownika daemon. Jeżeli jednak to zrobimy wygodnie jest skorzystać ze skryptu automatycznie ustawiającemu prawa dostępu do binarów, plików konfiguracyjnych i logów.

Konfiguracja klienta nie jest trudna, należy jedynie zmienić priorytet informacji, które są wysyłane na serwer, odstęp czasu między kolejnymi połączeniami oraz wskazać serwer logów (o ile nie zrobiliśmy tego w czasie kompilacji).

## konfiguracja klient-a
ExportSeverity=warn

SetLogServer=10.9.91.13

# timer for time stamps
SetLoopTime=900

Od tej chwili możesz już wysyłać logi na serwer. Wygodne może okazać się tworzenie osobnego pliku logów na serwerze dla każdego klienta, dzięki czemu uzyskamy większą ich czytelność. Cechę tą włączamy w pliku konfiguracyjnym serwera w sekcji misc dopisując dyrektywę:

UseSeparateLogs=yes

Rozwiązanie to najlepej połączyć z bazą danych, dzięki temu będziesz mógł znacznie wygodniej wyszukiwać informację o zdarzeniach.

Bazy danych

W przypadku posiadania wielu komputerów, których bezpieczeństwa musimy strzec, wygodnie jest logować zdarzenia do bazy danych. Smahain w chwili obecnej może współpracować , z MySQLem i PostgreSQLem.

Pierwszą czynnością jest przekompilowanie samhaina z następującymi opcjami: –enable-xml-log oraz -with-database=mysql lub –with-database=postgresql w zależności od używanej bazy danych. Logowanie do bazy danych wymusza użycie formatu xml.

W katalogu głównym źródeł znajdują się pliki samhain.mysql.init oraz samhain.postgres.init. Ich zadaniem jest stworzenie potrzebnej struktury w postaci tabeli i bazy danych. Przykładowo aby utworzyć strukturę w bazie danych MySQL należy wydać z poziomu administratora polecenie:

mysql < samhain.mysql.init

Utworzy to jedną bazę danych o nazwie samhain a w nim tabele o nazwie log. Analogicznie będziesz musiał postąpić w przypadku Postgresqla. Oczywiście skrypty nie ustawią automatycznie hasła dla tego użytkownika. Należy to zrobić samodzielnie. Następnie informujemy program z jakiego serwera, bazy danych i na jakich uprawnieniach ma działać:

## konfiguracja serwera
# sekcji log
DatabaseSeverity=warn

# sekcja Database
[Database]
SetDBHost=127.0.0.1
SetDBName=samhain
SetDBTable=log
SetDBUser=samhain
SetDBPassword=samhain
SetDBServerTstamp=true

Połączenie z bazą danych nie jest szyfrowane należy więc ze względów bezpieczeństwa usytuować ją na tym samym komputerze co serwer. Innym problemem jest to iż hasło jest zapisane w pliku konfiguracyjnym jako zwykły tekst, należy więc zabezpieczyć dostęp do pliku (najlepiej ukrywając go w pliku graficznym albo przechowując na serwerze).

Radziłbym też zmianę czasu, po którym samhain informuje iż wszystko jest OK. Domyślna wartość (20 sekund) powoduje szybko rosnącą liczbę wpisów w bazie danych.

Należy też poważnie przemyśleć decyzję o wysyłaniu emailem informacji w przypadku gdy zastosujemy logowanie z wykorzystaniem xml-a (co jest tutaj wymagane), gdyż prawie każdą informację program wysyła w osobnej wiadomości. Możemy więc spodziewać się po każdym uaktualnieniu systemu zalewu naszej skrzynki administratorskiej nową pocztą.

Pliki konfiguracyjne i bazy danych na serwerze

Drugim rozwiązaniem bardzo przydatnym w większej sieci jest trzymanie plików konfiguracyjnych i baz danych w plikach na serwerze. Pozwala to mniej martwić się o integralność danych na klientach. Musimy jedynie szczególnie pilnować bezpieczeństwa serwera logów.

W czasie kompilacji musimy na twardo wkompilować w binaria programu informację o tym iż plik konfiguracyjny powinien pobrać z serwera (–with-config-file=REQ_FROM_SERVER/ciezka_dostepu), podać ten serwer ( –with-logserver=adres_IP) oraz oczywiście skompilować go jako klienta.

Przykładowe polecenie będzie miało postać:

./configure
 --with-config-file=REQ_FROM_SERVER/etc/samhain.conf2
 --with-logserver=10.9.91.13
 --enable-network=client

Może się jednak zdarzyć iż yule (czyli serwer) nie będzie szukał pliku, tam gdzie klient wskaże. Należy wtedy śledzić komunikaty. Dla bardziej niecierpliwych podam iż trzeba umieścić plik z odpowiednią nazwą (rc.nazwa_komputera albo rc) w katalogu /var/lib/yule i zapewnić użytkownikowi, na prawach których działa serwer (standardowo daemon), dostęp do niego.

Jeżeli chcemy pobierać bazę z informacjami o plikach z serwera to konfiguracja programu do kompilacji jest bardzo podobna do poprzedniego przypadku. Jedyna różnica to pojawienie się opcji –with-data-file określająca skąd ma być pobrany plik.

Przykładowe polecenie będzie miało postać:

--with-data-file=REQ_FROM_SERVER/var/lib/samhain/data.samhain
--with-logserver=10.9.91.13
--enable-network=client

Przy uruchamianiu programu plik zostanie wygenerowany lokalnie i należy go przekopiować (np. przy pomocy scp) na serwer. Wynika to z faktu iż pozwolenie programowani na samodzielnie wykonanie tej czynności (czyli np. bez wiedzy administratora) otworzyłoby możliwości nadużycia tej opcji. Plik na serwerze powinien znajdować się w katalogu /var/lib/yule. Podobnie jak poprzednio należy zadbać o odpowiednią nazwę (file.nazwa_komputera lub file) oraz prawa dostępu do niego.

Dodaj komentarz