我在我的服务器上设置了一个fail2ban系统来限制SSH访问。它工作正常,除了在设备上输入用户名后,如果我输入错误的密码 3 次(我的最大重试值),它会继续允许用户尝试登录。但是如果我从尝试登录中删除退出作为该用户,并打开一个新会话,我现在被禁止了。
使用putty时,我输入目标地址(但不是用户名)
login as: user
user@address's password: 1234
Access Denied
user@address's password: 1235
Access Denied
user@address's password: 1324
Access Denied
user@address's password: 1234
Access Denied
user@address's password: 1235
Access Denied
user@address's password: 1324
Access Denied
理论上,它不应该让我在第三次尝试后登录,而是让我尝试 6 次,之后我会收到一个关于身份验证失败次数过多的弹出窗口。如果我随后返回,fail2ban 已正确阻止设备访问。
我怎样才能将其设置为在第三次尝试后立即启动?
编辑:我知道这问题。然而,我相信这是不同的,因为那里的海报询问为什么它根本不阻塞。我更担心为什么它不阻止已经在进行的登录尝试。
答案1
经过我这边的一些调查,
- 基于我的
iptables
配置确实fail2ban
会阻止活动会话,包括尝试登录的会话和已登录的会话。 - 基于my 的
shorewall
配置fail2ban
不会阻止活动会话,但会阻止新的连接尝试。
差异取决于iptables
用于禁止流量的规则和 的具体配置fail2ban
。
在不知道您使用的是原始抽象iptables
还是更高级别的抽象之一(ufw
、shorewall
等)的情况下,这里有一些提示:
使用iptables
在
jail.local
我有以下定义:banaction = iptables-multiport action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] action = %(action_)s
在每个规则中,要么不覆盖默认设置,要么覆盖默认设置
banaction = iptables-multiport
(与默认设置相同)。另外,为了
jail.local
确保最大重试次数反映您的首选策略,无论是默认策略还是每个服务规则集:maxretries = 3
确保
action.d/iptables-multiport.conf
您对 Ban 和 Unban 规则有这样的定义:actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP
使用海岸墙
如果使用 Shorewall 连接器,fail2ban
您需要调整默认规则,以便 Shorewall 不仅仅将阻止应用于初始会话,而是应用于该 IP 地址的所有流量。
在
jail.local
我有以下定义:banaction = shorewall action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] action = %(action_)s
在每个规则中,要么不覆盖默认设置,要么覆盖默认设置
banaction = shorewall
(与默认设置相同)。另外,为了
jail.local
确保最大重试次数反映您的首选策略,无论是默认策略还是每个服务规则集:maxretries = 3
-
DYNAMIC_BLACKLIST=Yes BLACKLISTNEWONLY=No
该
BLACKLISTNEWONLY
设置确定是阻止所有连接还是仅阻止新连接。你会想要No
这里。