Come installare un server Syslog su un router


In questa pagina descriverò come installare un server Syslog aggiuntivo su un router (Asus RT-AC56U) - useremo alcuni pacchetti di Entware, pertanto fate riferimento a questa pagina su come installare Entware su un router.
Partiamo dalla premessa che ci sono alcuni dispositivi di rete, come ad esempio i telefoni VOIP, che non possiedono un LOG interno, ma si affidano ad un server Syslog remoto. Su un router come il Asus RT-AC56U, è possibile installare un server Syslog aggiuntivo in modo tale da poter essere utilizzato con qualunque dispositivo di rete. Da notare che dovremo installare un "syslog" aggiuntivo, poiché non dovremo toccare il server "syslog" del router. Useremo quindi il pacchetto Entware denominato "syslog-ng".


Come installare il pacchetto "syslog-ng"

Allo scopo di installare il daemon "syslog-ng" con i pacchetti Entware, dobbiamo eseguire il seguente comando :
opkg install syslog-ng
Il suddetto pacchetto contiene parecchi file, i più importanti sono il daemon "/opt/sbin/syslog-ng", il file di configurazione "/opt/etc/syslog-ng.conf" e lo script di avvio/arresto "/opt/etc/init.d/S01syslog-ng". Creiamo una copia di riserva del file di configurazione "/opt/etc/syslog-ng.conf".
Ciò che segue è il contenuto di esempio del suddetto file di configurazione "/opt/etc/syslog-ng.conf" :

@version:3.9

options {
    chain_hostnames(no);
    create_dirs(yes);
    flush_lines(0);
    keep_hostname(yes);
    log_fifo_size(256);
    log_msg_size(1024);
    stats_freq(0);
    flush_lines(0);
    use_fqdn(no);
};

source src {
    internal();
    unix-dgram("/dev/log");
};

source net {
    udp(ip(0.0.0.0) port(514));
};

source kernel {
        file("/proc/kmsg" program_override("kernel"));
};

destination messages {
    file("/opt/var/log/messages");
};

log {
    source(src);
    source(net);
        source(kernel);
    destination(messages);
};

# put any customization files in this directory
@include "/opt/etc/syslog-ng.d/"

Fare riferimento a questa pagina per ulteriori dettagli sul file di configurazione "syslog-ng.conf". Il suddetto esempio serve più che altro a sostituire il daemon "syslog" del router, mentre a noi serve un "syslog" aggiuntivo, senza dover toccare il "syslog" nativo del router. Pertanto andremo a creare un altro file di configurazione.


Come impostare il file di configurazione del daemon "syslog-ng"

Quello che segue è un altro file di configurazione "syslog-ng.conf" che ci permette di avere un server LOG remoto per uno switch Cisco di tipo gestito.

@version:3.9

options {
    chain_hostnames(no);
    create_dirs(yes);
    flush_lines(0);
    keep_hostname(yes);
    log_fifo_size(256);
    log_msg_size(1024);
    stats_freq(0);
    flush_lines(0);
    use_fqdn(no);
## additional options
    dir-owner(nobody);
    dir-group(nobody);
    owner(nobody);
    group(nobody);
    perm(0666);
    keep-timestamp(yes);
    time-zone("Europe/Rome");
};

source src_cisco {
        udp(ip(0.0.0.0) port(25000));
};

destination log_cisco {
        file("/opt/var/log/cisco.log");
};

log {
    source(src_cisco);
    destination(log_cisco);
};

# put any customization files in this directory
@include "/opt/etc/syslog-ng.d/"

Nel suddetto file di configurazione abbiamo passato dei parametri al daemon "syslog-ng" in modo tale da "ascoltare" una porta del router e tutto ciò che arriva su tale porta lo scriviamo su un file LOG. Nello specifico abbiamo:

  • nella sezione "source" abbiamo stabilito come sorgente l'indirizzo IP del router stesso, protocollo UDP, e porta 25000;
  • nella sezione "destination" abbiamo stabilito come destinazione il file "/opt/var/log/cisco.log";
  • nella sezione "log" abbiamo stabilito come connessione il file LOG determinato dalla sezione "source" e la sezione "destination";

