1

几天前,我问了这个问题Confuse about fail2ban behavior with firewallD in Centos 7
这是一个带有几条评论的大文本。
在 fail2ban 重启几个小时后,似乎有些东西开始刷新 iptables 我不明白它是什么。
几个月前,我将一些虚拟主机从我使用了 10 多年的专用服务器移到了 Contabo VPS。一切顺利,但 fail2ban 监狱。囚犯逃跑。:)
我的举动是从 Centos 6 到 Centos 7 Webmin/Virtualmin LAMP fail2ban;离开 /etc/sysconfig/iptables,现在使用 firewalld。如前所述,经过几个小时的fail2ban重启,以及一些成功禁止IP后,正如@sebres所建议的那样,由于症状“后遗症”,某些东西正在刷新iptables,例如

2019-12-05 16:55:20,856 fail2ban.action [1514]:错误 iptables -w -n -L INPUT | grep -q 'f2b-proftpd[ \t]' -- 标准输出:''

和“已被禁止”的通知。
我在默认配置中尝试的所有更改都没有改变这一点。
最后我删除了管理fail2ban的Webmin模块并重新安装了该服务。
重命名 /etc/fail2ban 以保留备份配置。

rpm -qa | grep -i fail2ban

然后

yum remove fail2ban-server     
yum remove fail2ban-firewalld      
yum install fail2ban-firewalld  (also installs -server)
yum install fail2ban-systemd

然后将旧的 jail.local 复制到新的 /etc/fail2ban 目录

[默认]
banaction = iptables-multiport
banaction_allports = iptables-allports

[sshd]
启用 = 真
端口 = ssh
maxretry = 4
bantime = 7200

[ssh-ddos]
启用 = true
端口 = ssh,sftp
过滤器 = sshd-ddos

[webmin-auth]
启用 = 真实
端口 = 10000

[proftpd]
启用 = 真正的
bantime = -1

[后缀]
启用 = 真正的
bantime = -1

[dovecot]
启用 = 真正的
bantime = -1

[postfix-sasl]
启用 = true
bantime = -1

我还检查了 cron 作业,看看是否有东西可以以任何方式刷新 iptables。
目前,我定期运行一个脚本来手动拒绝那些“已被禁止”的 IP 一次。

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xxx.xxx.xxx.xxx' reject"

所以我的问题是如何知道什么是flusing iptables。

UPADATE 1
更新到稳定的 V 0.10 fail2ban 版本后,问题似乎消失了,但 5 天后问题又开始了。
以前,在 v0.9 重启后,几个小时后问题就开始了。

UPADATE 2
Runningfail2ban-client -d我得到“找不到'filter.d/sshd-ddos'的可访问配置文件”。那是因为我在 jail.conf 中保留了旧的 ssh-ddos 配置。
所以,一个子问题是如果我只是做这个改变是对的(至少没有错误fail2ban-client -d

#filter  = sshd-ddos
filter  = sshd
mode = agressive (as suggested by @sebres)

这是输出fail2ban-client -d

“不,后遗症是因为某些东西是冲洗规则,反之亦然”

我明白,我的英语说得不太流利,我的意思是那是发生某些事情的症状,所以效果。

“那么你真的使用了哪种禁止行动?”

对不起,我对这件事知之甚少。这是 jail.local 的 [Default] 部分中包含的内容吗?

“(例如,你能排除一些由 Contabo 实现的服务,安装或集成在你的 VPS 中,这样做吗?”

我前段时间问过他们,但他们的回答是“......我们正在为我们的客户提供基本的安装......”没有什么技术含量。他们有几个 VPS 服务,我没有看到其他人对此抱怨。

更新 3

第一个 jail.local(来自新的 Webmin/Virtualmin 安装)操作是

action = firewallcmd-ipset[]
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

我改变了

banaction = iptables-multiport                 
banaction_allports = iptables-allports     

前一段时间。
现在我用 firewallcmd-ipset 作为 [DEFAULT] 返回,这是fail2ban-client -d 输出。
我会检查fail2ban.log。.... 几个小时后,问题又来了。

关于 firewallD Webmin 有一个部分定义了区域/规则和工具来管理它们,而不必在 shell 中编写命令。而已。

4

1 回答 1

0

我无法想象 fail2ban 的责任,但要排除它(或者你这边的一些失败的操作被破坏),我们应该看看你的配置......
所以提供你的整个(未修改的)配置转储:

fail2ban-client -d

或至少转储所有监狱的所有行动:

fail2ban-client -d | grep 'action'

现在使用防火墙

我在您的配置和日志摘录(错误消息)中非常确定 iptables。那么你真的使用了哪种禁令行动?

由于“后遗症”,某些东西正在刷新 iptables,例如...

不,后效应存在是因为某些东西是冲洗规则,反之亦然。例如,您可以应用一些“防火墙”脚本来配置 iptables(端口、默认拒绝规则等),由于依赖关系而重新启动某些服务(重新启动或重新加载 iptables),一些脚本错误地实现了敲门,以及许多其他。
如果您无法控制它,我认为找到它并不容易(例如,您是否可以排除某些由安装或集成在您的 VPS 中的 Contabo 实现的服务,这样做?)。

更新 1:

我在您的摘录中没有看到任何错误...删除f2b-proftpd(或刷新输入链)它应该包含:

  • 任何一个<iptables> -D INPUT ... -j f2b-proftpd
  • 甚至<iptables> -F INPUT在动作参数中的某个地方,除了actionstop(仅在关机或重启情况下打算停止)。

但它仅在actionstop预期中可用:

all entries containing removal from INPUT chain (actionstop only):
  <iptables> -D INPUT -p tcp -m multiport --dports ssh -j f2b-sshd
  <iptables> -D INPUT -p tcp -m multiport --dports 10000 -j f2b-webmin-auth
  <iptables> -D INPUT -p tcp -m multiport --dports ftp,ftp-data,ftps,ftps-data -j f2b-proftpd
  <iptables> -D INPUT -p tcp -m multiport --dports smtp,465,submission -j f2b-postfix
  <iptables> -D INPUT -p tcp -m multiport --dports pop3,pop3s,imap,imaps,submission,465,sieve -j f2b-dovecot
  <iptables> -D INPUT -p tcp -m multiport --dports smtp,465,submission,imap,imaps,pop3,pop3s -j f2b-postfix-sasl
  <iptables> -D INPUT -p tcp -m multiport --dports ssh,sftp -j f2b-ssh-ddos

因此我们可以排除fail2ban的责任。
刚才你说“现在使用firewalld” - 在哪里?在您的配置转储中,我iptables-multiport只看到:

['set', 'sshd', 'addaction', 'iptables-multiport']
['set', 'webmin-auth', 'addaction', 'iptables-multiport']
['set', 'proftpd', 'addaction', 'iptables-multiport']
['set', 'postfix', 'addaction', 'iptables-multiport']
['set', 'dovecot', 'addaction', 'iptables-multiport']
['set', 'postfix-sasl', 'addaction', 'iptables-multiport']
['set', 'ssh-ddos', 'addaction', 'iptables-multiport'],

因此,例如,如果 firewald 将重写 iptables 的 INPUT 链(删除 fail2ban 条目),您将准确地捕捉到这个问题。

因此更好地找出您的系统使用哪个主要的网络过滤器并将其用作禁令(或避免重写fail2ban规则,例如将其添加到fail2ban依赖项等)。

于 2019-12-17T16:18:20.933 回答