MPD alerts
В продолжение записи об MPD.
Возникла идея отслеживать айпишники пользователей, т.е. откуда они ходят в ВПН – модернизировал предыдущий скрипт для MPD (см. предыдущие посты).
#!/bin/sh
# Предварительно была создана БД mpd и таблица mpd_access на хосте 192.168.0.10
IFS=’:’#Получаем текущую дату в формате пригодном для MySQL
time=”`date -j +”%Y-%m-%d %H:%M:%S”`”
# Читаем сообщение от MPD и присваиваем переменные
while read _key _value; doif [ -z “${_key}” ]; then
break
fiif [ -n “${_value}” ]; then
if [ “${_key}” = “USER_NAME” ] || [ “${_key}” = “PEER_ADDR” ] || [ “${_key}” = “SELF_ADDR” ] || [ “${_key}” = “PEER_MAC_ADDR” ] || [ “${_key}” = “ACCT_STATUS_TYPE” ]; then
LOGLINE=”$LOGLINE ${_key}=${_value}”
fi
case “${_key}” in
“ACCT_STATUS_TYPE”) type=”${_value}” ;;
“USER_NAME”) user=”${_value}” ;;
“SELF_ADDR”) local=”${_value}” ;;
“PEER_ADDR”) remote=”${_value}” ;;
esac
fi
done
# Делаем запрос к MySQL. Сортируем по убыванию и берем только последнюю запись, относящуюся к этому юзеру.# Параметры -N -r -B обеспечивают вывод только значения, т.е. без заголовка столбца
query=”`/usr/local/bin/mysql -N -r -B -h 192.168.0.10 -uuser -ppassword -D mpd –execute=”SELECT remote from mpd_access WHERE user=’$user’ ORDER BY number DESC LIMIT 1″`”# Шлем себе письмецо
if [ $query != $remote ]; then
mail -s “VPN – Last seen remote IP changed from $query to $remote” admin@local.com < /usr/local/etc/mail.txt;
fi
# Записываем в сислог и в базу
echo $LOGLINE | logger -p local7.info -t mpd-acct
/usr/local/bin/mysql -h 192.168.0.10 -uuser -ppassword -D mpd –execute=”INSERT INTO `mpd_access` (`type`, `user`, `local`, `remote`, `time`) values (‘${type}’, ‘${user}’, ‘${local}’, ‘${remote}’, ‘${time}’)”
В результате, если текущий адрес не совпадает с прошлым – будет отправлено уведомление.
MPD5 + IP logging IPFW + SQUID + Redirect