SSH登录安全与Fail2ban加固
查看:SSH暴力破解/爆破次数
- RedHat 和 CentOS 存储在 /var/log/secure
1.查看 root 用户登录成功的IP及次数看看是否有不熟悉的 IP 地址
grep "Accepted password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
2.查看尝试暴力破解 root 账户的IP及次数
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
3.查看尝试暴力破解用户名的IP及次数
grep "Failed password for invalid user" /var/log/secure | awk '{print $13}' | sort | uniq -c | sort -nr | more
- Debian 和 Ubuntu 存储在 /var/log/auth.log
#查看所有尝试暴力破解的IP及次数
grep "Failed password for" /var/log/auth.log | awk '{print $(NF-3)}' | sort -n | uniq -c | sort -n
#看一下暴力猜用户名的统计信息
grep "Failed password for invalid user" /var/log/auth.log | awk '{print $13}' | sort | uniq -c | sort -n | more
#查看猜的用户名
sudo lastb|awk '{print $1}' |sort |uniq -c |sort -n -k 1 |tail
Fail2ban
一条龙命令
# 安装
apt -y install fail2ban && \
# 复制供编辑的配置文件
cp /etc/fail2ban/jail.{conf,local}
#添加自定义配置
sed '/^\[sshd\]$/a\
ignoreip = 127.0.0.1/8\
bantime = -1 #封禁时间:永久;365d\
findtime = 20m #多长时间内\
maxretry = 5\
' /etc/fail2ban/jail.local -i
service fail2ban restart
安装 Fail2ban
由于 Fail2ban 依赖于 Python,需要确保 Python 版本 ≥ 2.6:
python -V
安装 Fail2ban:
apt -y install fail2ban
————安装完成后即已开始工作,且已加入开机启动项(sshd也已经工作)
配置完成后,fail2ban 会监控 SSH 登录日志: 当发现同一 IP 地址在 5 分钟内尝试登录失败超过 5 次时,就会将该 IP 地址自动屏蔽 1 小时。
Fail2ban 服务端:配置
修改基本配置
Fail2ban 所有的配置文件保存都在 /etc/fail2ban/ 中。 主配置文件是 jail.conf,它包含一组预定义的过滤器,要修改配置,不能在此文件上修改,只需在同一目录下创建一个名为 jail.local 的新配置文件,并根据需求进行修改,修改后的配置会覆盖默认配置。
- 创建
jail.conf的副本jail.local:复制一份自己的
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- 编辑复制的 jail.local配置文件:
vim /etc/fail2ban/jail.local
配置文件中的 [DEFAULT] 部分包含 Fail2ban 最基本的规则,以下是部分默认配置:
[DEFAULT]
# 忽略以下IP地址,多个IP用空格分隔
ignoreip = 127.0.0.1/8
# IP被禁的秒数:如果未指定后缀,则默认为秒。默认情况下,`bantime`值设置为10m:10分钟。
bantime = 365d
# 若同一IP在findtime秒内发生了maxretry次尝试,则会被禁bantime秒。默认10m
findtime = 30m
# 同一IP被禁之前的尝试次数
maxretry = 3
若使用以下内容,需要替换原有配置:

注: 如认为60秒内失败2次过于严格,可根据使用习惯将maxretry设置为稍大一点的数值,越小安全性越高
默认配置已经能够满足大多数需求,可以不用再做修改。若有特殊需求,则需要修改其配置。
#添加自定义配置
sed '/^\[sshd\]$/a\
ignoreip = 127.0.0.1/8\
bantime = -1 #封禁时间:永久;365d\
findtime = 20m #多长时间内\
maxretry = 5\
' /etc/fail2ban/jail.local -i
service fail2ban restart
# CentOS
#logpath = /var/log/secure
# Ubuntu
# logpath = /var/log/auth.log
配置其它服务
Fail2ban 还带有其它预定义的过滤器,用于各种服务,如 SSH、Apache、Nginx、Squid、Named、Mysql、Nagios 等。这些服务的过滤器默认为禁用状态,要启用服务,只需要在对应的区域中添加 enabled = true 这一行即可,禁用服务时将 true 改为 false 或删除这一行即可。
以 Apache 服务为例,在其对应的 [apache-auth] 区域中:
[apache-auth]
enabled = true # 要开启过滤器只需要添加这一行
port = http,https
logpath = %(apache_error_log)s
重启 Fail2ban
修改完配置后需要重启服务才能生效:
service fail2ban restart
验证规则是否生效
使用 iptables 命令来查看 Fail2ban 添加的规则:
iptables -L
通过几次故意登录失败的尝试,查看 Fail2ban 的日志文件:
cat /var/log/fail2ban.log
查看已启用的过滤列表:
fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
查看过滤列表的状态,以 SSH 服务为例:
fail2ban-client status sshd
Fail2ban 客户端:fail2ban-client
Fail2ban 附带了一个名为的命令行工具fail2ban-client,您可以使用它与 Fail2ban 服务进行交互。
要查看所有可用选项,请使用以下选项调用命令-h:
fail2ban-client -h
此工具可用于禁止/取消禁止 IP 地址、更改设置、重新启动服务等。这里有一些例子:
获取服务器的当前状态:
sudo fail2ban-client status检查监狱状态:
sudo fail2ban-client status sshd取消禁止 IP(拿自己IP测试时用这个解封):
sudo fail2ban-client set sshd unbanip 11.22.33.44禁止IP:
sudo fail2ban-client set sshd banip 11.22.33.44
将已被禁的 IP 解禁,以 SSH 服务为例:
fail2ban-client set sshd unbanip 192.168.1.1
#测试正则匹配:怎么满足规则触发的
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf --help
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf --print-all-matched