在 docker 容器中为 ssh 服务器正确配置 fail2ban

在 docker 容器中为 ssh 服务器正确配置 fail2ban

我有一个基于配置的 fail2ban。我正在运行一个运行 SSH 服务的容器,并且我看到了很多“奇怪”的连接。我已将 docker 设置为将容器的日志发送到 Systemd 的日志,并且我将其用作 fail2ban 的源。这是我在 F2B 中使用的过滤器:

[sshd_docker]
enabled = true
port    = 22
filter = sshd[__prefix_line="^\s*\S+\s+[^[]+\[\w+\]:[^\]]+\]:\s+", __pref="", journalmatch="CONTAINER_NAME=sshdocker"]
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="DOCKER-USER"]

事实上,这个过滤器是有效的,因为我可以在 IPtables 中看到以下内容:

# iptables -t filter -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt   source               destination
DOCKER-USER  all  --  anywhere             anywhere
[....]

# iptables -t filter -L DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source            destination
f2b-sshd_docker  tcp  --  anywhere    anywhere   multiport dports ssh
[....]

#iptables -t filter -L f2b-sshd_docker
Chain f2b-sshd_docker (1 references)
target     prot opt source       destination
REJECT     all  --  96.9.168.71  anywhere   reject-with icmp-port-unreachable
REJECT     all  --  94.96.68.78  anywhere   reject-with icmp-port-unreachable
[....]

我认为 fail2ban 正确地设置了 iptables 中的链,并且正确地更新了它们。但是,尽管被禁止,我仍然在容器的日志中看到传入连接通过(https://pastebin.com/K3EwQMGG)。

我究竟做错了什么?

答案1

我不是 Docker 专家,但如果连接针对的是机器本身,您可能应该将 iptables 规则添加到 INPUT 链而不是 FORWARD 链。但对于 Docker 来说,这可能有所不同...

相关内容