Защита от перебора паролей: SMTP, IMAP, веб — лимит по IP и по ящику
continuous-integration/drone/pr Build is passing
continuous-integration/drone/pr Build is passing
Один LoginGuard на все проверки пароля (SMTP AUTH, IMAP LOGIN/AUTHENTICATE, вход в веб, смена пароля): 10 неверных с IP за 15 мин → блок 15 мин, дальше вдвое дольше до суток; 20 неверных на ящик с разных IP → ящик закрыт, кроме IP, с которых в него уже входили. Во время блока пароль не проверяется (SMTP 421, IMAP BYE + NO [UNAVAILABLE], веб 429 + Retry-After); неверный пароль — ответ через 1 с; 3 неверных в соединении — обрыв. X-Forwarded-For веб-входа — только от прокси в частной сети, иначе заголовок отбрасывается (подменой IP лимит не обойти). Попутно: IMAP терял тегированный ответ после "* BYE" (LOGOUT, обрыв после неудачных входов) — takeUntil теперь после тегированной строки. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -83,3 +83,15 @@ management.endpoints.web.exposure.include=health
|
||||
management.endpoint.health.show-details=never
|
||||
|
||||
logging.level.com.mailserver=INFO
|
||||
|
||||
# Brute-force protection for SMTP AUTH, IMAP login, web login and password change (one counter for all of them):
|
||||
# MAX_PER_IP wrong passwords from one IP within WINDOW → the IP is blocked for BLOCK (each next block twice as long,
|
||||
# up to MAX_BLOCK); MAX_PER_ACCOUNT wrong passwords to one mailbox from any IPs → the mailbox is blocked for BLOCK,
|
||||
# except for IPs that logged in to it before. TRUSTED_IPS (comma-separated) are never blocked by IP
|
||||
mailserver.login-guard.enabled=${LOGIN_GUARD:true}
|
||||
mailserver.login-guard.max-per-ip=${LOGIN_GUARD_MAX_PER_IP:10}
|
||||
mailserver.login-guard.max-per-account=${LOGIN_GUARD_MAX_PER_ACCOUNT:20}
|
||||
mailserver.login-guard.window=${LOGIN_GUARD_WINDOW:15m}
|
||||
mailserver.login-guard.block=${LOGIN_GUARD_BLOCK:15m}
|
||||
mailserver.login-guard.max-block=${LOGIN_GUARD_MAX_BLOCK:24h}
|
||||
mailserver.login-guard.trusted-ips=${LOGIN_GUARD_TRUSTED_IPS:}
|
||||
|
||||
Reference in New Issue
Block a user