如何在Docker容器里开启fail2ban防止SSH暴力破解

一、前提介绍

Docker容器里开启了SSH服务,但是发现有大量的暴力破解进程,需要使用fail2ban防止SSH暴力破解,将攻击的IP拉黑。

二、原因分析

但是直接安装fail2ban,和没有使用容器的主机一样配置时,发现并不会生效。

因为在使用docker容器时,开启了SSH服务,但是因为容器里没有开启rsyslog,所以fail2ban依赖的/var/log/auth.log日志文件无法生成。

同时因为容器没有增加特权,也无法访问一些内核功能,无法使用iptables,比如输入iptables -nL,会报下面的错误:

1
2
can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

三、解决方案

(一)为容器增加特权

下面是我自己创造的一个容器示列,添加privileged

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3.1'

services:
ubuntu:
image: registry.cn-hangzhou.aliyuncs.com/yasin/dev-env-ubuntu:20.04
container_name: ubuntu
privileged: true
restart: always
ports:
- "10022:22"
volumes:
- ./root:/root
entrypoint:
- /run.sh

(二)安装并启动rsyslog

1
2
3
apt update
apt install rsyslog -y
rsyslogd

启动完成后,可以发现已经生成了/var/log/auth.log日志文件。

(三)安装fail2ban

1
apt install fail2ban -y

(四)配置SSH规则

这里请自行搜索fail2ban配置规则,下面是一个SSH的规则示列:

[sshd]               
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 86400
bantime = 86400
action = iptables[name=SSH, port=ssh, protocol=tcp]

将上面的内容保存为文件jail.local,复制到/etc/fail2ban/jail.d/目录。

(五)启动fail2ban

1
service fail2ban start

启动完成后,如果还有暴力破解的进程,可以使用fail2ban-client status sshd,查看策略是否生效:

1
2
3
4
5
6
7
8
9
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 226
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 137.184.42.119

fail2ban实际上是自动为我们创建了iptables的规则,这时候使用iptables -nL,可以看到该IP已经被我们自动拉黑,拒绝所有连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain f2b-SSH (1 references)
target prot opt source destination
REJECT all -- 137.184.42.119 0.0.0.0/0 reject-with icmp-port-unreachable
RETURN all -- 0.0.0.0/0 0.0.0.0/0

四、设置开机启动

为了使我们的容器能够开机自动启动fai2ban,我们可以修改容器的启动入口,比如我的容器开机入口/run.sh

1
2
3
4
#!/bin/bash
/usr/sbin/rsyslogd
service fail2ban start
/usr/sbin/sshd -D

如何在Docker容器里开启fail2ban防止SSH暴力破解
https://www.shangyexin.com/2021/10/27/docker-fail2ban/
作者
Yasin
发布于
2021年10月27日
许可协议