Spis treści

rsyslog centralny serwer logów

serwer

Aby serwer przyjmował logi od innych hostów należy od komentować/utworzyć wpisy w /etc/rsyslog.conf

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
# specify senders you permit to access
# 
$AllowedSender TCP, 127.0.0.1, 765.567.765.167/32, xxx.xxx.xxx.xxx/32, *host.com

Po restarcie serwer o ile zostanie odblokowany port 514 zacznie przyjmować logi. W takiej postaci logi poszczególnych hostów zostaną wymieszane co nie jest zbyt pożądane i wygodne, aby temu zapobiec musimy utworzyć wzorce/template plików dla poszczególnych logów np secure, message i maillog :

#*.info;mail.none;authpriv.none;cron.none                /var/log/messages
$template Message_log,"/var/log/messages-%fromhost%.log"
*.info;mail.none;authpriv.none;cron.none -?Message_log
# 
# authpriv.*                                              /var/log/secure
$template Secure_log,"/var/log/secure-%fromhost%.log"
authpriv.* -?Secure_log
#
#mail.*                                                  -/var/log/maillog
$template Mail_log,"/var/log/mail-%fromhost%.log"
mail.* -?Mail_log

Log secure zostanie zastąpiony secure-nazwahosta.log Pliki będą tworzone automatycznie po nazwach hostów łączących się rsyslog

klient

Po stronie klient również edytujemy plik /etc/rsyslog.conf tworząc wpisy :

# ### begin forwarding rule ###
$WorkDirectory /var/lib/rsyslog # where to place spool files
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList   # run asynchronously
$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @@ipserwera:514
# ### end of the forwarding rule ###

Najistotniejszym wpisem jest oczywiście ten zawierający adres serwera rsyslog czyli *.* @@ipserwera:514

Na koniec restartujemy rsyslog po stronie klienta i serwera.

Niestety taka transmisja nie jest szyfrowana i łatwo może zostać przejęta, dlatego produkcyjnie do przesyłania logów przez internet należy uruchomić TLS i skonfigurować szyfrowaną transmisję.

TLS szyfrowana transmisja rsyslog

Zaczynamy od zainstalowania odpowiednich pakietów i ile nie ma ich w systemie

yum install gnutls-utils rsyslog-gnutls

gnutls-utils zawiera narzędzie certtool do generowania certyfikatów natomiast rsyslog-gnutls wsparcie dla TLS w rsyslog.

Aby szyfrowanie miało sens musimy wygenerować klucze i certyfikaty:

1. Generujemy klucz prywatny, musi on pozostać poufny jego przejęcie kompromituje cały system.

certtool --generate-privkey --outfile ca-key.pem

2. Tworzymy certyfikat „self-signed” CA

certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem

W trakcie tworzenia padnie sporo pytań, ważne aby wybrać długi okres ważności certyfikatu, po jego wygaśnięciu trzeba będzie wygenerować wszystkie certyfikaty od nowa które zostały utworzone z jego udziałem. certificates belongs to an authrity -yes oraz The certificate is used to sign other certificates - Yes

3. Rozprowadzamy certyfikat CA do wszystkich klientów rsyslog i wskazujemy go wpisem $DefaultNetstreamDriverCAFile Będzie to główny wydawca wszystkich innych certyfikatów.

4. Generujemy certyfikat dla każdego hosta ( łącznie z serwerem )

Poniższe komendy zakłądają że generujemy certyfikat w podkatalogu a ca.pem oraz ca-key.pem jest w katalogu nadrzędnym

certtool --generate-privkey --outfile key.pem --bits 2048
certtool --generate-request --load-privkey key.pem --outfile request.pem
certtool --generate-certificate --load-request request.pem --outfile cert.pem --load-ca-certificate ../ca.pem --load-ca-privkey ../ca-key.pem
rm -f request.pem