В конфиг сервера нужно добавить:
script-security 2 # to run scripts
client-disconnect "scripts/on-client-disconnect.sh"
Заготовка скрипта.
/etc/openvpn/script/on-client-disconnect.sh
#!/bin/bash
## Parse variables
if [ ! -z "${time_ascii}" ]; then
sessionStart=${time_ascii}
else
sessionStart="UNSET"
fi
if [ ! -z "${trusted_ip}" ]; then
clientHostAddress=${trusted_ip}
else
clientHostAddress="UNSET"
fi
if [ ! -z "${username}" ]; then
clientUID=${username}
else
clientUID="UNSET"
fi
if [ ! -z "${time_duration}" ]; then
sessionDuration=${time_duration}
else
sessionDuration="UNSET"
fi
if [ ! -z "${bytes_sent}" ]; then
txVolume=${bytes_sent}
else
txVolume="UNSET"
fi
if [ ! -z "${bytes_received}" ]; then
rxVolume=${bytes_received}
else
rxVolume="UNSET"
fi
if [ ! -z "${common_name}" ]; then
client_cn=${common_name}
else
client_cn="UNSET"
fi
## Send to syslog
logger -t openvpn -- "Disconnect: CommonName: ${client_cn} Username: ${clientUID} HostIP: ${clientHostAddress} Duration: ${sessionDuration} seconds opened at ${sessionStart} Session Traffic: TX: ${txVolume} bytes RX: ${rxVolume} bytes"
В логе будут такие вот записи, которые Вы можете затем парсить.
Sep 17 17:02:35 gw1-vpn openvpn: Disconnect: CommonName: vpn-client14 Username: UNSET HostIP: 444.555.666.777 Duration: 755 seconds opened at Sat Sep 17 16:50:00 2016 Session Traffic: TX: 20676207 bytes RX: 3596392 bytes
В скрипте Вы всегда можете запустить export и слить его в файл. Увидите там переменные которые установил OpenVPN.
И не забудьте поставить для скрипта атрибут на запуск и добавить в selinux правило открывающее доступ openvpn демону к этому файлу.