1

我面临一个问题,需要您的专家建议。我在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

请指教。

太感谢了。

服务器:Debian GNU/Linux 7.5 x86_64 / Direct Admin / CSF Firewall

4

2 回答 2

3

一个好的解决方案是使用 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]

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

于 2015-03-04T09:09:25.660 回答
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
于 2019-03-27T17:50:06.630 回答