与电子邮件服务的暴力攻击作斗争

时间:2015-03-03 16:20:50

标签: linux debian firewall exim 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地址实际登录到电子邮件客户端以检查电子邮件。

所以我决定阻止访问端口25,465,587的所有IP地址,将其放在/etc/csf/csf.deny

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

请告知。

非常感谢你。

  

服务器:Debian GNU / Linux 7.5 x86_64 /直接管理员/ CSF防火墙

2 个答案:

答案 0 :(得分:2)

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

  

Fail2ban是一个禁止导致多个身份验证错误的主机的守护进程

它使用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]

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

答案 1 :(得分:1)

Iptables具有检查数据包内容的能力。这样您就可以查找身份验证错误并将其添加到禁止列表中。我们的邮件服务器受到来自许多来源的不断的字典攻击,其速率限制为每分钟10个到每5分钟一个或一次。这是一个缩写示例,完整脚本位于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