Zarządzanie logami systemowymi (rsyslog) - przekierowanie logów systemowych na inny serwer

Red Hat 6.x / CentOS 6.x
Przechowywanie logów systemowych w jednym scentralizowanym miejscu, poza utworzeniem serwera logów, wymaga od administratora odpowiedniej konfiguracji wszystkich serwerów - klientów tej usługi.

Konfiguracja taka, zależnie od wymogów może odbywać się na kilka sposobów. My wykorzystamy możliwość szyfrowania transmisji, i tak jak w przypadku serwera centralnego przeprowadzimy nieco rozszerzoną konfigurację rsyslog.

Do komunikacji z serwerem kolekcjonującym logi niezbędne będzie odpowiednie przygotowanie certyfikatów ssl dla wszystkich klientów.

Certyfikat serwera

Certyfikat naszego klienta spreparujemy analogicznie do certyfikatu rsyslog na serwerze centralnym. W tym celu na naszym serwerze konieczne będzie doinstalowanie pakietu zawierającego niezbędne narzędzie:

[root@rsyslog-c1 ~]# yum install gnutls-utils

Ze względów bezpieczeństwa nie możemy dopuścić do ujawnienia klucza prywatnego serwera, dlatego certyfikat utworzymy w katalogu z ograniczonymi uprawnieniami odczytu dla innych niż root użytkowników, mianowicie w /etc/pki/rsyslog:

[root@rsyslog-c1 ~]# cd /etc/pki/rsyslog/

 W pierwszej kolejności musimy utworzyć klucz prywatny serwera, a na jego podstawie wygenerować request certyfikatu:

[root@rsyslog-c1 rsyslog]# certtool --generate-privkey --outfile key.pem
Generating a 2048 bit RSA private key...
[root@rsyslog-c1 rsyslog]# certtool --generate-request --load-privkey key.pem --outfile request.pem
Generating a PKCS #10 certificate request...
Country name (2 chars): PL
Organization name:
Organizational unit name:
Locality name:
State or province name:
Common name: rsyslog-c1.my.domain
UID:
Enter a dnsName of the subject of the certificate:
Enter the IP address of the subject of the certificate: 
Enter the e-mail of the subject of the certificate:
Enter a challenge password:
Does the certificate belong to an authority? (y/N):
Will the certificate be used for signing (DHE and RSA-EXPORT ciphersuites)? (y/N):
Will the certificate be used for encryption (RSA ciphersuites)? (y/N):
Is this a TLS web client certificate? (y/N): y
Is this also a TLS web server certificate? (y/N): y

Tak przygotowany request należy podpisać przy użyciu centrum autoryzacyjnego CA - w naszym przypadku będzie to CA serwera centralnego rsyslog. Po skopiowaniu requestu na serwer CA tworzymy podpisany certyfikat serwera:

[root@syslog-server pki]# certtool --generate-certificate --load-request request.pem --outfile cert.pem  --load-ca-certificate CA/certs/ca.pem --load-ca-privkey CA/private/ca-key.pem
Generating a signed certificate...
Enter the certificate's serial number in decimal (default: 1442152178):

Activation/Expiration time.
The certificate will expire in (days): 730


Extensions.
Do you want to honour the extensions from the request? (y/N):
Does the certificate belong to an authority? (y/N):
Is this a TLS web client certificate? (y/N): y
Is this also a TLS web server certificate? (y/N): y
Enter a dnsName of the subject of the certificate: rsyslog-c1.my.domain
Enter a dnsName of the subject of the certificate:
Enter the IP address of the subject of the certificate:
Will the certificate be used for signing (DHE and RSA-EXPORT ciphersuites)? (y/N):
Will the certificate be used for encryption (RSA ciphersuites)? (y/N):
X.509 Certificate Information:
        Version: 3
        Serial Number (hex): 55f57ef2
        Validity:
                Not Before: Sun Sep 13 13:49:41 UTC 2015
                Not After: Tue Sep 12 13:49:45 UTC 2017
        Subject: C=PL,CN=rsyslog-c1.my.domain
        Subject Public Key Algorithm: RSA
                Modulus (bits 2048):
                        b1:e0:6e:68:88:8d:e6:75:68:28:0f:5f:0e:f4:a0:fd
                        52:bb:cd:17:31:24:60:a4:23:ec:3a:36:02:e5:8d:87
                        23:b3:64:5a:a5:34:19:3e:e0:25:dc:0f:61:28:53:df
                        4c:cc:e9:b8:9a:d9:72:d1:7a:09:00:7e:2a:ff:38:d8
                        01:41:67:19:ca:77:00:1d:35:44:22:fc:7b:13:66:a0
                        02:9e:81:33:b9:ee:c8:c2:ed:16:4d:dc:0d:a6:ce:c9
                        0a:f6:e0:98:27:ba:61:a2:36:c3:6c:2f:9e:d4:8f:7d
                        63:20:18:44:98:26:13:88:16:1b:a5:a0:c7:43:9d:eb
                        dd:bf:50:97:91:2b:b5:3c:ee:e2:83:68:52:f7:c1:9a
                        f3:5a:85:2b:78:24:a3:24:5b:e6:91:bb:5c:c0:f7:7c
                        15:3e:71:ef:a0:d4:26:ac:47:aa:ca:35:36:4f:5b:fd
                        2d:9a:0d:64:c1:09:7a:de:ed:f4:9b:66:1b:c3:c9:01
                        9b:5e:65:97:e7:74:ce:f1:d9:dc:12:33:49:2a:82:42
                        1f:53:64:d1:f4:52:6e:b8:fe:12:02:21:43:47:a7:47
                        29:ef:f6:92:9f:de:7a:ab:91:bb:19:16:6d:60:50:6f
                        a1:35:7f:52:da:a9:a0:71:0a:11:e9:d1:1a:35:3e:21
                Exponent (bits 24):
                        01:00:01
        Extensions:
                Basic Constraints (critical):
                        Certificate Authority (CA): FALSE
                Key Purpose (not critical):
                        TLS WWW Client.
                        TLS WWW Server.
                Subject Alternative Name (not critical):
                        DNSname: rsyslog-c1.my.domain
                Subject Key Identifier (not critical):
                        c0b42d4b74b13cf134558d248d4f09a4f2627f4d
                Authority Key Identifier (not critical):
                        b7539df12f3859ff625c5b67756bb3e74bacc0c3
