Предупреждение по электронной почте на соединении VPN

Я надеялся, что у кого-то была идея о том, как получить ее так, чтобы каждый раз, когда кто-то устанавливает соединение VPN в мою сеть, я получил электронное письмо об этом.

Я мог сделать это при наличии выполнения сценария и проверке openvpn журналы? Я использовал pivpn сценарий для установки openvpn сервера. Таким образом, это могло быть сделано путем проверки pivpn-c опция?

Я предполагаю, что мог сделать это с, если, чем оператор на openvpn регистрируется, но как я заставлю это только показывать новые соединения?

0
задан 30 June 2017 в 18:46

3 ответа

Можно выследить-f файл журнала, таким образом, Вы только видите новые дополнения к сценарию что электронные письма когда новые соответствия Ваши критерии

Возможный код для использования.

  • Этот код использует дурака для отправки электронного письма.
  • устанавливает Ваш файл журнала для наблюдения в переменной: файл журнала
  • установил Ваш адрес электронной почты в переменной: emailaddress
  • Там является твердым, кодированным навсегда цикл с условием продолжения.
  • хвост-f следует, поскольку строки добавляются к файлу, и-c 0 говорит хвосту только искать последние 0 байтов, когда он перезапускает так, чтобы он не перечитал последние 10 строк и отправил Вам дополнительные старые предупреждения.

    #!/bin/sh
    words_to_match="Connection established"
    logfile=~/test.log
    emailaddress="youremailaddress@company.com"
    
    tail -f -c 0  ${logfile} | (while true ; do
        read -r line_to_check
        echo ${line_to_check} | grep -q ${words_to_match}
        if [ "$?" = "0" ] ; then
          echo "${line_to_check}" | mutt -s "VPN Login" ${emailaddress}
        fi
      done
    )
    
0
ответ дан 3 November 2019 в 00:31

Команда OpenVPN имеет --client-connect и --client-disconnect опции, которые позволяют Вам запускать скрипты для тех (и другой) события.

Можно затем создать сценарий, который посылает Вам по электронной почте с информацией о соединении.

OpenVPN обеспечит много переменных среды, выполняя эти сценарии, позволяя Вам присоединить информацию о соединении к тем электронным письмам.

В моей конфигурации у меня есть следующие строки в/etc/openvpn/server.conf:

script-security 2
client-connect /etc/openvpn/server/connect-disconnect.sh
client-disconnect /etc/openvpn/server/connect-disconnect.sh

Мой /etc/openvpn/server/connect-disconnect.sh принадлежит nobody (поскольку это - пользователь, что моя система выполняет OpenVPN как), и содержит следующее (предупреждение! долгое и ужасное поступление сценария оболочки!):

#!/bin/bash

# Connect/disconnect script for OpenVPN clients
# For all available variables, see the "Environmental Variables" section
# at https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/

from_address="openvpn@$HOSTNAME"
from_name="openvpn@$HOSTNAME"
to_address="my-email-address"

function unitify_bytes {
        bytes=$1
        if [ "$bytes" -gt "1073741824" ]; then
                echo $(( $bytes / 1073741824 )) GiB
        elif [ "$bytes" -gt "1048576" ]; then
                echo $(( $bytes / 1048576 )) MiB
        elif [ "$bytes" -gt "1024" ]; then
                echo $(( $bytes / 1024 )) KiB
        else
                echo $bytes B
        fi
}

function unitify_seconds {
        local SS=$1

        if [ "$SS" -ge "60" ]; then
                local MM=$(($SS / 60))
                local SS=$(($SS - 60 * $MM))

                if [ "$MM" -ge "60" ]; then
                        local HH=$(($MM / 60))
                        local MM=$(($MM - 60 * $HH))

                        if [ "$HH" -ge "24" ]; then
                                local DD=$(($HH / 24))
                                local HH=$(($HH - 24 * $DD))
                                local time_string="$DD days, $HH hours, $MM minutes and $SS seconds"
                        else
                                local time_string="$HH hours, $MM minutes and $SS seconds"
                        fi
                else
                        local time_string="$MM minutes and $SS seconds"
                fi

        else
                local time_string="$SS seconds"
        fi

        echo "$time_string"
}


if [ "$script_type" == "client-connect" ]; then
        action="connected to"
else
        action="disconnected from"
        action_specific_info=" \
<dt>Session Duration</dt> <dd>$(unitify_seconds $time_duration)</dd> \
<dt>Received</dt> <dd>$(unitify_bytes $bytes_received)</dd> \
<dt>Sent</dt> <dd>$(unitify_bytes $bytes_sent)</dd> \
"

fi

now=$(echo $(date +"%c"))

cat <<EOF | /usr/sbin/sendmail -f "$from_address" $to_address
Subject: OpenVPN: $common_name $action $HOSTNAME
Content-Type: text/html
From: $from_name<$from_address>
Date: `date -R`

<html>
<head>
<style>
dt {
        float: left;
        width: 30%;
        text-align: right;
        padding: .25em;
        clear: left;
        font-weight: bold;
}
dd {
        float: left;
        width: 60%;
        padding: .25em 0;
}
dl:after {
        content: "";
        display: table;
        clear: both;
}
</style>
</head>
<body>
<h1>Client <i>$common_name</i> has $action OpenVPN</h1>

<h2>Connection Details</h2>

<dl>
<dt>Client Common Name</dt> <dd>$common_name</dd>
<dt>Connection Start</dt> <dd>$time_ascii</dd>
<dt>Client WAN IP</dt> <dd>$untrusted_ip</dd>
<dt>Client LAN IP</dt> <dd>$ifconfig_pool_remote_ip</dd>
${action_specific_info}
</dl>

<hr/>
<p>OpenVPN at $HOSTNAME.</p>
</body>
</html>
EOF

Обратите внимание, что необходимо обновить переменные наверху для соответствия среде. Я имею sendmail настроенный для пересылки всей почты в мою почтовую учетную запись, таким образом, Вам, возможно, понадобилось бы больше изменений конфигурации/сценария n та область...

0
ответ дан 3 November 2019 в 00:31

Вы также можете использовать этот скрипт, написанный на python3: https://github.com/fernandocastrovilar/openvpn_connection_notifier

Он использует собственный статус OpenVPN для получения пользователей, подключавшихся за последние 5 минут, и уведомляет их по электронной почте.

0
ответ дан 21 February 2020 в 09:48

Другие вопросы по тегам:

Похожие вопросы: