> From: Arkadiusz Mi?kiewicz > Is there a way to rate limit host based on invalid authentication?
WARNTO = ab...@example.com EXIMBINARY = /usr/local/sbin/exim -f root SHELL = /bin/sh acl_smtp_auth = acl_check_auth acl_smtp_quit = acl_check_quit acl_smtp_notquit = acl_check_notquit acl_smtp_mail = acl_check_mail acl_smtp_connect = acl_check_connect begin acl acl_check_auth: drop message = authentication is allowed only once per message in order \ to slow down bruteforce cracking set acl_m_auth = ${eval10:0$acl_m_auth+1} condition = ${if >{$acl_m_auth}{2}} delay = 22s drop message = blacklisted for bruteforce cracking attempt set acl_c_authnomail = ${eval10:0$acl_c_authnomail+1} condition = ${if >{$acl_c_authnomail}{4}} continue = ${run{SHELL -c "echo $sender_host_address \ >>$spool_directory/blocked_IPs; \ \N{\N echo Subject: $sender_host_address blocked; echo; echo \ for bruteforce auth cracking attempt.; \ \N}\N | EXIMBINARY WARNTO"}} accept acl_check_quit: warn condition = ${if def:authentication_failed} condition = $authentication_failed logwrite = :reject: quit after authentication failed: \ ${sg{$sender_rcvhost}{\N[\n\t]+\N}{\040}} ratelimit = 7 / 5m / strict / per_conn continue = ${run{SHELL -c "echo $sender_host_address \ >>$spool_directory/blocked_IPs; \ \N{\N echo Subject: $sender_host_address blocked; echo; echo \ for bruteforce auth cracking attempt.; \ \N}\N | EXIMBINARY WARNTO"}} acl_check_notquit: warn condition = ${if def:authentication_failed} condition = $authentication_failed logwrite = :reject: $smtp_notquit_reason after authentication failed: \ ${sg{$sender_rcvhost}{\N[\n\t]+\N}{\040}} condition = ${if eq{$smtp_notquit_reason}{connection-lost}} ratelimit = 7 / 5m / strict / per_conn continue = ${run{SHELL -c "echo $sender_host_address \ >>$spool_directory/blocked_IPs; \ \N{\N echo Subject: $sender_host_address blocked; echo; echo \ for bruteforce auth cracking attempt.; \ \N}\N | EXIMBINARY WARNTO"}} acl_check_mail: accept set acl_c_authnomail = 0 acl_check_connect: drop message = $sender_host_address locally blacklisted for a bruteforce \ auth (login+password) cracking attempt condition = ${if exists{$spool_directory/blocked_IPs}} condition = ${lookup{$sender_host_address}lsearch\ {$spool_directory/blocked_IPs}{1}{0}} accept -- ## List details at https://lists.exim.org/mailman/listinfo/exim-users ## Exim details at http://www.exim.org/ ## Please use the Wiki with this list - http://wiki.exim.org/