Настройка Squid для двухфакторной аутентификации через WiKID
Squid используется сотнями интернет-провайдеров по всему миру для обеспечения пользователей наилучшим доступом к вебу. Squid оптимизирует поток данных между клиентом и сервером для улучшения производительности и кэширует часто используемый контент для экономии полосы. Squid также может направлять запросы контента на серверы разными способами, чтобы строить иерархии кеш-серверов и оптимизировать пропускную способность сети.
Краткие определения:
- Squid: прокси-сервер и кэш, ускоряющий HTTP/HTTPS трафик.
- WiKID: сервер двухфакторной аутентификации, предоставляющий одноразовые пароли (OTP).
- PAM: механизм модульной аутентификации в Linux.
- RADIUS: сетевой протокол аутентификации (обычно порт 1812).
Зачем использовать такую схему
- Централизованная авторизация пользователей.
- Поддержка двухфакторной аутентификации для доступа в интернет через прокси.
- Совместимость с существующими веб-серверами при использовании режима accel.
Важно: прежде чем менять конфигурации на боевых серверах, выполните настройки в тестовой среде.
Предварительные требования
- Рабочий сервер Squid с доступом root.
- Установленный WiKID сервер и интерфейс WiKIDAdmin.
- Компилируемый pam_radius или готовый пакет для вашей ОС.
- Понимание базовых команд systemctl и логов (/var/log/squid и /opt/WiKID/logs).
Архитектура и поток авторизации
- Клиент обращается к Squid.
- Squid вызывает PAM-модуль pam_radius для проверки пользователя/OTP по RADIUS к WiKID.
- WiKID проверяет OTP и отдаёт результат RADIUS.
- Squid принимает решение об доступе и проксирует трафик к origin-серверу.
Конфигурация Squid
- Откройте конфигурацию Squid (обычно /etc/squid/squid.conf).
- Укажите PAM-скрипт для базовой аутентификации:
auth_param basic program /usr/lib/squid/pam_auth- Настройте ACL и правило доступа:
acl pam proxy_auth REQUIRED
http_access allow pam- Удалите или откомментируйте другие конфликтующие http_access правила, оставив требуемую последовательность проверок.
Пример простой тестовой конфигурации, где Squid ускоряет Apache на локальном хосте:
visible_hostname your_hostname
http_port external_IP:80 accel defaultsite=your_hostname
cache_peer 127.0.0.1 parent 80 0 no-query originserverСовет: после каждого изменения запускайте проверку конфигурации Squid и перезапускайте сервис.
Настройка PAM для Squid с pam_radius
- Установите pam_radius. Для дистрибутивов с исходниками:
# ./configure
# make
# make install- Отредактируйте /etc/pam.d/squid и вставьте модуль pam_radius как достаточный провайдер аутентификации. Перейдите ко второй строке файла и добавьте:
auth sufficient /lib/security/pam_radius_auth.soи оставьте или расположите её выше строки, которая отвечает за system-auth:
auth required pam_stack.so service=system-authПояснение: тег sufficient означает, что при успешной RADIUS-аутентификации дальнейшие проверки не требуются. Если RADIUS не удался, дальнейшая проверка по локальной базе (system-auth) сохранится. Если вы хотите принудительную двухфакторную политику, используйте подходящие теги и порядок модулей.
- Отредактируйте или создайте /etc/raddb/server (или конфиг, который использует ваша версия pam_radius). Пример упрощённой секции:
#%PAM-1.0
#auth include system-auth
auth required /lib/security/pam_radius_auth.so
#account include system-auth
account include /lib/security/pam_radius_auth.soЗаметка: расположение модулей PAM и формат файлов могут отличаться в разных дистрибутивах. Проверьте документацию вашего дистрибутива.
Регистрация Squid как клиента в WiKID
- Войдите в WiKIDAdmin в браузере.
- Откройте вкладку Domains. Если домен уже есть — пропустите создание.
- Нажмите «Создать новый домен» и заполните поля. Код сервера домена — IP адрес WiKID без точек, дополненный нулями до полного блока при необходимости (пример: 216.239.51.99 → 216239051099).
- Перейдите на вкладку Network Clients и нажмите «Создать нового сетевого клиента».
- Введите IP адрес сервера Squid, выберите тип RADIUS и ранее созданный домен. Нажмите «Добавить».
- На следующем экране укажите shared secret — тот же, что будет в /etc/raddb/server. Поле Return Attributes обычно оставляется пустым.
Важно: после добавления клиента выполните из консоли WiKID команду для перезагрузки RADIUS:
- Для WiKID 2.0: выполните stop, затем start.
- Для более новых версий: выполните wikidctl restart.
Тестирование доступа через OTP
- Установите клиентский токен WiKID на мобильном устройстве или рабочей станции.
- В WiKIDAdmin валидируйте пользователя вручную, если нужно.
- Выберите домен, связанный с Squid.

- Введите PIN в клиенте токена, чтобы получить одноразовый пароль.

- Клиент выдаст OTP; он ограничен по времени и срок действия можно настроить на сервере WiKID (обычно 30–60 секунд по умолчанию).

