Syslog-ng: log remoti e cifratura tramite stunnel

In un precedente infobox era stata illustrata la procedura da seguire per fare in modo che syslog-ng potesse loggare verso un sistema remoto utilizzando una vpn creata tramite openvpn.  
In questo infobox, verra' illustrato come ottenere lo stesso risultato utilizzando un tunnel SSL tramite stunnel.  
La distribuzione di riferimento utilizzata e' stata una CentOS e si presume che syslog-ng sia gia' stato installato sui sistemi interessati.  
Innanzitutto e' necessario installare stunnel sia sul syslog server locale che remoto:  

yum install stunnel  

Successivamente generare il certificato utilizzato per identificare il syslog server remoto al quale inviare i messaggi:  

openssl req -new -x509 -days 3650 -nodes -out server.pem -keyout server.pem   

Creare quindi una copia del certificato server e rimuovere la parte relativa alla chiave compresa tra  -----BEGIN RSA PRIVATE KEY----- e  -----END RSA PRIVATE KEY-----. Il nuovo file .pem andra' copiato sul sistema che dovra' inviare i messaggi verso il syslog centrale tramite il tunnel cifrato.  

Nella directory /etc/stunnel del syslog centrale creare il file di configurazione stunnel.conf:  
  
cert = /etc/stunnel/server.pem  
CAfile = /etc/stunnel/client.pem  
verify=3  
[5140]  
        accept = 10.76.120.40:5140  
        connect = 127.0.0.1:514  
  
Nell'esempio riportato l'indirizzo IP del syslog server che deve ricevere i messaggi e' 10.76.120.40, la porta sulla quale stunnel restera' in ascoto la tcp 5140, mentre syslog-ng ricevera' i messaggi syslog sulla porta 514 dell'indirizzo di loopback.  
server.pem e' il certificato generato in precedenza con il comando openssl req mentre client.pem dovra' contenere il certificato generato per il syslog client, privato della parte relativa alla chiave privata, ovvero -----BEGIN RSA PRIVATE KEY----- e  -----END RSA PRIVATE KEY-----.  
L'opzione verify, infine, indica il meccanismo di verifica dei certificati. 3 e' l'opzione piu' restrittiva disponibile e consente la creazione di un tunnel esclusivamente da sistemi il cui certificato sia presente nel file definito dalla direttiva CAfile.  
In caso di problemi nell'instaurazione del tunnel, se si sospetta essi possano dipendere dai certificati e' possibile rimuovere l'opzione verify in modo che non venga fatta alcuna verifica e sia cosi' possibile circoscrivere il problema.  
Il tunnel puo' venire semplicamente avviato con il comando stunnel e non fara' altro che ricevere i messaggi cifrati sulla porta tcp 5140 e rigirarli sulla tcp 514 di localhost dove e' in ascolto syslog-ng.  
Si riporta uno stralcio di configurazione del file /etc/syslog-ng/syslog-ng.conf che indica come fare in modo che syslog-ng centrale possa ricevere i messaggi sulla porta 514 tcp:  
  
#sorgenti, compresi log da remoto  
source s_all {  
    file ("/proc/kmsg" log_prefix("kernel: "));  
    unix-stream ("/dev/log");  
    internal();  
    #tcp 514 per client che supportano tcp e stunnel  
    tcp(ip(127.0.0.1) port(514) keep-alive(yes) max-connections(10));  
};  
  
Per fare in modo un sistema registri i propri log sul syslog server remoto e' innanzitutto necessario creare un certificato ssl per esso:  

openssl req -new -x509 -days 3650 -nodes -out client.pem -keyout client.pem  
  
Configurare quindi stunnel sul sistema in questione in modo da creare un tunnel verso la porta TCP 5140 dell'host 10.76.120.40. In particolare, il file di configurazione /etc/stunnel/stunnel.conf da creare sul client dovra' essere uguale al seguente:  
  
client = yes  
cert = /etc/stunnel/client.pem  
CAfile = /etc/stunnel/server.pem  
verify=3  
[5140]  
        accept = 127.0.0.1:514  
        connect = 10.76.120.40:5140  
  
Il certificato del syslog server, server.pem deve essere copiato sul sistema e rimossa dal file in questione il testo compreso tra -----BEGIN RSA PRIVATE KEY----- e  -----END RSA PRIVATE KEY-----, lasciando esclusivamente la parte relativa al certificato.  
Definiti i certificati ed il file di configurazione, il tunnel puo' essere instaurato semplicemente lanciando il comando stunnel senza alcun parametro.  
Infine, perche' syslog-ng dal sistema client possa inviare i propri messaggi al sistema remoto e' necessario inserire almeno le seguenti linee nel file /etc/syslog-ng/syslog-ng.conf:  
  
[...]  
destination d_loghost { tcp("127.0.0.1" port(514)); };  
[...]  
log { source(nomesorgente); filter(nomefiltro); destination(d_loghost); };  
  
La direttiva filter(nomefiltro) puo' essere omessa. In tal caso tutti i messaggi syslog verranno inviati al sistema remoto.  
Nell'esempio riportato syslog-ng inviera' i messaggi verso la porta tcp 514 del proprio indirizzo di loopback, ove e' in ascolto il tunnel cifrato che a sua volta redirigera' i messaggi verso la porta 5140 del syslog server remoto 10.76.120.40.

Privacy Policy