Двухфакторная аутентификация Google Apps с открытым ПО
Введение
GMail удобен, но входы с общих компьютеров и публичных Wi‑Fi повышают риск кражи учётных данных. Для организаций, использующих Google Apps для домена, добавление двухфакторной аутентификации (2FA) повышает безопасность при использовании SSO (Single Sign-On). В этом руководстве мы используем два открытых проекта: Gheimdall (TurboGears‑SSO для Google Apps) и WiKID (двухфакторная система на основе криптографии с открытым исходным кодом).
Определения в одну строку:
- SSO: единый вход — система, позволяющая пользователю авторизоваться для нескольких сервисов одной учётной записью.
- 2FA: двухфакторная аутентификация — сочетание «чего-то, что вы знаете» и «чего-то, что у вас есть».
Требования и предварительная подготовка
- Google Apps Premier (или тариф с поддержкой SSO). Доступна пробная версия на 30 дней для тестирования.
- Сервер под управлением CentOS (в примерах используется yum). Можно адаптировать под другие дистрибутивы.
- Доступ к WiKID Strong Authentication Server (Community Edition описан здесь).
- root/администратор на серверах Gheimdall и WiKID.
Важное: тестируйте сначала на изолированной тестовой среде, прежде чем менять SSO в боевом домене.
Установка Gheimdall
В примере автор использовал инструкции для CentOS и yum:
wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm
rpm -ivh epel-release-5-2.noarch.rpm
wget http://gheimdall.googlecode.com/files/gheimdall-repos-5-3.noarch.rpm
rpm -ivh gheimdall-repos-5-3.noarch.rpm
yum install gheimdallПосле установки проверьте, что сервис gheimdall запущен и доступен по HTTP/HTTPS на адресе, который вы собираетесь использовать в Google Apps.
Настройка Google Apps для SSO
В панели администратора Google Apps (раздел Advanced Tools) выберите «Set up single sign‑on (SSO)», включите SSO и укажите URL‑адреса ваших SAML эндпоинтов:
Sign-in page URL: http://your.domain.example.com/gheimdall/login
Sign-out page URL: http://your.domain.example.com/gheimdall/logout
Change password URL: http://your.domain.example.com/gheimdall/passwdДалее нужно создать пару ключей (приватный и публичный), которую будет использовать Gheimdall для подписи SAML‑ответов.
openssl genrsa -des3 -out privkey.pem 2048
openssl rsa -in privkey.pem -out privkey-nopass.pem
openssl rsa -in privkey-nopass.pem -pubout -outform DER -out publickey.derЗагрузите publickey.der в консоль Google Apps как verification certificate. После этого Google начнёт доверять SAML‑ответам, подписанным вашим ключом.
Настройка плагина WiKID для Gheimdall
Плагин WiKID требует pyOpenSSL:
yum install pyOpenSSLСкачайте плагин WiKID для Gheimdall со страницы Network clients WiKID и скопируйте необходимые компоненты в директорию Gheimdall:
cp wikid_gheimdall.py pywClient.py WiKID-ca.pem /usr/lib/python2.4/site-packages/gheimdall/auth/Отредактируйте настройки в файле wikid_gheimdall.py (со временем эти параметры можно вынести в внешний конфиг):
domaincode = '010100000010'
host = '10.100.0.10'
port = 8388
caCert = '/usr/lib/python2.4/site-packages/gheimdall/auth/WiKID-ca.pem'
pkey = '/usr/lib/python2.4/site-packages/gheimdall/auth/test67_wauth.p12'
passPhrase = 'google'Пояснения:
- domaincode — код домена в WiKID (см. ниже, как его получить).
- host — IP адрес WiKID сервера.
- port — порт wAuth протокола (обычно 8388).
- caCert — путь к CA‑сертификату WiKID, скопированному ранее.
- pkey и passPhrase — p12‑файл клиентского сертификата и пароль к нему, скачанный из интерфейса WiKID.
Затем укажите Gheimdall использовать данный плагин в config/app.cfg:
# auth_engine to use
apps.auth_engine = 'wikid_gheimdall'Добавление Gheimdall как Network Client в WiKID
Мы используем Community Edition WiKID. Процесс состоит из двух шагов: создать домен на WiKID и создать сетевого клиента (Network Client) для вашего Gheimdall‑сервера.
Добавление домена в WiKID
Через веб‑админку WiKID откройте вкладку Domains и нажмите Create New Domain. Укажите имя домена и имя устройства — оно будет отображаться на токене WiKID. Серверный код domaincode формируется из нулевой заполненной IPv4‑адресной формы (например, 10.1.1.1 → 010001001001 в примере). Настройте PIN и другие параметры по требованиям вашей организации.

Замечание: длинный PIN математически безопаснее, но пользователи чаще защищают короткий PIN (4 цифры), если он совпадает с привычным ATM PIN.
Создание сетевого клиента
После создания домена откройте вкладку Network Client и нажмите Create New Network Client. Укажите имя клиента и IP‑адрес сервера Gheimdall, выберите протокол wAuth и выберите домен, созданный ранее.

