VPS防止SSH暴力登录尝试攻击
2018.01.21
Jiacy
技术
 热度
℃
没想到作为一个梯子和个人小型网页的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
转载请注明出处,无偿提供。