运行带有 shorewall 的 Debian stable 防火墙和fail2ban。启动时在fail2ban日志中收到“shorewall not running error”,但已通过以下方式修复
After=network.target
在 /lib/systemd/system/fail2ban.service 中。但是,我在关机或重新启动时仍然收到这些错误。我如何告诉 shorewall 等待fail2ban 完成后再关闭?
答案1
我寻找这个问题的答案已经有一段时间了。 @Munir(在第一个答案的评论中)几乎已经有了。为了确保所做的编辑能够承受软件包升级,请勿编辑 /lib/systemd/system/fail2ban.service,而是使用 systemd 的覆盖机制。例如创建一个文件/etc/systemd/system/fail2ban.service.d/override.conf。在该文件中,放入
[Unit]
Requires=shorewall.service
After=shorewall.service
这会导致 shorewall.service 被添加到 Requires 和 After(除了 /lib/systemd/system/fail2ban.service 中可能指定的内容之外),并且在升级fail2ban时不会被覆盖。
就我而言,我已经设置了一个私有 reprepro 存储库,因此我创建了一个插入此文件的包(并且还在 /etc/fail2ban/jail.d/local.conf 添加了我的标准fail2ban配置)并且具有包依赖项在fail2ban 和shorewall 上。将该软件包命名为 f2b-shorewall。要在服务器上进行此操作,我所要做的就是安装 f2b-shorewall,它将引入fail2ban 和 shorewall,并且我的标准fail2ban 监狱配置已经存在,只需要配置 shorewall(通常是无论如何,每个服务器都不同)。
答案2
为什么不在应该以fail2ban
开头的服务文件中显式添加?shorewall
After=shorewall.service
答案3
我在 Debian Stretch 和最新的 Shorewall 中找到了这个:
[Unit]
Description=Fail2Ban Service
Documentation=man:fail2ban(1)
After=network.target iptables.service firewalld.service shorewall.service
PartOf=iptables.service firewalld.service shorewall.service