1 (edytowany przez morfik 2014-10-08 20:33:25)

Temat: Syslog z wykorzystaniem zaszyfrowanego tunelu TLS

Ostatnio przeczytałem coś o przesyłaniu logów z routera do pc via syslog, a że mam u siebie terminal osadzony na pulpicie co mi wyświetla logi systemowe, to pomyślałem, nie będąc przy tym pewien czy to możliwe, by może również logi z routera tam umieścić. Jak nie patrzeć skoro mam logi na pulpicie, to miałbym podgląd zdarzeń, zarówno systemowych jak i tego co się dzieje na routerze.

Na wiki openwrt piszą, że poniższe wpisy trzeba dodać do pliku /etc/config/system :

config system
      ...
        option log_type 'file'
        option log_file '/var/log/messages'
        option log_size '64'
        option log_ip   '192.168.1.150'
        option log_port '514'
#       option log_prefix 'router '
...

U siebie na debianie, w konfiguracji sysloga ustawiłem póki co:

...
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
...

Po resecie rsysloga i routera, logi z obu systemów lecą na terminal zgodnie z oczekiwaniem:

http://i.imgur.com/De159fX.png

Problem w tym, że przesył tych logów przez sieć nie jest w żaden sposób zabezpieczony:

http://i.imgur.com/xCxBjpu.png

Z tego co znalazłem na sieci, możliwe jest utworzenie kanału TLS i zaszyfrowanie logów, pytanie zatem, czy ten wbudowany syslog w openwrt to zadanie potrafi zrealizować?

Tam na wiki jest podane, że można sprecyzować tylko port, który w tym przypadku jest domyślny -- 514. Wszelkie zapytania lecą po udp i nie mam pojęcia zbytnio jak przy pomocy tego configu zmienić protokół na tcp -- to w ogóle wykonalne jest?

2

Odp: Syslog z wykorzystaniem zaszyfrowanego tunelu TLS

Nie, nie można. Implementacja w openwrt jest prosta, ale możesz zainstalować sobie normalny syslog(-ng) i bawić się jak chcesz.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Syslog z wykorzystaniem zaszyfrowanego tunelu TLS

A te wersje co są w repo, konkretnie syslog-ng3 i syslog-ng , to one się czymś szczególnym różnią między sobą?

4

Odp: Syslog z wykorzystaniem zaszyfrowanego tunelu TLS

Powiedzmy że jedno jest forkiem drugiego.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Syslog z wykorzystaniem zaszyfrowanego tunelu TLS

Coś mi nie idzie z tym szyfrowaniem za bardzo. big_smile

Na debianie zrobiłem wszystko jak trzeba, doinstalowałem pakiet rsyslog-gnutls i dodałem poniższe linijki do tych co były w pliku /etc/rsyslog.conf :

#################
#### MODULES ####
#################

# make gtls driver the default
$DefaultNetstreamDriver gtls

# certificate files
$DefaultNetstreamDriverCAFile /etc/CA/keys/ca.crt
$DefaultNetstreamDriverCertFile /etc/CA/keys/192.168.1.150.crt
$DefaultNetstreamDriverKeyFile /etc/CA/keys/192.168.1.150.key

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerStreamDriverMode 0             # run driver in TLS-only mode
$InputTCPServerStreamDriverAuthMode anon    # client is NOT authenticated
$InputTCPServerRun 514                        # start up listener at port 514

Na routerze pierw zainstalowałem rsyslog-ng3 i jego konfiguracja w pliku /etc/syslog-ng.conf wygląda jak poniżej:

@version:3.0

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

    time_reopen (300);
    long_hostnames(on);
#    use_dns (no);
#    create_dirs (no);
#    perm(0640);
#    group("log");
#    ts_format(iso);      #make ISO-8601 timestamps
};


source s_src {
    internal();
    unix-stream("/dev/log");
};

source s_localhost {
    tcp(ip(127.0.0.1) port(514));
    udp(ip(127.0.0.1) port(514));
};

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

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


destination d_network {
#    tcp( "192.168.1.150" port(514) );
    tcp( "192.168.1.150" port(514)
    tls( ca_dir("/etc/syslog-ng.cert")) );
};


