Linux服务器防止暴力破解ssh的方法
介绍4个方法:
一:限制ssh密码错误次数
例如某个ip在10分钟内输错3次,禁止1个小时再登录,这样可以防止ssh暴力破解。fail2ban 是一个能够自动化保护服务器免受暴力破解攻击的工具,在配置fail2ban之前,检查服务器是否有这2个文件(一般都存在):
1,服务器是否存在/var/log/auth.log,如果不存在,请先手动创建一个:
sudo touch /var/log/auth.log
2,是否存在/etc/rsyslog.conf文件,并且里面包含下面这行(一般是包含下面这行):
auth,authpriv.* -/var/log/auth.log
/etc/rsyslog.conf文件是系统日志配置的核心文件,如果它不存在,可能需要重新安装 rsyslog ,重新安装 rsyslog:
sudo apt install --reinstall rsyslog
这样就会有/etc/rsyslog.conf文件了。
检查前面两步没问题的话,可以进入主题了。
以下是配置 fail2ban 来限制 SSH 密码错误次数的步骤:
步骤 1:安装 fail2ban
大多数 Linux 发行版都可以通过包管理器安装 fail2ban
。对于基于 Debian 的系统:
sudo apt update
sudo apt install fail2ban
步骤 2:配置 SSH 监控
fail2ban
默认包含 SSH 监控的 jail 配置文件。首先,创建一个本地配置文件,以避免直接修改默认配置文件:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
步骤 3:编辑配置文件
编辑 /etc/fail2ban/jail.local
文件:
sudo vi /etc/fail2ban/jail.local
找到 [sshd]
部分,并进行如下配置:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
ignoreip = 127.0.0.1/8 ::1 192.168.1.100
上述配置的解释:
enabled = true
:启用 sshd 监控。port = ssh
:指定 SSH 端口(22),如果你在sshd_config
中更改了 SSH 的端口号,这里需要修改成相同的端口号。filter = sshd
:使用默认的 sshd 过滤器。logpath = /var/log/auth.log
:指定 SSH 登录尝试的日志文件路径。maxretry = 3
:在 findtime 时间内允许的最大失败次数。bantime = 3600
:禁止登录的时间(以秒为单位),这里设置为 1 小时。如果要永久禁止,设置为-1
。findtime = 600
:在 findtime 时间窗口(以秒为单位)内,最多允许maxretry
次失败尝试,这里设置为 10 分钟。ignoreip = 127.0.0.1/8 ::1
192.168.1.100:需要加入白名单的 IP 地址,可以添加多个 IP 地址或子网,使用空格分隔。如果不需要可不用加这行。
步骤 4:重启 fail2ban 服务
完成配置后,重启 fail2ban
服务以应用更改:
sudo systemctl restart fail2ban
步骤 5:检查 fail2ban 状态
确保 fail2ban
正常运行并监控 SSH:
sudo fail2ban-client status sshd
这将显示 sshd
jail 的当前状态,包括当前被禁止的 IP 地址列表。
步骤 6:手动解除封禁
使用以下命令解除特定 IP 地址的封禁:
sudo fail2ban-client unban IP_ADDRESS
将 IP_ADDRESS
替换为需要解除封禁的 IP 地址。
附加步骤:测试 fail2ban
尝试从另一个终端或计算机进行 SSH 登录,并故意输入错误的密码,直到触发禁止规则。然后检查 fail2ba
n 是否正确地禁止了 IP。
通过上述步骤,fail2ban
将会在 10 分钟内检测到超过 3 次失败的 SSH 登录尝试,并禁止该 IP 地址 1 小时。
二:修改ssh默认端口
编辑/etc/ssh/sshd_config
sudo vi /etc/ssh/sshd_config
找到以下行:
#Port 22
修改配置,将前面的注释去掉,22端口更改为别的,这里以8888举例:
Port 8888
保存并退出编辑器,重启 SSH 服务:
sudo systemctl restart sshd
此后使用ssh登录时,需要更改端口登录:
ssh -p 8888 user@server
三:防火墙配置只允许某个ip可以ssh登录
以UFW
为例,例如只允许 192.168.1.2 可以 ssh
sudo ufw allow from 192.168.1.2 to any port 22
将 192.168.1.2 替换成自己的ip,ssh默认使用22端口,如果你修改了ssh端口号,将命令里面的22替换成修改后的端口号。
四:使用密钥登录,并禁用密码登录
该方法在另一篇文章中有介绍,点击下方查看: