#!/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}