pfSense + нотификация о каждом логине в OpenVPN

Небольшая заметка, о том, как настроить почтовые оповещения при каждом коннекте и дисконнекте в OpenVPN на pfSense.

Первым делом, надо настроить системные почтовые нотификации:

  1. System -> Advanced -> Notifications
  2. на примере gmail:
    
    From e-mail address: user@gmail.com
    Notification E-Mail address: mailbox@any.where 
    Notification E-Mail auth username (optional): Notification E-Mail auth password: **** 
    Notification E-Mail auth mechanism: plain

    После чего для отправки писем можно пользоваться скриптом mail.php.
    Полный его путь:/usr/local/bin/mail.php.

  3. далее меняем вторую часть файла /usr/local/sbin/openvpn.attributes.sh:
time=$(echo $(date +"%c"))

echo "Time of event: $time" > /tmp/mail.txt
echo "Real Address: $untrusted_ip" >> /tmp/mail.txt
echo "Virtual Address: $ifconfig_pool_remote_ip" >> /tmp/mail.txt 
echo "Common Name: $common_name" >> /tmp/mail.txt

if [ "$script_type" = "client-connect" ]; then
        if [ -f /tmp/$common_name ]; then 
             /bin/cat /tmp/$common_name > $1 
             /bin/rm /tmp/$common_name 
        fi        
        subject="OpenVPN user connected $common_name"
elif [ "$script_type" = "client-disconnect" ]; then
        command="/sbin/pfctl -a 'openvpn/$common_name' -F rules" 
        eval $command 
        /sbin/pfctl -k $ifconfig_pool_remote_ip 
        /sbin/pfctl -K $ifconfig_pool_remote_ip        
        subject="OpenVPN user disconnected $common_name"
fi
cat /tmp/mail.txt | /usr/local/bin/mail.php -s"$subject"
exit 0

И все. Теперь при каждом коннекте/дисконнекте вы будете получать письмо вида:

OpenVPN user connected username

Time of event: Mon Sep 25 22:06:35 2017
Real Address: 109.1.1.53
Virtual Address: 10.122.122.2
Common Name: username

Конечно, вы можете использовать любые другие переменные окружения при подключении!
Их список вы можете найти на сайте OpenVPN в разделе Environmental Variables.

ps! каждое обновление сбрасывает системный файл! следовательно, после каждого обновления надо будет вводить изменения заново.