fail2ban 和 ssh 不起作用

fail2ban 和 ssh 不起作用

我已经配置了 ssh,端口为 2122,并且只允许使用公钥。我已经确保了安全,但我想进一步禁止那些尝试暴力验证的人。

我的 fail2ban 配置

jail.local

[INCLUDES]
before = paths-slackware.conf
[DEFAULT]
ignoreip = 127.0.0.1/8
ignorecommand =
bantime  = 10800
findtime  = 600
maxretry = 3
backend = auto
usedns = warn
logencoding = auto
enabled = true
filter = %(__name__)s
destemail = root@localhost
sender = root@localhost
mta = mail
protocol = tcp
chain = INPUT
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mw = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
            %(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mwl = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
             %(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
action_xarf = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
             xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath=%(logpath)s, port="%(port)s"]
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
                %(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
action_blocklist_de  = blocklist_de[email="%(sender)s", service=%(filter)s, apikey="%(blocklist_de_apikey)s", agent="%(fail2ban_agent)s"]
action_badips = badips.py[category="%(__name__)s", banaction="%(banaction)s", agent="%(fail2ban_agent)s"]
action_badips_report = badips[category="%(__name__)s", agent="%(fail2ban_agent)s"]
action = %(action_)s
[ssh]
enabled  = true
port     = 22
filter   = sshd
logpath  = /var/log/messages
maxretry = 3
findtime = 10800
bantime = 21600
[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/chroothttp/var/log/httpd/error_log
maxretry = 3
findtime = 10800
bantime = 21600

Apache 运行正常,我尝试了一些错误的登录并禁止了 IP,但是 ssh 尝试并重试..没有禁止!

答案1

如果 SSH 没有在端口 22 上运行,则不会有登录失败的尝试/var/log/messages,因此 Fail2Ban 不知道要禁止哪些 IP 地址。

但是,由于您没有在端口 22 上运行任何服务,因此实际上不需要禁止。

答案2

如果您在非标准端口上运行 ssh,则需要更新 fail2ban 配置以关注该端口,而不仅仅是命名服务(因为它假定命名服务在其标准端口上运行)。

引用另一个人的话回答

fail2ban 将使用日志内容检测登录尝试。fail2ban 不使用端口进行检测,只用于阻止。要阻止正确的端口,您必须告诉 fail2ban 哪一个端口才能正确设置 iptable。进入/etc/fail2ban/jail.local

[ssh]
enabled = true
port = ssh <-- just modify this with your port port = 1234

然后重新启动fail2ban。

答案3

我找到了一个明确的解决方案

mode   = aggressive

代替

mode = normal

现在,如果用户无效或者端口错误等,fail2ban 将禁止使用公钥的尝试。经过测试并有效,这是 Slackware 15 的 jail.local sshd 部分。在这个例子中,我使用标准 22 端口,但我也用另一个端口(2122)测试了它并且可以工作。

[sshd]
    mode     = aggressive
    enabled  = true
    port     = ssh
    logpath  = /var/log/messages
    backend  = %(sshd_backend)s
    filter   = sshd
    maxretry = 2
    findtime = 10800
    bantime = 24h

相关内容