:::: MENU ::::

dziennik OpenVPN na centralny serwer logów

środowisko: OpenVZ/ESXi Debian OpenVPN

Używając OpenVPN`a może zachodzić potrzeba odkładania informacji o zdarzeniach aplikacji oraz o ruchu na interfejsie tun/tap na centralnym serwerze logów. Poniżej jedna z możliwości realizacji takiego scenariusza dla konfiguracji bramki openvpn`owej z interfejsem tun (tun0), wan (eth0), lan (eth1) o adresie 172.17.0.1, rsyslog`iem oraz syslog-ng na hoście odległym w sieci lokalnej o adresie 10.0.0.10 (kwestię topologii oraz ustawień routingu pomijamy).

Informacje o zdarzeniach składowane w pliku generowanym przez aplikację OpenVPN (w tym przypadku w pliku /var/log/openvpn.log) mogą być wysłane z wykorzystaniem modułu imfile. W tym celu należy dokonać modyfikacji pliku /etc/rsyslog.conf (nie wcześniej niż po definicji miejsca przechowywania stat-files`ów)

$ModLoad imfile
 
$InputFileName /var/log/openvpn.log
$InputFileTag ovpn:
$InputFileStateFile ovpn-statfile1
$InputFileSeverity info
$InputFileFacility local7
$InputFilePollInterval 10
$InputRunFileMonitor

Następnie ustawić wysyłanie z wykorzystaniem tcp

local7.* @@10.0.0.10:1000
&stop

Bądź udp na domyślny numer portu (514)

local7.* @10.0.0.10
&stop

Logowanie połączeń o stanie NEW,RELATED oraz całego ruchu icmp przechodzącego przez interfejs tun

iptables -I FORWARD -i tun0 -m state --state NEW,RELATED -j LOG --log-prefix "NF-TUN " --log-level 5
iptables -I FORWARD -i tun0 -p icmp -j LOG --log-prefix "NF-TUN " --log-level 5
iptables -I FORWARD -o tun0 -m state --state NEW,RELATED -j LOG --log-prefix "NF-TUN " --log-level 5
iptables -I FORWARD -o tun0 -p icmp -j LOG --log-prefix "NF-TUN " --log-level 5

Dodatkowo mogą być logowane połączenia przychodzące na interfejs wan`owy

iptables -I INPUT -i eth0 -m state --state NEW,RELATED -j LOG --log-prefix "NF-WAN " --log-level 5
iptables -I INPUT -i eth0 -p icmp -j LOG --log-prefix "NF-WAN " --log-level 5

W katalogu /etc/rsyslog.d należy utworzyć plik np. netfilter o poniższej zawartości, która umożliwi wysyłanie logów na port 1000 serwer centralnego z wykorzystaniem protokołu tcp a następnie zaprzestanie ich dalszego przetwarzania

:msg,contains,"NF-TUN " @@10.0.0.10:1000
& stop
 
:msg,contains,"NF-WAN " @@10.0.0.10:1000
& stop

W przypadku połączenia z wykorzystaniem udp

:msg,contains,"NF-TUN " @10.0.0.10
& stop
 
:msg,contains,"NF-WAN " @10.0.0.10
& stop

Wykonać restart rsyslog`a

service rsyslog restart

Po stronie centralnego serwera logów należy uzupełnić konfigurację syslog-ng. W tym celu utworzony zostaje plik /etc/syslog-ng/conf.d/ovpn.conf wiążący źródło z celem poprzez filtry

destination d_ovpn { file("/log_files_location/openvpn/openvpnlog"); };
destination d_nftun { file("/log_files_location/openvpn/iptablestun"); };
destination d_nfwan { file("/log_files_location/openvpn/iptableswan"); };
 
filter f_openvpn { netmask("172.17.0.1/32"); };
filter f_local7 { facility(local7); };
filter f_nftun { match("NF-TUN"); };
filter f_nfwan { match("NF-WAN"); };
 
log { source(s_net); filter(f_openvpn); filter(f_local7); destination(d_ovpn); };
log { source(s_net); filter(f_openvpn); filter(f_nftun); destination(d_nftun); };
log { source(s_net); filter(f_openvpn); filter(f_nfwan); destination(d_nfwan); };
 

Źródło s_net będąc źródłem logów także z innych hostów ustawione winno być w pliku /etc/syslog-ng/syslog-ng.conf

source s_net { tcp(ip(10.0.0.10) port(1000)); udp(); };

Pozostaje dokonać restartu demona syslog-ng

service syslog-ng restart

gotowe.