对抗对电子邮件服务的暴力攻击

Fighting with brute force attack on email service

我遇到了问题,需要您的专家建议。 我在 directadmin 中不断收到来自俄罗斯和中国等地的 IP 的暴力攻击警告。

消息类似于

Feb 27 04:31:15 host1 dovecot[2387]: pop3-login: Aborted login (auth failed, 1 attempts in 2 secs): user=<postmaster@domain.com>, method=PLAIN, rip=194.63.XXX.XXX, lip=XX.XX.99.210, session=<aC8bgAkQ2ADCP45l>
Feb 27 04:31:05 host1 exim[2385]: exim: Aborted login (auth failed, 10 attempts in 20 secs): user=<postmaster@domain.com>, method=PLAIN, rip=194.63.XXX.XXX, lip=XX.XX.99.210, session=<aC8bgAkQ2ADCP45l>

它不是商业主机,所以只有 4-5 个不同的 IP 地址实际登录到电子邮件客户端以查看电子邮件。

所以我决定通过将其放入 /etc/csf/csf.deny

来阻止所有访问端口 25、465、587 的 IP 地址
tcp:in:d=25:s=0.0.0.0/0
tcp:in:d=465:s=0.0.0.0/0
tcp:in:d=587:s=0.0.0.0/0

并且我在 /etc/csf/csf.allow 中允许了我的 IP 地址 这是一个好主意吗? 外界还能给我发邮件吗?端口 25 被阻止?

tcp:in:d=25:s=124.12.0.0/20
tcp:in:d=465:s=124.12.0.0/20
tcp:in:d=587:s=124.12.0.0/20

请指教

非常感谢。

Server: Debian GNU/Linux 7.5 x86_64 / Direct Admin / CSF Firewall

一个好的解决方案是使用 Fail2ban。

Fail2ban is a Daemon to ban hosts that cause multiple authentication errors

它使用 iptables 来完成工作。

默认情况下它不会阻止 SMTP 攻击,但您可以像这样编辑它的配置文件 /etc/fail2ban/jail.local

[...]

[sendmail]

enabled  = true
port     = smtp,ssmtp
filter   = sendmail
logpath  = /var/log/mail.log
bantime  = 28800
action   = iptables-multiport[name=sendmail, port="pop3,imap,smtp,pop3s,imaps,smtps", protocol=tcp]

只需确保路径和端口与您的配置正确即可。

Iptables 具有检查数据包内容的能力。有了它,您可以查找身份验证错误并将它们添加到禁止列表中。我们的邮件服务器不断受到来自多个来源的字典攻击,并且速率限制为每分钟 10 次到每 5 分钟 1 次或以上。这是一个简短的示例,完整的脚本位于 http://www.wiseoldcat.com/?q=node/32。格式为 CentOS/Redhat /etc/sysconfig/iptables 或 iptables-save。这种方法可以适用于 imap 和 pop

:SMTP_Check_Auth_OUTPUT - [0:0]
:SMTP_Check_Auth_INPUT - [0:0]
....
# add jumps for NEW connections to our filters on the INPUT chain for the SMTP and SUBMISSION ports
-A INPUT -p tcp -m multiport --dports 25,587 -m state --state NEW -j SMTP_Check_Auth_INPUT
....
# Add the authentication filter on the OUTPUT side
-A OUTPUT -p tcp -m multiport --sports 25,587 -m state --state ESTABLISHED,RELATED -j SMTP_Check_Auth_OUTPUT
....
# one of our netblocks so RETURN
-A SMTP_Check_Auth_OUTPUT -d 123.123.123.0/24 -j RETURN
# if the contents packet do NOT have the authentication error string then RETURN - customize for your mailserver
-A SMTP_Check_Auth_OUTPUT -p tcp -m string --to 120 --algo kmp --string ! "535 5.7.0 authentication failed" -j RETURN
# set an entry in the recent table
-A SMTP_Check_Auth_OUTPUT -p tcp -m recent --name SMTP_AUTH_ERROR --set --rdest
-A SMTP_Check_Auth_OUTPUT -j LOG --log-prefix "SMTP_AUTH_FAIL: Strike: "
....
# Add the target for the INPUT side
# we are here because this is a new connection - if there hasn't been 3 hits in 20 minutes then RETURN - adjust to your needs
-A SMTP_Check_Auth_INPUT -m recent ! --rcheck --name SMTP_AUTH_ERROR --seconds 1200 --hitcount 3 --rsource -j RETURN
# tag it again
-A SMTP_Check_Auth_INPUT -p tcp -m recent --name SMTP_AUTH_ERROR --set --rsource
# and REJECT the connection
-A SMTP_Check_Auth_INPUT -j REJECT --reject-with icmp-port-unreachable