Other Information:
        Public Key Id:
                c0b42d4b74b13cf134558d248d4f09a4f2627f4d

Is the above information ok? (Y/N): y


Signing certificate...

Przygotowany w ten sposób certyfikat przenosimy na nasz serwer kliencki. Należy również pamiętać o przeniesieniu na nasz serwer certyfikatu centrum autoryzacji, czyli w naszym przypadku pliku /etc/pki/CA/certs/ca.pem

Konfiguracja klienta rsyslog

Przygotowaliśmy już certyfikaty, więc nadeszła pora na konfigurację samego pliku /etc/rsyslog.conf. Podobnie jak w przypadku serwera, dyrektywy wysyłające nasze logi na serwer centralny umieściłem na początku pliku:

[root@rsyslog-c1 ~]# vi /etc/rsyslog.conf

$DefaultNetstreamDriver gtls

$DefaultNetstreamDriverCAFile /etc/pki/rsyslog/ca.pem
$DefaultNetstreamDriverCertFile /etc/pki/rsyslog/cert.pem
$DefaultNetstreamDriverKeyFile /etc/pki/rsyslog/key.pem

$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer rsyslog-server.my.domain
$ActionSendStreamDriverMode 1
*.* @@rsyslog-server.my.domain:6514

Istotne jest, aby nazwa serwera centralnego była rozwiązywalna (umieszczona w DNS lub w /etc/hosts)

Przed adresem serwera rsyslog w konfiguracji użyte zostały znaki @@. Oznacza to, że do komunikacji pomiędzy maszynami zostanie użyty protokół tcp. Możemy wymusić używanie udp poprzez pozostawienie pojedynczego @ (należy wówczas pamiętać o otwarciu ruchu dla udp).

Troubleshooting

Podczas zabaw z usługą natknąłem się na kilka błędów, które nie są chyba typowe (nie znalazłem żadnych odpowiedzi w popularnej wyszukiwarce ;) ), a wyniknęły z różnego rodzaju literówek i błędów konfiguracyjnych:

* W /var/log/messages serwera pojawia się wpis:

rsyslogd-2085: peer did not provide a certificate, not permitted to talk to it [try http://www.rsyslog.com/e/2085 ]

Należy zweryfikować, czy ścieżki do certyfikatów hosta-klienta są poprawne i czy linijki nie są zahashowane, oznacza to bowiem, że serwer nie ma poprawnie wskazanego certyfikatu, którym może się przedstawić.

* W /var/log/messages serwera pojawia się:

rsyslogd: not permitted to talk to peer, certificate invalid: signer is not a CA

Ten błąd wygenerowałem sobie przez nieuwagę. Powodem było niewłaściwe wygenerowanie CA, a ściślej mówiąc podczas jego generowania nie wskazałem opcji "Does the certificate belong to an authority". Jeśli widzisz ten błąd, jest duże prawdopodobieństwo, że coś jest nie tak z Twoim CA - spróbuj wygenerować nowe i podpisać certyfikaty jeszcze raz.

* W /var/log/messages nie widać żadnych błędów, a logi maszyny-klienta nie odkładają się ani w plikach zdalnych, ani lokalnie.

W taki sposób może objawiać się brak certyfikatu CA na maszynie-kliencie rsyslog.

TIPS

rsyslog jest dość dobrze udokumentowany w systemie, więc w razie problemów warto zajrzeć do plików /usr/share/doc/rsyslog-5.8.10/rsyslog_tls.html, /usr/share/doc/rsyslog-5.8.10/tls_cert_machine.html, /usr/share/doc/rsyslog-5.8.10/tls_cert_server.html czy innych dostępnych w tej lokalizacji. Mogą być one swoistą ściągawką podczas konfiguracji - oczywiście jeśli wiesz, co robisz.

Brak komentarzy:

Prześlij komentarz