Блокировка учётной записи и бан адреса: где OpenVPN на самом деле считает
Бан источника и блокировка учётной записи считают разные вещи. Найдите хранилище, которое владеет счётчиком сбоев, прежде чем выбирать порог для VPN на основе PAM.
Блокировка адреса и блокировка учётной записи — это два разных механизма счётчиков, и они отказывают в противоположных направлениях. Бан адреса останавливает один источник и оставляет целевую учётную запись доступной откуда угодно ещё. Блокировка учётной записи останавливает эту идентичность везде, включая собственный ноутбук законного пользователя. Команды часто внедряют одно, описывая при этом другое, а разницу обнаруживают во время инцидента, когда защищено не то.
Для VPN, который делегирует аутентификацию PAM, счётчиком является то, до чего доходит стек PAM, а не то, что записал в журнал слушатель. Разделение этих двух вещей — первый полезный шаг.
Два счётчика, две разные жертвы
Ограничитель скорости следит за источником и спрашивает, сколько попыток пришло из него за последнее время. Блокировка следит за идентичностью и спрашивает, сколько сбоев накопила эта учётная запись. Первый защищает доступность службы; вторая защищает учётные данные. Ни один не заменяет другой, и развёртывание, в котором есть только первый, вообще не защитило учётную запись.
Вот почему «мы блокируем IP после пяти сбоев» не является ответом на отчёт о подстановке учётных данных. Злоумышленник меняет источники, каждый получает небольшое число попыток, и учётная запись никогда не попадает в счёт. И наоборот, политика блокировки без какого-либо контроля источников позволяет злоумышленнику держать учётную запись заблокированной бесконечно, намеренно проваливая вход, а это отказ в обслуживании, который ничего им не стоит.
У этих двух элементов управления также разные истории восстановления. Бан адреса истекает по таймеру, о котором никому не нужно думать. Блокировка учётной записи может потребовать администратора, задокументированного периода ожидания или самостоятельного сброса, и каждое из этого — решение политики, которое должно существовать до того, как произойдёт первая блокировка.
Найдите хранилище, которое уже владеет счётчиком
Прежде чем что-либо добавлять, выясните, существует ли уже хранилище сбоев. Локальная учётная запись Linux, служба каталогов и внешний поставщик идентичности ведут каждый свой счёт, а модуль PAM, добавленный перед ними, создаёт второй, а не расширяет первый.
grep -rnE 'faillock|pam_tally|pam_unix' /etc/pam.d/
ls -l /etc/pam.d/ | head -20
Прочитайте служебный файл, который VPN действительно называет, затем пройдите по его строкам include. Во многих дистрибутивах служба VPN включает общий файл common, а значит, счёт, который вы собираетесь настраивать, применяется также к SSH и локальным входам. Это может быть приемлемо, а может быть противоположностью того, чего хотели добиться изменением.
Если каталог уже применяет блокировку, полезный вопрос — как диалог PAM доходит до этого решения и как VPN сообщает о нём. Добавленный сверху локальный счёт не становится счётчиком каталога, и две политики могут расходиться в том, когда учётная запись разблокируется.
У pam_faillock три позиции вызова, а не одна
Модуль разделяет три операции, которые одна скопированная строка обычно смешивает: проверку, не заблокирована ли учётная запись уже, запись сбоя аутентификации и очистку истории сбоев после успеха. Его руководство описывает их как разные позиции вызова, и стек решает, какие из них выполняются и в каком порядке.
Именно здесь миграция со старого модуля подсчёта обычно ошибается. Копирование строки из рабочего примера с pam_tally2 в стек pam_faillock — это не переименование; задокументированная настройка отличается, и вызов не на своём месте может дать стек, который записывает сбои, ни разу их не проверяя, или проверяет их в точке, до которой путь аутентификации никогда не доходит.
faillock --user alice
faillock --user alice --reset
Утилита проверки — самый быстрый способ увидеть, реален ли счётчик: она показывает записанные сбои для учётной записи и умеет их очищать. Если контролируемый сбой не меняет этот вывод, позиция вызова выбрана неверно, как бы ни читалась конфигурация.
Собственное имя службы — это не изоляция
Если дать VPN собственный служебный файл PAM, предполагаемая политика становится видимой, но сам по себе файл не ограничивает эффект. Любой include общего файла подтягивает всё, что делает этот файл, включая подсчёты, действующие в масштабе системы.
Решите явно, должна ли блокировка охватывать только доступ по VPN или каждую службу, которая аутентифицирует ту же учётную запись. Оба ответа защитимы; режим отказа — думать, что вы выбрали один, тогда как стек реализует другой. Запишите ответ рядом со служебным файлом, чтобы следующее изменение не отменило его молча.
Затем учтите цену. Блокировку может вызвать злоумышленник, и страдает пользователь, которому эта учётная запись принадлежит. Порог, период ожидания и административный путь восстановления — всё это часть политики, и путь восстановления не должен зависеть от перенастройки VPN во время инцидента.
Принимайте последовательность, а не отдельный отказ
Тестируйте на назначенных идентичностях по утверждённому плану и проверяйте цепочку, а не одно событие. Действительная учётная запись должна аутентифицироваться; намеренно неверный пароль должен сдвинуть счётчик; настроенная блокировка затем должна вступить в силу; а задокументированное восстановление должно вернуть доступ.
faillock --user test-vpn-01
journalctl -u openvpn-server@lab -n 30 --no-pager | grep -i 'auth\|pam'
Проверяйте поведение при успехе так же тщательно, как при сбое. Если успешный вход не очищает историю, учётная запись заблокируется после медленного накопления обычных ошибок. Если он очищает всё от каждой службы, счётчик слабее, чем заявляет политика.
Наконец, остановите необслуживаемые клиенты, прежде чем объявлять победу. Сохранённые учётные данные, которые повторяют попытки в фоне, воссоздадут сбои через несколько минут после восстановления и снова заблокируют учётную запись, что выглядит как сломанный путь восстановления, а не как неверно настроенный клиент. Ограничение скорости по источнику может оставаться дополнительным элементом управления, но оно не является политикой учётной записи и не должно описываться как она.