ocserv_script/ocserv_logout.sh

66 lines
2.5 KiB
Bash
Raw Normal View History

2021-01-15 18:41:02 +03:00
#!/usr/bin/bash
# Ocserv logout script for sending statistics into log
#
#################################################################################
# Автор: Сергей Калинин
# https://nuk-svk.ru
# svk@nuk-svk.ru
#################################################################################
# REASON, VHOST, USERNAME, GROUPNAME, DEVICE, IP_REAL (the real IP of the client),
# IP_REAL_LOCAL (the local interface IP the client connected), IP_LOCAL
# (the local IP in the P-t-P connection), IP_REMOTE (the VPN IP of the client),
# IPV6_LOCAL (the IPv6 local address if there are both IPv4 and IPv6
# assigned), IPV6_REMOTE (the IPv6 remote address), IPV6_PREFIX, and
# ID (a unique numeric ID); REASON may be "connect" or "disconnect".
# In addition the following variables OCSERV_ROUTES (the applied routes for this
# client), OCSERV_NO_ROUTES, OCSERV_DNS
# STATS_BYTES_IN,
# STATS_BYTES_OUT, STATS_DURATION
LOG_DIR="/var/log/ocserv"
LOG_FILE=${LOG_DIR}/sessions.log
# Format out string text, json
LOG_FORMAT="json"
if [ ! -d "$LOG_DIR" ]; then
mkdir -p ${LOG_DIR}
fi
DATE=`date +'%d.%m.%Y %T'`
# Преобразуем имена пользователей к нижнему регистру
USER_NAME=`echo ${USERNAME} | tr '[:upper:]' '[:lower:]'`
# Проверяем имя пользователя на имя домена,
# сперва в формате "user@domain" потом "domain\user" \\domain\user
# и выдергиваем только имя пользователя
TEMP_USER_NAME=`echo ${USER_NAME} | egrep -E "[[:alnum:]]+@" -o | tr -d "@"`
if [ -n "${TEMP_USER_NAME}" ]; then
SHORT_USER_NAME="${TEMP_USER_NAME}"
else
TEMP_USER_NAME=`echo $USER_NAME | awk -F '\\' '{print $2}'`
if [ -n "${TEMP_USER_NAME}" ]; then
SHORT_USER_NAME="${TEMP_USER_NAME}"
else
TEMP_USER_NAME=`echo $USER_NAME | awk -F '\\' '{print $4}'`
if [ -n "${TEMP_USER_NAME}" ]; then
SHORT_USER_NAME="${TEMP_USER_NAME}"
else
SHORT_USER_NAME="${USER_NAME}"
fi
fi
fi
if [ ${LOG_FORMAT} == 'text' ]; then
OUT_STRING="${DATE} ${USERNAME} ${REASON} ${ID} ${STATS_BYTES_IN} ${STATS_BYTES_OUT} ${STATS_DURATION}"
fi
if [ ${LOG_FORMAT} == 'json' ]; then
OUT_STRING="{\"session-datetime\": \"${DATE}\", \"reason\": \"${REASON}\", \"remote-user\": \"${SHORT_USER_NAME}\", \
\"session-id\": \"${ID}\", \"duration\": ${STATS_DURATION}, \"in_bytes\": ${STATS_BYTES_IN}, \"out_bytes\": ${STATS_BYTES_OUT}}"
fi
echo "${OUT_STRING}" >> ${LOG_FILE}