Нажмите Add, чтобы перейти к странице создания p12‑сертификата. Заполните passphrase для p12 и введите passphrase, использованный при создании промежуточного сертификата на сервере WiKID. После создания вы увидите ссылку для скачивания p12. Скачайте этот файл и поместите его на Gheimdall сервер в /usr/lib/python2.4/site-packages/gheimdall/auth/.

Тестирование
После настройки попробуйте войти в Google Apps. При попытке входа вы должны быть перенаправлены на страницу Gheimdall:

Действия пользователя на токене WiKID:
- Введите PIN на токене.

- Токен сгенерирует одноразовый код.

- Введите имя пользователя и одноразовый код на странице Gheimdall; после проверки вы будете перенаправлены обратно в Google Apps:

Поздравляем — 2FA с WiKID интегрирован с Google Apps через Gheimdall.
Возможные проблемы и устранение неисправностей
- Ошибка подписи SAML: проверьте соответствие публичного ключа, загруженного в Google Apps, и приватного ключа на Gheimdall.
- SSL/SSL‑handshake между Gheimdall и WiKID: убедитесь, что p12 файл и passPhrase корректны, и что CA‑сертификат WiKID установлен правильно.
- Неправильный domaincode: убедитесь, что domaincode совпадает с кодом, показанным в настройках домена WiKID.
- Ошибки времени (OTP): синхронизация времени может влиять на временные токены; проверьте NTP.
Советы для диагностики: включите логирование на Gheimdall и WiKID, используйте tcpdump/wireshark для анализа TLS‑соединений (в тестовой среде), проверяйте разрешения файлов и владельцев p12/ключей.
Альтернативные подходы
- Использовать коммерческие 2FA‑решения (например, Yubico, Duo) с готовой интеграцией в Google Apps.
- Прямое подключение PAM/LDAP с 2FA при помощи модуля pam_oath или других PAM‑модулей.
- Прокси‑SSO поверх SAML: если Gheimdall не подходит, можно рассмотреть Shibboleth, SimpleSAMLphp или Keycloak.
Когда это не сработает: если ваша организация требует FIPS‑совместимых крипто‑модулей или централизованного управления устройствами, Community WiKID и Gheimdall могут оказаться недостаточными.
Укрепление безопасности перед продакшн‑запуском
- Переведите Gheimdall на HTTPS с действующим TLS-сертификатом.
- Ограничьте доступ по IP к WiKID‑серверу и Gheimdall с помощью firewall.
- Храните p12 и приватные ключи с минимальными правами доступа; используйте защищённые хранилища (например, HSM или Vault) при наличии.
- Включите мониторинг и оповещения о неуспешных попытках входа.
Роль‑базовый контрольный список для развёртывания
Администратор инфраструктуры:
- Установить Gheimdall и обеспечить доступ HTTPS.
- Настроить NTP, бэкапы и мониторинг.
Администратор WiKID:
- Создать домен и сетевого клиента в WiKID.
- Сгенерировать p12 и передать его безопасно на Gheimdall.
Администратор Google Apps:
- Включить SSO и загрузить verification certificate.
- Настроить URL‑адреса входа/выхода и смены пароля.
Тестировщик безопасности:
- Провести попытки обхода 2FA в тестовой среде.
- Проверить логи и корректность SAML‑ответов.
Мини‑методология внедрения (шаги)
- Подготовка тестового домена Google Apps.
- Установка Gheimdall на тестовом сервере с HTTPS.
- Развёртывание WiKID в тестовой сети и создание домена/клиента.
- Интеграция Gheimdall с WiKID; тестирование входа/выхода.
- Проведение внутренних тестов и аудита логов.
- Перенос конфигурации в продакшн по расписанию с откатом.
Критерии приёмки
- Авторизация через Google Apps перенаправляет на Gheimdall и требует одноразовый код WiKID.
- Одноразовый код успешно валидируется и пользователь получает доступ в Google Apps.
- TLS‑соединения между компонентами установлены и логируются.
- Документация и инструкции по откату доступны команде поддержки.
Краткий глоссарий
- Gheimdall: SSO‑сервер на базе TurboGears для интеграции с Google Apps.
- WiKID: система двухфакторной аутентификации с поддержкой токенов и OTP.
- p12: контейнер с сертификатом и приватным ключом в формате PKCS#12.
Краткое резюме
- Gheimdall и WiKID позволяют интегрировать 2FA с Google Apps через SAML/SSO.
- Ключевые шаги: установка Gheimdall, генерация ключей OpenSSL, настройка WiKID клиента, тестирование.
- Обязательные практики безопасности: HTTPS, ограничение сетевого доступа, защитa приватных ключей и мониторинг.
Важно: сначала тестируйте в контролируемой среде; имейте план отката при изменении SSO для рабочего домена.
Похожие материалы
Добавить Take Ownership в контекстное меню
Голосовой ввод в Windows 11 — включение и советы
Уведомления Google Форм на email — настройка
Petey на Apple Watch — ChatGPT на запястье
Искать по содержимому в Windows: добавить типы файлов