log {
    source(s_src);
    source(s_localhost);
    source(s_kernel);
    destination(d_messages);
    destination(d_network);
};

W sumie nie wszystkie opcje jeszcze obadałem ale jeśli  w "destination d_network" zahaszuję te dwie linijki i odhaszuję tę co jest zakomentowana,  wtedy przesyłanie logów działa. Natomiast jeśli odpalę sysloga na takich ustawieniach jak powyżej, to co prawda komunikacja działa, logi są przesyłane ale wygląda to tak:

Oct  9 10:03:18 red_viper.mhouse.lh #026#003#001#001!#001#000#001#035#003#003»Ikløe`(õ#004©EMW$§¨013þL#023Ļ#000#000À0À,À(À$À#024À 
Oct  9 10:03:18 red_viper.mhouse.lh #000£#000#000k#000j#0009#0008À2À.À*À&À#017À#005#000#000=#0005À/À+À'À#À#023À#011#000¢#000#000g#000@#0003#0002#000#000À1À-À)À%À#016À#004#000#000<#000/#000À#021À#007À#014À#002#000#005#000#004À#022À#010#000#026#000#023À#015À#003 
Oct  9 10:03:18 red_viper.mhouse.lh #000#025#000#022#000#011#000#024#000#021#000#010#000#006#000#003#000ÿ#002#001#000#000m#000#013#000#004#003#000#001#002 
Oct  9 10:03:18 red_viper.mhouse.lh #0004#0002#000#016#000#015#000#031#000#013#000#014#000#030#000#011 

Certyfikaty były generowane przy pomocy easy-rsa na debianie -- wszystkie są bez haseł. Z tego co wyczytałem to jeśli chodzi o konfigurację syslog-ng to trzeba przesłać na klienta (w tym wypadku router) certyfikat CA i podlinkować go do nazwy jego hasha. Tak zrobiłem:

# ls -al /etc/syslog-ng.cert/
drwxr-xr-x    2 root     root          4096 Oct  9 03:53 .
drwxr-xr-x    1 root     root          4096 Oct  9 03:53 ..
-rw-r--r--    1 root     root          2447 Oct  9 03:52 ca.crt
lrwxrwxrwx    1 root     root             8 Oct  9 03:53 ef2fca17.0 -> ./ca.crt

Sam hash został wygenerowany zgodnie z instrukcjami na http://www.balabit.com/sites/default/fi … lient.html

I w sumie nie wiem czy to szyfrowania działa czy nie, czy tylko debianowy rsyslog nie potrafi tego odszyfrować. big_smile

Próbowałem też wywalić syslog-ng3 i zainstalować na jego miejsce syslog-ng ale ten chyba nie obsługuje szyfrowania, bo nie chciał przyjąć w configu wpisu od:

tls( ca_dir("/etc/syslog-ng.cert")) );

Jakiś pomysł?

6

Odp: Syslog z wykorzystaniem zaszyfrowanego tunelu TLS

Okazało się, że te certy generowane przez easy-rsa się nie nadają do zaszyfrowania logów przy pomocy rsyslog/syslog-ng . Certy trzeba generować przy pomocy certtool dostępnego w paczce gnutls-utils i nie ma znaczenia czy logi lecą z rsysloga na syslog-ng -- szyfrują się bez problemu

7

Odp: Syslog z wykorzystaniem zaszyfrowanego tunelu TLS

Z tego co widzę, to ten syslog-ng3 gubi pewne logi, min. te od logowania. Wcześniej przeglądałem wątki na forum i obiło  mi się już to o oczy, jednak tam nie było rozwiązania. Ten domyślny syslog przesyła wszystkie komunikaty jak należy. Ktoś się orientuje jakie regułki dopisać do configu syslog-ng3 ?

8 (edytowany przez morfik 2014-10-14 01:30:17)

Odp: Syslog z wykorzystaniem zaszyfrowanego tunelu TLS

Ha, udało się. big_smile Wystarczyło

# /etc/init.d/log disable 

I teraz cały log wędruje do sysloga, a ten przesyła go do lokalnego pliku oraz wrzuca dodatkowo go w kanał TLS i śle mi na kompa.