这篇博客适合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
发表回复