盒子
盒子
文章目录
  1. 0x00 2018更新
  2. 0x02 防御手段——使用RSA公私钥登陆
  3. 0x03 防御手段——安装denyhosts
  4. 0x04 总结

VPS防止SSH暴力登录尝试攻击

  没想到作为一个梯子和个人小型网页的VPS服务器,居然遭受到来个中国多个IP的SSH暴力登陆尝试攻击,心情复杂。当晚紧急下线服务器,停止了一切服务的提供,由于无法快捷更换IP地址,且原本服务器的MySQL服务异常,无法执行apt-get指令,所以只能选择整个服务器进行重置并更换了服务器机房。
  现在所有功能,除下载功能外,其他均以恢复正常,老域名暂时停止使用。
  接下来,在此讨论一下如何防止SSH暴力登录尝试攻击。

0x00 2018更新

  没错,在17年12月11日,我在复习Linux并尝试修复MySql的时候,无意中发现服务器的日志出现了如下的log(没有截图了,下面的log是我从别的博客搬运过来的)。万万没想到,我一个弱鸡的服务器居然被盯上了。于是下决心重置了服务器并从新搭建,然而并没有阻止他们,估计是盯上我的域名了。

1
2
3
4
5
6
7
8
9
10
Apr 11 11:10:05 kof sshd[18518]: Failed password for root from 1.226.82.197 port 36824 ssh2
Apr 11 11:10:10 kof sshd[18520]: Failed password for root from 1.226.82.197 port 36966 ssh2
Apr 11 11:10:15 kof sshd[18522]: Failed password for root from 1.226.82.197 port 37132 ssh2
Apr 11 11:10:19 kof sshd[18524]: Failed password for root from 1.226.82.197 port 37326 ssh2
Apr 11 11:10:24 kof sshd[18528]: Failed password for root from 1.226.82.197 port 37476 ssh2
Apr 11 11:10:29 kof sshd[18535]: Failed password for root from 1.226.82.197 port 37642 ssh2
Apr 11 11:10:34 kof sshd[18537]: Failed password for root from 1.226.82.197 port 37819 ssh2
Apr 11 11:10:39 kof sshd[18539]: Failed password for root from 1.226.82.197 port 38023 ssh2
Apr 11 11:10:44 kof sshd[18541]: Failed password for root from 1.226.82.197 port 38200 ssh2
......

使用如下指令查看哪些IP地址在尝试登陆我的服务器:

1
sudo grep "Failed password for invalid user" /var/log/auth.log | awk '{print $13}' | sort | uniq -c | sort -nr | more

结果发现,这个IP地址多来自于河北保定,也有来自法国等地的,可见是肉鸡。

# 0x01 防御手段——更改非常用端口
编辑位于/etc/ssh目录下的sshd_config文件,例如改为:

1
2
Port 2333
PermitRootLogin no

保存并重启ssh服务:

1
$ sudo /etc/init.d/ssh restart

0x02 防御手段——使用RSA公私钥登陆

利用xshell的功能,生成RSA公私钥,并把公钥上传服务器。
步骤如下:






将生成的公钥上传至服务器根目录,在根目录新建.ssh目录,并更改sshd_config配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ mkdir .ssh
$ mv id_rsa.pub authorized_keys #其中id_rsa.pub是刚才生成的公钥
$ chmod 400 authorized_keys
$ vim /etc/ssh/sshd_config
####
RSAAuthentication yes #RSA认证
PubkeyAuthentication yes #开启公钥验证
AuthorizedKeysFile %h/.ssh/authorized_keys #验证文件路径
PasswordAuthentication no #禁止密码认证
PermitEmptyPasswords no #禁止空密码
UsePAM no #禁用PAM
####
# 最后保存,重启
$ sudo /etc/init.d/ssh restart

至此,密码登陆失效,只能用私钥登陆。

0x03 防御手段——安装denyhosts

  denyhosts 是 Python 语言写的一个程序,它会分析 sshd 的日志文件,当发现重复的失败登录时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
安装:

1
2
3
4
5
6
7
8
# Debian/Ubuntu:
$ sudo apt-get install denyhosts
# RedHat/CentOS
$ yum install denyhosts
# Archlinux
$ yaourt denyhosts
# Gentoo
$ emerge -av denyhosts

默认配置就可以了,如要个性化设置可以修改 /etc/denyhosts.conf :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ vi /etc/denyhosts.conf
SECURE_LOG = /var/log/auth.log #ssh 日志文件,它是根据这个文件来判断的。
HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件
PURGE_DENY = #过多久后清除已经禁止的,空表示永远不解禁
BLOCK_SERVICE = sshd #禁止的服务名,如还要添加其他服务,只需添加逗号跟上相应的服务即可
DENY_THRESHOLD_INVALID = 5 #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 10 #允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 1 #允许root登陆失败的次数
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /var/lib/denyhosts #运行目录
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES #是否进行域名反解析
LOCK_FILE = /var/run/denyhosts.pid #程序的进程ID
ADMIN_EMAIL = root@localhost #管理员邮件地址,它会给管理员发邮件
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report
AGE_RESET_VALID=5d #用户的登录失败计数会在多久以后重置为0,(h表示小时,d表示天,m表示月,w表示周,y表示年)
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
RESET_ON_SUCCESS = yes #如果一个ip登陆成功后,失败的登陆计数是否重置为0
DAEMON_LOG = /var/log/denyhosts #自己的日志文件
DAEMON_SLEEP = 30s #当以后台方式运行时,每读一次日志文件的时间间隔。
DAEMON_PURGE = 1h #当以后台方式运行时,清除机制在 HOSTS_DENY 中终止旧条目的时间间隔,这个会影响PURGE_DENY的间隔。

查看我的 /etc/hosts.deny 文件,有如下数十条记录:

1
2
3
4
5
6
sshd: 121.18.238.125
sshd: 121.18.238.39
sshd: 110.53.183.227
sshd: 172.247.164.40
sshd: 198.98.50.113
……

使用如下指令统计了一下,总共82条记录,说明我的服务器遭受到多么惨烈的攻击。

1
2
$ sudo cat /etc/hosts.deny | wc -l
82

0x04 总结

虽然也不是什么高深的技术,但保护自己的服务器还是挺重要的,安全第一。

参考贴来源:VPS 防止 SSH 暴力登录尝试攻击 作者:lovelucy

转载说明

转载请注明出处,无偿提供。

支持一下
感谢大佬们的支持