- Откройте любой браузер и перейдите на прокси-URL Squid. Вы увидите окно HTTP-аутентификации. Введите имя пользователя и одноразовый пароль как пароль. При успехе Squid пустит вас дальше.
Логи для отладки:
- Squid: /var/log/squid/access.log (путь может отличаться по дистрибутиву).
- WiKID RADIUS: через интерфейс WiKIDAdmin или файл /opt/WiKID/logs/radius.log.
Устранение неполадок
- Ошибка аутентификации для всех пользователей: проверьте соответствие shared secret между WiKID и /etc/raddb/server.
- RADIUS недоступен: проверьте сетевой доступ и порт 1812 на WiKID сервере.
- pam_radius не найден: убедитесь в корректном пути модуля (/lib/security/ или /lib64/security/ в зависимости от ОС).
- Squid пропускает без запроса пароля: убедитесь, что auth_param и ACL включены и что другие http_access правила не переопределяют поведение.
Если что-то не работает, используйте поочерёдную методику: проверяйте сначала локальную PAM-аутентификацию для пользователя, затем вызов pam_radius локально, затем RADIUS запросы на WiKID.
Роли и 체크-листы
Администратор Squid:
- Проверить работоспособность Squid и доступность origin-серверов.
- Настроить auth_param и ACL в конфиге Squid.
Системный администратор PAM/WiKID:
- Установить pam_radius и проверить пути модулей.
- Добавить конфигурацию клиента RADIUS и shared secret.
- Перезагрузить WiKID RADIUS-сервис.
Офицер по безопасности:
- Проверить политику сроков действия OTP и сложность PIN.
- Настроить аудит логов WiKID и Squid.
Критерии приёмки
- При вводе корректного имени пользователя и OTP доступ разрешён к ожидаемым ресурсам.
- Неправильный OTP блокируется, и в логах WiKID видно отказ.
- При недоступности RADIUS продолжается fallback на локальную аутентификацию (если предусмотрено).
Мини-методология деплоймента
- Развернуть тестовый стенд: Squid + WiKID на отдельной сети.
- Настроить pam_radius и проверить RADIUS-запросы с тестовыми пользователями.
- Тестировать последовательность логина с разными условиями (правильный OTP, неправильный, просроченный).
- Перенести конфигурацию на стейджинг и повторить.
- Плановое переключение на продуктив с откатом к предыдущему конфигу Squid.
Модель принятия решений (Mermaid)
flowchart TD
A[Клиент -> Squid] --> B{Требуется аутентификация}
B -- Да --> C[Squid вызывает pam_radius]
C --> D{RADIUS успешно?}
D -- Да --> E[Доступ разрешён]
D -- Нет --> F{Локальная auth разрешена?}
F -- Да --> G[Проверка system-auth]
G -- Успех --> E
G -- Неудача --> H[Доступ запрещён]
F -- Нет --> H
B -- Нет --> I[Доступ без аутентификации]Безопасность и конфиденциальность
- Используйте защищённый канал между Squid и WiKID, если инфраструктура позволяет (VPN или внутренняя защищённая сеть).
- Храните shared secret в защищённом месте и ограничьте доступ к файлам /etc/raddb/ и /etc/pam.d/.
- Логируйте события аутентификации, но соблюдайте требования конфиденциальности при хранении персональных данных.
Тестовые сценарии и критерии приёмки
- Валидный пользователь + валидный OTP → HTTP 200 и доступ к ресурсу.
- Валидный пользователь + просроченный OTP → отказ, запись в logs о неудаче.
- Неверный пользователь → отказ, проверка логов WiKID и Squid.
- Отсутствие связи с WiKID при настроенном fallback → проходит локальная аутентификация.
Короткая памятка команд
- Проверить конфигурацию Squid: systemctl status squid / journalctl -u squid
- Проверить логи Squid: tail -f /var/log/squid/access.log
- Перезапустить WiKID RADIUS: wikidctl restart или stop && start для WiKID 2.0
Глоссарий (1 строка)
- OTP: одноразовый пароль, действующий в течение ограниченного времени.
- RADIUS: протокол сетевой аутентификации, стандартный порт 1812.
Примеры ситуаций, когда схема не подойдёт
- Если у вас нет возможности обеспечить сетевую связность между Squid и WiKID.
- Если политики безопасности запрещают внешний хранить shared secret на различных узлах без HSM.
Итог и рекомендации
- Двухфакторная аутентификация для Squid через WiKID улучшает безопасность доступа в интернет.
- Тестируйте поэтапно: Squid → PAM → RADIUS → WiKID.
- Настройте мониторинг логов и регулярные проверки конфигурации.
Краткое резюме в конце:
- Squid даёт централизованную точку контроля доступа.
- WiKID обеспечивает второй фактор через OTP.
- PAM и pam_radius связывают компоненты вместе, давая гибкость и fallback.
Похожие материалы
Атака через цепочку поставок: SolarWinds и трояны
Включение и настройка Compiz в Ubuntu
Aero в Windows 7: включение, настройка, устранение проблем
Stacks на Mac: упорядочьте рабочий стол быстро
Добавить Take Ownership в контекстное меню