我的VPS初期手册:SSH登陆安全相关

发布于 / VPS / 3 条评论

买了VPS之后,虽说自己这VPS并没有什么机密,不过毕竟是要跑站点的,还是得做的劲量稳定。所以也不得不开始注意安全问题了。

这两天登陆SSH,突然发现个问题,隔了一晚上系统便报告在成功登录前有高达7000多次失败的登陆!

login

从上面的图,我们可以很明显的看到在上一次成功登入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防止暴力破解

当你的linux服务器暴露在互联网之中,该服务器将会遭到互联网上的扫描软件进行扫描,并试图猜测SSH登录口令。
你会发现,每天会有多条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

这样下来,好了不少。

参考:使用DenyHosts防止SSH暴力破解

转载原创文章请注明,转载自: Cysime Moflu » 我的VPS初期手册:SSH登陆安全相关

  1. avatar

    建议用iptables把不用的端口流量都drop掉。本地服务端口都绑127.0.0.1并用iptables一样drop掉,高危服务端口(ss之类)定期换端口。
    感觉ssh强制证书登录不是很有必要,而且有可能因噎废食,设个高位端口和几十位长度的强密码就够。证书登录在手机和平板上很难用。
    发现有固定ip的恶意流量也drop他

  2. avatar

    好高深……………………也是我不入VPS的原因之一-v-

    1. avatar
      @BabyBichu 其实。。。很多都能在网上搜索得到 所以VPS不是特别难 著名的搬瓦工VPS是很多人的第一台VPS,也很便宜 可以练手