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