使用 systemd 沙箱强化 fail2ban

使用 systemd 沙箱强化 fail2ban

我一直在尝试遵循 ArchWiki 关于强化 Fail2Ban 的说明:

https://wiki.archlinux.org/title/Fail2ban#Service_hardening

具体来说,我按照说明创建了一个插入文件并启动了服务。问题是我看到了如下日志条目:

fail2ban.actions        [1500]: NOTICE  [sshd] Ban xxx.xxx.xxx.xxx
fail2ban.utils          [1500]: ERROR   7f76a9d13550 -- exec: { iptables -w -C f2b-sshd -j RETURN >/dev/null 2>&1; } || { iptables -w -N f2b-sshd || true; iptables -w -A f2b-sshd -j RETURN; }
for proto in $(echo 'tcp' | sed 's/,/ /g'); do
{ iptables -w -C INPUT -p $proto -m multiport --dports ssh -j f2b-sshd >/dev/null 2>&1; } || { iptables -w -I INPUT -p $proto -m multiport --dports ssh -j f2b-sshd; }
done
fail2ban.utils          [1500]: ERROR   7f76a9d13550 -- stderr: "Fatal: can't open lock file /run/xtables.lock: Read-only file system"
fail2ban.utils          [1500]: ERROR   7f76a9d13550 -- stderr: "Fatal: can't open lock file /run/xtables.lock: Read-only file system"
fail2ban.utils          [1500]: ERROR   7f76a9d13550 -- stderr: "Fatal: can't open lock file /run/xtables.lock: Read-only file system"
fail2ban.utils          [1500]: ERROR   7f76a9d13550 -- returned 4
fail2ban.actions        [1500]: ERROR   Failed to execute ban jail 'sshd' action 'iptables-multiport' info 'ActionInfo({'ip': 'xxx.xxx.xxx.xxx', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f76b0c713f0>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f76b0c71ab0>})': Error starting action Jail('sshd')/iptables-multiport: 'Script error'

尽管systemctl show fail2ban.service | grep xtables表明/run/xtables.lock已在中列出ReadWritePaths

我推测这是因为服务启动时文件不存在,因此无法以读/写方式挂载到沙盒中。我可以通过运行以下命令来解决这个问题:

sudo touch /run/xtables.lock

并重新启动服务,但每次重新启动服务器时都必须执行此操作(/runtmpfs)。

不确定修复此问题的最佳方法是什么。我以为我可以使用ExecStartPre来运行该touch命令,但似乎它也在沙箱中运行,因此没有写入权限/run

答案1

配置 tmpfiles.d(5) 以在启动时创建该文件。

f /run/xtables.lock 0644 root root

可以以 a 作为前缀来单独 ExecStartPre= 命令+以将其排除在权限相关参数之外。

相关内容