使用fail2ban来保护vps的ssh登录

6–9 分钟

这篇博客适合debian系的linux系统

前言

保护vps的ssh登录,最好的方式应该只允许密钥登录,但是如果用密钥登录的话,分发密钥到我的每个机器太麻烦了,所以我现在选择fail2ban来保护ssh登录.

1. 先检查系统有没有/var/log/auth.log这个文件

auth.log这个文件是系统来保存ssh登录成功和失败日志的,有些系统默认没有,如果没有,请执行以下命令

# 安装rsyslog
sudo apt install rsyslog
sudo systemctl start rsyslog
sudo systemctl enable rsyslog

# 重启ssh的守护进程
sudo systemctl restart sshd

# 下载fail2ban
sudo apt install fail2ban

2. 编辑fail2ban的配置文件/etc/fail2ban/jail.local

一个配置文件的例子如下

[DEFAULT]
ignoreip = 127.0.0.1/8

[sshd]

enabled = true port = 22 filter = sshd logpath = /var/log/auth.log bantime = 1mon findtime = 60m maxretry = 3 action = hostsdeny

参数说明如下:

ignoreip:配置忽略检测的 IP (段),如有多个用空格隔开
enabled:配置是否启用此 section 的的扫描监控
port:配置服务端口,如果 SSH 使用非默认端口 22,要修改为实际使用端口
filter:配置使用的匹配规则文件(位于 /etc/fail2ban/filter.d 目录中)
logpath:配置要扫描的日志文件路径
bantime:配置 IP 封禁的持续时间(秒或时间缩写格式:years/months/weeks/days/hours/minutes/seconds)
findtime:配置从当前时间的多久之前开始计算失败次数,也可以看作是一个ip地址在此findtime时间内尝试错误maxretry后会被封禁,
这个值不宜设置太小,因为别人黑客攻击机器的频率不会设置太快,
只有你把这个findtime查找窗口设置大一些才有可能封禁这个黑客机器的IP(秒或时间缩写式:years/months/weeks/days/hours/minutes/seconds)
maxretry:配置在 findtime 时间内发生多少次失败登录然后将 IP 封禁。
action:配置封禁 IP 的手段(位于 /etc/fail2ban/action.d 目录中),可通过 iptables、firewalld 或者 TCP Wrapper 等,此处设置为 hostsdeny 代表使用 TCP Wrapper

编写完配置文件后重启fail2ban使得配置文件生效

sudo systemctl restart fail2ban

3. 查看fail2ban的状态

使用此命令查看fail2ban封禁的IP地址列表

fail2ban-client status sshd

4. 解封IP

# 解封所有IP
fail2ban-client unban --all
# 解封指定IP
# fail2ban-client unban <IP> ... <IP>
fail2ban-client unban 1.1.1.1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注