Пандемия 2020 дала свои плоды: удаленная работа, массовое использование VPN. Конечно, любое руководство захочет контролировать удаленное подключение/отключение сотрудников. У себя в компании мы интегрировали VPN в пропускную систему создав виртуальный контроллер. Теперь отдел кадров видит кто посещал рабочее место зайдя в офис или подключался удаленно. Полностью расписывать весь механизм я не стану, лишь опубликую как можно организовать получение событий со шлюза на pfsense.
Для начала создаём сервер на ubuntu, например, виртуальный. Требования минимальны: 1 CPU, 256Мб памяти, 10Гб диск. Я щедро выделил 1Гб памяти и 100 Гб диска, вот что реально потребляет система:
Качаем минимальный дистрибутив в 74Мб http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/mini.iso
устанавливаем syslog-ng
sudo apt update
sudo apt install syslog-ng
создаем конфиг /etc/syslog-ng/conf.d/external_log.conf
source s_udp {
udp(port(514));
};
destination d_PFSENSE_VPN {
program("/usr/bin/php /home/user/pfsense_vpn.php" );
};
filter f_PFSENSE_VPN {
host("192.168.#.#");
match(",l2tp," value ("MESSAGE"));
};
log {
source(s_udp);
filter(f_PFSENSE_VPN);
destination(d_PFSENSE_VPN);
};
destination d_PFSENSE_OPENVPN {
program("/usr/bin/php /home/user/pfsense_vpn.php" );
};
filter f_PFSENSE_OPENVPN {
host("192.168.#.#");
program("openvpn");
};
log {
source(s_udp);
filter(f_PFSENSE_OPENVPN);
destination(d_PFSENSE_OPENVPN);
};
где 192.168.#.# — ip-адрес pfsense
перенаправим логи с pfsense на наш маленький сервер, здесь мы их будем парсить и обрабатывать как нам нужно
в моём примере, мы создаем два фильтра f_PFSENSE_VPN и f_PFSENSE_OPENVPN для того чтобы скриптом обрабатывать только события связанные с подключением и отключением по протоколам l2tp и OpenVPN (актуально для формата логов pfsense версии 2.5.1
есть два destination, но по сути они ссылаются на один и тот же скрипт d_PFSENSE_VPN и d_PFSENSE_OPENVPN
со стороны pfsense настраиваем пересылку логов на наш сервер
Status -> System Logs -> Settings
указываем ip-адрес и порт нашего сервера и ставим галочку «VPN Events (IPsec, OpenVPN, L2TP, PPPoE Server)», т. к. нам нужны только события удаленных подключений
с парсером, я думаю, вы справитесь, приведу пример логов для OpenVPN:
подключение
Jun 25 18:29:57 192.168.#.# openvpn: user ’user_name’ authenticated
отключение
Jun 25 18:57:34 192.168.#.# openvpn[16766]: user_name/132.252.198.166:6182 Connection reset, restarting [-1]
С l2tp еще проще:
подключение
Jun 25 18:29:57 192.168.#.# root: login,l2tp,192.168.111.#,user_name
отключение
Jun 25 18:57:34 192.168.#.# root: logout,l2tp,192.168.111.#,user_name