Skip to end of metadata
Go to start of metadata

中文标题【使用 Fail2Ban 来限制登录尝试】

什么是 Fail2Ban?

我们需要在我们网站中防止密码的暴利破解。Fail2Ban 是一个 Python 的应用来查看日志文件,使用的是正则表达式,同时还可以与Shorewall (或者 iptables)直接工作来来启用临时黑名单。当一定的密码破解规则被使用后,就可以使用上面的方法了。我们可以用这个来限制给定的 URL 来访问 Confluence 的登录界面的次数。

(warning) 本页面中的信息不能应用到 Confluence Cloud 中。

安装要求

  • 需要 Python 2.4 或者更新的版本。
  • 需要指定下面的特定文档,这意味着你的 Apache 实例需要登录你的 Confluence 才能访问一个已知的日志文件(logfile)。你需要按照下面的要求正确调整配置

如何设置

本列表是安装的核心部分:

  • 针对 RHEL 我们有 RPM 是可以按照的,请进入下载页面,同时你还可以下载源代码收手动进行安装。
  • 配置文件在 /etc/fail2ban
  • 在原始状态下,默认的配置文件在 .conf 文件(fail2ban.conf 和 jail.conf)。请不要对这个进行修改,如果你进行修改的话,将会导致升级的时候困难。
  • .local 文件中对配置进行修改,这个将会与 .conf 文件中的配置进行合并。这个文件只会对你需要的修改部分进行修改,能够让你的维护更加容易和简单。
  • 过滤器(Filters)在 filter.d  中进行定义 — 在这里这里,你可以定义正则表达式,每个正则表达式进入自己的文件。
  • Actions 在 action.d 文件中定义 — 你可能不需要添加一个,但是你知道在那里进行定义的能够帮你更好的找到问题。
  • "jails" 是配置单元,这个配置单元用来指定一个进行检查的正则表达式,当线程达到数量后,更多的 actions 将会被启动,这个是在线程中配置的(例如,在 60 秒钟,超过 3 次的满足正则表达式条件的地址,将会被禁止访问 600 秒)
  • Jails 是在 jail.conf and jail.local 中定义的。不要忘记了为每一个都启动设置 — 这个有可能导致错误的启用,正确的却没有启用。

运行 Fail2Ban

  • 使用 /etc/init.d/fail2ban {start|stop|status} 来进行进程相关的操作
  • 使用 fail2ban-client -d 来导出当前的配置到 STDOUT。在你对问题进行查看的时候,这个就非常有帮助。
  • 请注意 CPU 的使用。尽管可能你使用了非常简单的正则表达式,也有可能会导致 CPU 的使用飙升,如果你的站点的访问量比较大的话。
  • 日志可以日志到 syslog 或者一个文件,你可以选择哪种方式更加适合你。

通用配置

jail.local

# The DEFAULT allows a global definition of the options. They can be override
# in each jail afterwards.

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
# ignoreip = <space-separated list of IPs>

# "bantime" is the number of seconds that a host is banned.
bantime  = 600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 60

# "maxretry" is the number of failures before a host get banned.
maxretry = 3


[ssh-iptables]

enabled  = false


[apache-shorewall]

enabled  = true
filter   = cac-login
action   = shorewall
logpath = /var/log/httpd/confluence-access.log
bantime = 600
maxretry = 3
findtime = 60
backend = polling

Confluence 的配置

下面仅仅被用来作为示例,你需要根据你的站点调整。

filter.d/confluence-login.conf

[Definition]

failregex = <HOST>.*"GET /login.action

ignoreregex =
  • No labels