Я надеялся, что у кого-то была идея о том, как получить ее так, чтобы каждый раз, когда кто-то устанавливает соединение VPN в мою сеть, я получил электронное письмо об этом.
Я мог сделать это при наличии выполнения сценария и проверке openvpn журналы? Я использовал pivpn сценарий для установки openvpn сервера. Таким образом, это могло быть сделано путем проверки pivpn-c опция?
Я предполагаю, что мог сделать это с, если, чем оператор на openvpn регистрируется, но как я заставлю это только показывать новые соединения?
Можно выследить-f файл журнала, таким образом, Вы только видите новые дополнения к сценарию что электронные письма когда новые соответствия Ваши критерии
Возможный код для использования.
хвост-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
)
Команда 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 та область...
Вы также можете использовать этот скрипт, написанный на python3: https://github.com/fernandocastrovilar/openvpn_connection_notifier
Он использует собственный статус OpenVPN для получения пользователей, подключавшихся за последние 5 минут, и уведомляет их по электронной почте.