Защита SSH на CentOS 7 с двухфакторной аутентификацией WiKID

Зачем добавлять 2FA для SSH
SSH сам по себе обеспечивает шифрованный канал, но стандартная аутентификация имеет ограничения, которые могут вызывать замечания при аудите:
- Нельзя централизованно контролировать, у кого включена авторизация по публичному ключу.
- Нельзя навязать сложность или срок действия пароля открытого ключа.
- Невозможно централизованно отзывать публичные ключи.
Двухфакторная аутентификация через WiKID решает эти задачи: пользователю нужен одноразовый код (OTP) и PIN, а проверка выполняется централизованно на WiKID-сервере.
Кому и когда это полезно
- Организациям с требованиями PCI, ISO и внутренними политиками доступа.
- При управлении удалёнными серверами через общедоступные сети.
- Когда нужно централизованно отзывать доступ или проводить учёт доступа.
Важно: 2FA решает аутентификацию, но не заменяет хорошую практику управления учётными записями и правами.
Что понадобится перед началом
- Рабочий сервер CentOS 7 с правами root или sudo.
- Доступ к админке WiKID Strong Authentication (сервер WiKID) для создания домена и сетевых клиентов.
- Установленный компилятор и набор для сборки пакетов (build tools) на CentOS.
- Резервный метод доступа (консоль или KVM) на случай ошибок при удалённой настройке.
Добавление домена на сервер WiKID
При создании домена в админке WiKID обратите внимание на формат «Domain Server Code» — это IP-адрес сервера, дополненный нулями слева до 12 цифр. Например, для IP 54.83.0.181 код будет 054083000181.
Подпись: Форма добавления домена на сервере WiKID — поле для кода сервера и имени домена.
Создание сетевого клиента
После сохранения домена перейдите на вкладку «Network Client» и нажмите «Create New Network Client». Укажите имя клиента и IP-адрес SSH-шлюза или целевого сервера в локальной сети. В качестве протокола выберите RADIUS и укажите созданный домен.
Подпись: Создание сетевого клиента в интерфейсе WiKID — выбор протокола RADIUS и указание IP.
На следующей странице задайте общий секрет (shared secret) для RADIUS и сохраните. Повторите процесс для каждого сервера, который будет аутентифицироваться через WiKID.
Подпись: Ввод общего секрета RADIUS для сетевого клиента в WiKID.
Настройка SSH на CentOS 7 для RADIUS-аутентификации
В этом разделе описано, как установить pam_radius и интегрировать его с SSH через PAM. Мы используем pam_radius_auth от FreeRADIUS.
Шаги:
- Скачайте архив с исходниками (версия из примера — 1.3.17):
$ wget ftp://ftp.freeradius.org/pub/radius/pam_radius-1.3.17.tar.gz
- Распакуйте архив:
$ tar -xzvf pam_radius-1.3.17.tar.gz
- Установите зависимости для сборки (pam-devel):
$ sudo yum install pam-devel
- Перейдите в распакованный каталог и выполните make:
$ make
В процессе сборки могут появиться предупреждения; главное — чтобы был создан файл pam_radius_auth.so.
- Скопируйте библиотеку в каталог безопасности в зависимости от архитектуры:
$ sudo cp pam_radius_auth.so /lib/security/
$ sudo cp pam_radius_auth.so /usr/lib64/security/
(Скопируйте в тот путь, который соответствует вашей архитектуре; при сомнении проверьте наличие каталога.)
- Настройте SSH для использования RADIUS через PAM. Откройте /etc/pam.d/sshd и добавьте строку (второй строкой в файле):
auth sufficient /lib/security/pam_radius_auth.so
Примечание: параметр sufficient позволит сначала попробовать RADIUS, но при сбое даст возможность штатной аутентификации. Для жёсткого требования RADIUS замените sufficient на required, но делайте это только после проверки доступа через консоль.
- Укажите адрес RADIUS-сервера и общий секрет. Создайте или отредактируйте файл /etc/pam_radius_auth.conf и добавьте строку в формате:
«other-server other-secret 3»
Замените other-server на IP или hostname вашего WiKID-сервера, а other-secret на общий секрет, который вы задали при создании сетевого клиента в WiKID.
- Тестирование: запустите в одном окне логирование системных сообщений:
$ sudo tail -f /var/log/secure
и в другом — попытайтесь выполнить SSH-подключение. Смотрите логи на предмет сообщений от pam_radius и WiKID.
Рекомендации по безопасному развёртыванию
- Сначала разверните 2FA на тестовом сервере и проверьте восстановление доступа.
- Оставьте временно доступ по паролю/ключу (sufficient), прежде чем переводить в required.
- Настройте мониторинг и логирование попыток аутентификации.
- Централизуйте авторизацию через LDAP/AD и используйте RADIUS только для аутентификации (код + PIN).
- Имейте аварийный доступ к консоли (KVM/IPMI) для восстановления в случае проблем.
Когда такой подход не подходит
- В средах, где нет стабильной связи с WiKID-сервером (latency/отключения), строгий required может блокировать админов.
- Для очень старых или минималистичных систем без возможности установки pam_radius.
- Если бюджет или политика запрещает использование внешнего вендора — тогда рассмотрите open-source варианты локально (например, FreeRADIUS + Google Authenticator), но они дают другую модель управления.
Альтернативы и дополнения
- Duo Security, Google Authenticator (плагин PAM), YubiKey (FIDO/U2F) — альтернативные способы 2FA.
- FreeRADIUS в связке с LDAP/AD — вариант для полного контроля собственной RADIUS-инфраструктуры.
- U2F/FIDO2 считаются более устойчивыми к перехвату кодов и фишингу, но требуют поддержки клиента.
Плейбук развёртывания (краткий чек-лист)
- Создать резервный доступ (KVM/консоль).
- Создать домен в WiKID и получить Domain Server Code.
- Для каждого сервера создать Network Client в WiKID и задать shared secret.
- Установить pam_radius на целевом сервере и скопировать pam_radius_auth.so.
- Добавить строку в /etc/pam.d/sshd и заполнить /etc/pam_radius_auth.conf.
- Тестировать входы, проверять /var/log/secure.
- Перейти с sufficient на required после тестов и утверждений.
Роли и обязанности
- Системный администратор: установка pam_radius, правка PAM, тестирование доступа.
- Администратор WiKID: создание доменов, управление токенами, сброс PIN и блокировка пользователей.
- Команда безопасности: утверждение политики 2FA, аудит логов и инцидент-ответ.
Критерии приёмки
- Пользователь не может войти по SSH без одноразового кода WiKID.
- Логи аутентификации содержат запись об успешной/неуспешной попытке через RADIUS.
- Для критических серверов реализован резервный доступ через консоль.
- Документированы шаги отката (возврат к password/ssh-key аутентификации).
Безопасность и приватность
- WiKID хранит ключи и валидирует PIN/OTP — убедитесь, что доступ к админке WiKID ограничен.
- Логи на серверах будут содержать информацию о попытках входа и логины — обрабатывайте их в соответствии с политикой конфиденциальности.
- Если вы интегрируете с AD/LDAP, убедитесь, что передача данных между компонентами происходит по защищённым каналам.
Короткий план отката при проблемах
- Подключиться к серверу через консоль/KVM.
- Удалить или закомментировать строку pam_radius в /etc/pam.d/sshd.
- Вернуть предыдущую конфигурацию PAM и перезапустить sshd:
$ sudo systemctl restart sshd
- Проверить доступ и затем отладить проблему на тестовом окружении.
Мини-словарь
- WiKID — сервер для двухфакторной аутентификации (OTP + PIN).
- RADIUS — протокол для аутентификации, авторизации и учёта запросов.
- PAM — Pluggable Authentication Modules, модульная система аутентификации в Linux.
- OTP — одноразовый пароль/код.
Заключение
Интеграция CentOS 7 с WiKID через pam_radius повышает уровень безопасности SSH-доступа и даёт централизованный контроль над одноразовыми токенами и блокировкой пользователей. Следуйте постепенному плану внедрения, обязательно тестируйте и имейте резервный доступ. Это решение особенно полезно для сред с требованиями аудита и строгой политикой доступа.
Ссылки:
- CentOS: http://www.centos.org
- PAM RADIUS: http://freeradius.org/pam_radius_auth/
- WiKID Two-factor authentication: https://www.wikidsystems.com
Похожие материалы
Защита от Logjam на Ubuntu/Debian

Dark Sky: гиперлокальный прогноз дождя

Защита SSH на CentOS 7 с WiKID 2FA

Как остановить автоматические обновления Windows 10

Как нанять Stay Dry Roofing Indianapolis
