我安装了 fail2ban 来禁止对 ssh 密码进行暴力尝试。在这台机器上不禁用密码认证有业务需求。
fail2ban 是使用相同的厨师手册安装的,该手册有效地禁止了对其他机器的 ssh 攻击。配置了一个 ssh 监狱:
# service fail2ban status
fail2ban-server (pid 5480) is running...
WARNING 'pidfile' not defined in 'Definition'. Using default one: '/var/run/fail2ban/fail2ban.pid'
Status
|- Number of jail: 1
`- Jail list: ssh
Run Code Online (Sandbox Code Playgroud)
手动禁止用户工作:
# fail2ban-client set ssh banip 103.41.124.46
Run Code Online (Sandbox Code Playgroud)
但它似乎并没有自动禁止任何人:
# cat /var/log/fail2ban.log
2014-11-20 18:23:47,069 fail2ban.server [67569]: INFO Exiting Fail2ban
2014-11-20 18:44:59,202 fail2ban.server [5480]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.14
2014-11-20 18:44:59,213 fail2ban.jail [5480]: INFO Creating new jail 'ssh' …Run Code Online (Sandbox Code Playgroud) 我目前使用 root 阻止所有 ssh 登录。但是我想加倍努力并阻止尝试以 root 身份登录的客户端的 IP 地址。我目前有 denyhosts 和 fail2ban 设置和工作,我可以使用 denyhosts 和或 fail2ban 来阻止那些尝试以 root 登录的人的 IP 地址吗?
为了阻止过多的失败phpMyAdmin登录尝试fail2ban,我创建了一个脚本来记录对文件的失败尝试:/var/log/phpmyadmin_auth.log
自定义日志
/var/log/phpmyadmin_auth.log文件格式为:
phpMyadmin login failed with username: root; ip: 192.168.1.50; url: http://somedomain.com/phpmyadmin/index.php
phpMyadmin login failed with username: ; ip: 192.168.1.50; url: http://192.168.1.48/phpmyadmin/index.php
Run Code Online (Sandbox Code Playgroud)
自定义过滤器
[Definition]
# Count all bans in the logfile
failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
Run Code Online (Sandbox Code Playgroud)
phpMyAdmin 监狱
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 6
Run Code Online (Sandbox Code Playgroud)
该fail2ban日志包含:
2012-10-04 10:52:22,756 fail2ban.server : INFO Stopping all jails …Run Code Online (Sandbox Code Playgroud) fail2ban 是否继续监视轮换的日志文件?
例如,我有一个规则监控/var/log/fail2ban.log,它每周(7 天)由系统自动轮换。我想要一个规则来监控该日志中被禁止的 IP,以查找在过去 10 天内被禁止 5 次的重复违规者。那可能吗?
我已经配置了 fail2ban 来监控我收到的某种恶意流量模式并禁止关联的 IP 地址。
一切似乎都运行良好——正则表达式正在适当地匹配模式,并且问题 IP 地址正在添加到 iptables。
但是,当我检查 Apache 日志时,我仍然收到来自被禁止的 IP 地址的点击。就好像 iptables 根本没有运行一样。
所以让我分享一些细节只是为了确认一切都配置正确。
首先,我将清除并重新加载 iptables 规则:
$ sudo iptables -F
$ cat /etc/iptables.firewall.rules
*filter
# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all outbound traffic - you can …Run Code Online (Sandbox Code Playgroud) 我已经在我控制的服务器上安装了 Debian 打包的 fail2ban。由于我之前有一些失败正则表达式,因此我将它们放入本地过滤器定义文件中,因此它们也会被考虑在内。因此,我最终得到了 /etc/fail2ban/filter.d/sshd.conf 和 /etc/fail2ban/filter.d/sshd.local。这是推荐的设置方式,它似乎工作得很好。
但是,在 .local 文件中,我实际上是从 .conf 文件中替换了整个失败正则表达式列表。文档似乎没有表明有任何其他方法可以做到这一点,为了让它工作,我只是将发行版提供的 .conf 文件复制到 .local 文件并进行了一些添加。
如果我能简单地修改列表,从上游和 Debian 维护者的工作中受益,以便及时了解发行版维护的日志条目过滤器正则表达式的变化,那就太好了。
我能想到的唯一真正的解决方法是实际创建两个 jail,一个使用分发提供的配置,另一个使用我自己的配置。这似乎具有(相当重要的)缺点,即它们被视为独立的监狱(您会期望这样的设置)。
当然,我不可能是唯一一个想要将我自己的几个失败正则表达式添加到已经存在的集合中的人,并且将维护的麻烦降到最低。
是否可以通过站点本地或主机本地文件修改fail2ban 过滤器定义中的 failregex 和 ignoreregex 列表,而无需对相应的全局或分发提供的文件进行任何更改?如果是,那该怎么做呢?
我想挑选社区关于 linux 服务器安全性的大脑,特别是关于蛮力攻击和使用fail2ban与自定义iptables。
那里有一些类似的问题,但没有一个能解决我满意的主题。简而言之,我正在尝试确定最佳解决方案来保护暴露在互联网上的 linux 服务器(运行通常的服务、ssh、web、邮件),免受暴力攻击。
我对服务器安全有很好的处理,即通过不允许 root 或密码登录来锁定 ssh,更改默认端口,确保软件是最新的,检查日志文件,只允许某些主机访问服务器并利用安全性审计工具,如Lynis ( https://cisofy.com/lynis/ ),用于一般安全合规性,因此这个问题不一定与此有关,尽管始终欢迎输入和建议。
我的问题是我应该使用哪种解决方案(fail2ban 或 iptables),我应该如何配置它,或者我应该使用两者的组合来防止暴力攻击?
关于该主题有一个有趣的回应(Denyhosts vs fail2ban vs iptables-防止暴力登录的最佳方法?)。对我来说,最有趣的答案是个人(https://serverfault.com/a/128964),而且iptables的路由发生在内核,而不是的fail2ban这使得用户的使用模式工具来分析日志文件。Fail2ban 当然使用 iptables,但它仍然必须解析日志文件并匹配模式,直到它执行操作。
那么使用 iptables 并使用速率限制(https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/)在一段时间内删除来自 IP 的请求是否有意义在特定时间段内进行过多连接尝试的时间,而不管它尝试连接到什么协议?如果是这样,那么这里有一些关于对这些数据包使用丢弃与拒绝的有趣想法(http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject),对此有什么想法吗?
Fail2ban 允许以能够为默认配置中可能无法解决的服务编写自定义“规则”的形式进行自定义配置。它易于安装和设置并且功能强大,但是如果我试图实现的只是“阻止”来自服务器的 IP,如果他们对任何服务/协议进行 2 次失败的访问尝试超过x数量,这会不会是一种矫枉过正时间?
此处的目标是打开每日日志监视报告,而不必滚动浏览尝试连接到服务器的失败页面。
感谢您抽出宝贵的时间。
我已经配置了fail2ban,但我想测试电子邮件的发送。例如,我希望在启动或停止 fail2ban 时收到电子邮件。
我有带 firewalld 的 CentOS 7。我安装了 fail2ban 并使用 firewallcmd-new 操作。我在fail2ban 日志中看到禁止,如果它们被阻止,我想检查firewallcmd。我该怎么做?
我正在使用 Fail2Ban 并根据需要对其进行了配置。这是从 nginx/error.log 读取日志,并根据有关 maxretry 和计时集的配置进行操作。问题是这是否可能根据状态代码有不同的规则?
例如,我想阻止任何人404 Status code在 5 分钟内获得 10 ,但阻止任何人获得 3 403 Status code。
任何帮助将不胜感激,提前致谢。