Nella sezione "options" sono inserite le opzioni aggiuntive dedicate al daemon "syslog-ng", nello specifico:

  • per le opzioni "chain_hostnames(no)" e "keep_hostname(yes)" fare riferimento al seguente sito Internet;
  • con l'opzione "create_dirs(yes)" attiviamo la creazione di directory per i file di destinazione;
  • con l'opzione "flush_lines(0)" il daemon agirà su ogni messaggio ricevuto senza quindi creare nessun tipo di buffer;
  • con l'opzione "log_fifo_size(256)" impostiamo il numero di messaggi da memorizzare sulla coda di uscita;
  • con l'opzione "log_msg_size(1024)" impostiamo la massima lunghezza del messaggio in byte;
  • con l'opzione "stats_freq(0)" impostiamo il daemon a raccogliere statistiche soltanto tra il "source" e il "destination";
  • usiamo l'opzione "use_fqdn(no)" poiché abbiamo usato l'opzione "keep_hostname(yes)";
  • con le opzioni "dir-owner(nobody)" e "dir-group(nobody)" impostiamo il proprietario e il gruppo predefiniti per le nuove cartelle create;
  • con le opzioni "owner(nobody)" e "group(nobody)" impostiamo il proprietario e il gruppo predefiniti dei file di destinazione;
  • con l'opzione "perm(0666)" impostiamo i permessi dei file di destinazione;
  • con l'opzione "keep-timestamp(yes)" diciamo al daemon di accettare i valori della data ricevuti dal mittente;
  • con l'opzione "time-zone("Europe/Rome")" diciamo al daemon di convertire i valori della data ricevuti dal mittente secondo il fuso orario impostato.

Nel suddetto file di configurazione gli identificatori "src_cisco" e "log_cisco" sono univoci e vanno usati per un solo dispositivo mittente. Ovviamente possiamo gestire più dispositivi mittenti, usando più identificatori, come nel seguente esempio di file di configurazione in cui abbiamo inserito, oltre agli identificatori per il suddetto switch Cisco, anche gli identificatori per due telefoni VOIP:

@version:3.9

options {
    chain_hostnames(no);
    create_dirs(yes);
    flush_lines(0);
    keep_hostname(yes);
    log_fifo_size(256);
    log_msg_size(1024);
    stats_freq(0);
    flush_lines(0);
    use_fqdn(no);
## additional options
    dir-owner(nobody);
    dir-group(nobody);
    owner(nobody);
    group(nobody);
    perm(0666);
    keep-timestamp(yes);
    time-zone("Europe/Rome");
};

source src_cisco {
        udp(ip(0.0.0.0) port(25000));
};

destination log_cisco {
        file("/opt/var/log/cisco.log");
};

log {
    source(src_cisco);
    destination(log_cisco);
};

source src_voip1 {
        udp(ip(0.0.0.0) port(25005));
};

destination log_voip1 {
        file("/opt/var/log/voip1.log");
};

log {
    source(src_voip1);
    destination(log_voip1);
};

source src_voip2 {
        udp(ip(0.0.0.0) port(25010));
};

destination log_voip2 {
        file("/opt/var/log/voip2.log");
};

log {
    source(src_voip2);
    destination(log_voip2);
};

# put any customization files in this directory
@include "/opt/etc/syslog-ng.d/"

Come eseguire il daemon "syslog-ng"

Per eseguire il daemon "syslog-ng" basta eseguire il comando "/opt/etc/init.d/S01syslog-ng start".


Come configurare il daemon "syslog-ng" remoto sui dispositivi di rete

Sui dispositivi di rete è sufficiente andare nella scheda "syslog", spesso denominata "Remote Log Servers" (o qualcosa di simile), e impostare l'indirizzo IP del Router, dove è installato il daemon "syslog-ng", e la porta UDP usata nel file di configurazione del daemon "syslog-ng" nella sezione "source".


Come gestire il file LOG creato dal daemon "syslog-ng"

Bisogna tenere presente che il file LOG creato dal daemon "syslog-ng" può raggiungere dimensioni ragguardevoli. Per una corretta gestione del file LOG, si rimanda alla pagina "Come gestire i file LOG su un router" su questo sito, tenendo presente che il percorso del file LOG è quello impostato sul file di configurazione del daemon "syslog-ng" nella sezione "destination".