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
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ę.
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