dcaptcha — это легковесный и высокопроизводительный плагин для почтового веб-интерфейса SnappyMail, который заменяет стандартную Google reCAPTCHA на отечественный сервис защиты dCAPTCHA от DDoS-Guard. Плагин обеспечивает бесшовную интеграцию со слайдером проверки на фронтенде, защищает порты авторизации почтового бэкенда (Dovecot/Postfix) от распределенного брутфорса, автоматических регистраций и спам-ботов на высоконагруженных enterprise-серверах (до 30 000+ ящиков).
- Stateless-архитектура: Полная совместимость с изолированными пулами PHP-FPM, кэшем APCu/Redis и строгими политиками SELinux на базе AlmaLinux 10 / RHEL 9+.
- REST API верификация: Финальная проверка токена на стороне бэкенда выполняется строго через JSON-сериализованные POST-запросы к балансировщикам https://ddos-guard.net.
- Интеллектуальный лимит ошибок: Поддержка отслеживания неудачных попыток входа (Error limit). Капча может выводиться как сразу, так и динамически подгружаться на форму только после нескольких промахов по паролю.
- Совместимость с CSP: Автоматически адаптирован для строгих заголовков Content-Security-Policy веб-интерфейса, включая поддержку веб-сокетов wss://captcha.ddos-guard.net для поведенческого JS-челленджа.
Для корректной инициализации движком SnappyMail, файлы плагина должны быть размещены в следующей иерархии внутри вашей изолированной директории данных /data:
/var/www/html/snappymail/data/_data_/_default_/plugins/
└── dcaptcha/
├── index.php # Бэкенд-логика (перехват хуков, JSON POST-верификация)
└── js/
└── dcaptcha.js # Фронтенд-скрипт (динамическая инициализация window.ddgcaptcha)
Перейдите в каталог плагинов вашего сервера и склонируйте репозиторий (или распакуйте архив):
cd /var/www/html/snappymail/data/_data_/_default_/plugins/
git clone https://github.com/pdenisp/dcaptcha.git
В соответствии с enterprise-стандартами безопасности, ограничьте права на чтение кода, выдав их вашему кастомному пользователю пула PHP (например, snappy), и обновите контексты безопасности:
sudo chown -R snappy:snappy /var/www/html/snappymail/data/_data_/_default_/plugins/dcaptcha/
sudo find dcaptcha/ -type d -exec chmod 750 {} \;
sudo find dcaptcha/ -type f -exec chmod 640 {} \;
sudo restorecon -Rv /var/www/html/snappymail/data/_data_/_default_/plugins/dcaptcha/
Если вы еще не делали этого, разрешите процессам веб-сервера инициировать внешние сокеты в SELinux (критично для связи с API DDoS-Guard):
sudo setsebool -P httpd_can_network_connect on
Зайдите в личный кабинет DDoS-Guard Client Area, перейдите в раздел управления капчей и сгенерируйте пару ключей:
- Ключ сайта (Site Key / Public Key) — для фронтенда.
- Секретный ключ (Private Key / Client Secret) — для бэкенда.
- Перейдите в админку вашей почты https://yourdomain.com.
- Откройте раздел Plugins (Плагины).
- Найдите в списке dcaptcha, поставьте галочку Enable и нажмите на шестеренку настроек.
- Вставьте полученные Site Key и Private Key.
- Задайте параметр Error limit (например, 2 для показа после двух ошибок или 0 для постоянного отображения на форме входа). Нажмите Save.
Чтобы принудительно обновить скомпилированные шаблоны и применить JS-скрипты, выполните сброс из консоли:
sudo -u snappy php /var/www/html/snappymail/index.php --clear-cache
sudo systemctl restart php-fpm
Проект распространяется под лицензией MIT. Вы можете свободно использовать, модифицировать и масштабировать его в инфраструктурах любой сложности.
Если вам потребуется интегрировать логирование ошибок авторизации капчи в системный журнал syslog вашей AlmaLinux 10, дайте знать. Я могу подготовить пример PHP-кода для записи событий безопасности, чтобы вы могли отслеживать подозрительную активность через SIEM-систему или journalctl.