本文最后更新于 266 天前,其中的信息可能已经有所发展或是发生改变。
买了VPS之后,虽说自己这VPS并没有什么机密,不过毕竟是要跑站点的,还是得做的劲量稳定。所以也不得不开始注意安全问题了。
这两天登陆SSH,突然发现个问题,隔了一晚上系统便报告在成功登录前有高达7000多次失败的登陆!
从上面的图,我们可以很明显的看到在上一次成功登入VPS之间有7019次失败登陆,不过还好这几千次暴力破解密码都失败了——因为这里显示上次成功登陆IP就是我自己这台电脑。
因此我得考虑加一些安全措施,大致策略如下:
1.使用SSH Key登陆而非密码,大大加大安全度
2.修改SSH端口,不使用默认的22端口,加大暴力破解者的难度
3.使用DenyHosts封禁多次尝试登陆且失败的IP
4.使用强密码
因为SSH Key我一直在用,强密码也配置了,因此这篇备忘我记录2,3个策略。
修改SSH端口(CentOS 7)
搬瓦工的VPS SSH端口默认就是随机数,不使用22端口,加大了暴力破解难度,所以我的搬瓦工就没怎么受到暴力破解的攻击。
CentOS7的端口修改和6不一样,稍微麻烦一点。
首先我需要配置SELinux,参考了Github的这篇文章:在Linode上的CentOS 7启用SELinux 接下来需要修改配置。
1. 修改 /etc/ssh/sshd_config
(我偏好nano…因为我vi和vim用不上手)
把 #Port 22 的注释去掉然后修改22端口为别的,例如2222
2. 重新启动 sshd
systemctl restart sshd.service
3. 别忙关SSH,修改SELinux
使用以下命令:
semanage port -l | grep ssh #查看当前SElinux 允许的ssh端口 semanage port -a -t ssh_port_t -p tcp xxxx #添加xxxx端口到 SELinux semanage port -l | grep ssh #然后确认一下是否添加进去 #如果成功会输出 <code>ssh_port_t tcp xxxx, 22</code>
4. 修改防火墙
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ nano /etc/firewalld/services/ssh.xml #修改ssh.xml文件 #修改文件内容: 把 <port protocol="tcp" port="22"/> 改成<port protocol="tcp" port="2222"/> #修改文件完成 firewall-cmd –reload #重新加载Firewalld
使用DenyHost防止暴力破解
你会发现,每天会有多条SSH登录失败纪录。那些扫描工具将对你的服务器构成威胁,你必须设置复杂登录口令,并将尝试多次登录失败的IP给阻止掉,让其在一段时间内不能访问该服务器。
用DenyHosts可以阻止试图猜测SSH登录口令,它会分析/var/log/secure等日志文件,当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。
1.下载,解压
# wget http://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz # tar zxvf DenyHosts-2.6.tar.gz # cd DenyHosts-2.6 # yum install python -y //yum安装python # python setup.py install //复制到其他目录中使用 # cd /usr/share/denyhosts/ # cp denyhosts.cfg-dist denyhosts.cfg # cp daemon-control-dist daemon-control2.拷贝默认文件
3.编辑配置文件
# vim denyhosts.cfg //该配置文件结构比较简单,简要说明主要参数如下: PURGE_DENY:当一个IP被阻止以后,过多长时间被自动解禁。可选如3m(三分钟)、5h(5小时)、2d(两天)、8w(8周)、1y(一年); PURGE_THRESHOLD:定义了某一IP最多被解封多少次。即某一IP由于暴力破解SSH密码被阻止/解封达到了PURGE_THRESHOLD次,则会被永久禁止; BLOCK_SERVICE:需要阻止的服务名; DENY_THRESHOLD_INVALID:某一无效用户名(不存在的用户)尝试多少次登录后被阻止; DENY_THRESHOLD_VALID:某一有效用户名尝试多少次登陆后被阻止(比如账号正确但密码错误),root除外; DENY_THRESHOLD_ROOT:root用户尝试登录多少次后被阻止; HOSTNAME_LOOKUP:是否尝试解析源IP的域名; DAEMON_PURGE = 1h 以daemon模式运行时,需要这个参数跟PURGE_DENY配合使用,自动解禁才能生效 大家可以根据上面的解释,浏览一遍此配置文件,然后根据自己的需要稍微修改即可。
4.启动、设置自动启动
# ./daemon-control start //启动 第一种是将DenyHosts作为类似apache、mysql一样的服务,这种方法可以通过 /etc/init.d/denyhosts 命令来控制其状态。方法如下: # cd /etc/init.d # ln -s /usr/share/denyhosts/daemon-control denyhosts # chkconfig --add denyhosts # chkconfig --level 2345 denyhosts on 第二种是将Denyhosts直接加入rc.local中自动启动(类似于Windows中的“启动文件夹”): # echo '/usr/share/denyhosts/daemon-control start' >> /etc/rc.local
这样下来,好了不少。
建议用iptables把不用的端口流量都drop掉。本地服务端口都绑127.0.0.1并用iptables一样drop掉,高危服务端口(ss之类)定期换端口。
感觉ssh强制证书登录不是很有必要,而且有可能因噎废食,设个高位端口和几十位长度的强密码就够。证书登录在手机和平板上很难用。
发现有固定ip的恶意流量也drop他
好高深……………………也是我不入VPS的原因之一-v-
其实。。。很多都能在网上搜索得到 所以VPS不是特别难 著名的搬瓦工VPS是很多人的第一台VPS,也很便宜 可以练手