简介
Fail2ban 通过扫描系统日志文件,例如 /var/log/pwdfail or /var/log/apache/error_log 并从中找出多次尝试登录失败的 IP 地址,并将该 IP 地址加入防火墙的拒绝访问列表中。它通过更新系统的防火墙规则,拒绝来自这些 IP 地址的新连接。Fail2Ban 开箱即用,可以读取许多标准的日志文件,如 sshd 和 Apache 的日志文件,也可以轻松配置为读取任何你选择的日志文件。
一、创建配置文件
注意:
- 文件内不能有中文,否则会加载配置失败
- 如果修改过端口号,则设置 port = 端口号
mkdir -p /home/docker/fail2ban/data/jail.d && \
cat > /home/docker/fail2ban/data/jail.d/sshd.conf <<EOF
[sshd]
enabled = true
chain = INPUT
port = ssh
filter = sshd[mode=aggressive]
logpath = /var/log/secure
maxretry = 3
bantime = 3600
findtime = 600
EOF
配置说明:
enabled :是否开启检测
port:检查的端口
maxretry:最大失败次数, 在检查时间内达到次数就拦截
bantime:拦截后禁止访问的时间,单位:秒
findtime:检查的时间访问,单位:秒
logpath: 扫描的日志文件,fail2ban按行扫描此文件,根据filter规则匹配失败的项目并统计
二、启动 fail2ban
docker run -d \
--name fail2ban \
--network host \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
-v /home/docker/fail2ban/data:/data \
-v /var/log:/var/log:ro \
-e TZ=Asia/Shanghai \
--restart always \
crazymax/fail2ban:latest
三、相关命令
一个配置规则可以称为一个监狱,例如上面的 sshd 规则就是一个监狱。
1. 查看 fail2ban 状态
可以查看到 fail2ban 当前配置了哪些监狱。
docker exec -it fail2ban fail2ban-client status
2. 检验特定监狱的状态(如 sshd)
查看当前监狱的情况,如被封禁的 ip 列表和总数等。
docker exec -it fail2ban fail2ban-client status sshd
3. 手动封禁 ip
手动封禁 ip,使其不能与监狱配置的特定端口进行连接。
docker exec -it fail2ban fail2ban-client set sshd banip <ip>
4. 手动解禁 ip
docker exec -it fail2ban fail2ban-client set sshd unbanip <ip>
5. 查看防火墙配置
docker exec -it fail2ban iptables -nvL
四、结果
使用 fail2ban 之前,一天不到有接近 2000 次的尝试暴力。
使用之后,几天不登录也不到 1000 次暴力。
当然这并不能代表什么,但是可以作为一个对 ssh 基础保护的参考,更为保险的当然是修改 ssh 的端口号和设置更安全的密码。
虽然阿蛮君的密码自认为已经足够安全,但是不免出现了密码泄露的情况,所以导致了服务器被入侵的情况。