服务器安全篇【ssh安全】

前言

中午吃饭时才注意到腾讯云给我发了很多安全提示(惨无人性啊,一元一个月学生机都有人入侵,根据提示ssh端口再被爆破),上服务器看了下history,记录被清除了,根据腾讯的安全提示找到了相应可疑病毒文件,本地虚拟机做了分析这应该是一个十字符病毒,没看到可疑正在运行进程。亏我还是搞安全的,啪啪打脸,qwq
本来也就是一个测试机,索性直接重置系统了(如果是有各种服务的站点就要头疼了),这里对新重置的ubuntu16.04主机进行一个ssh的安全配置,供个人云主机用户参考~

更换ssh端口

或许你会说,这毫无意义,黑客依然能够发现我的端口,但是,你得注意到,除非你是被盯上了,否则批量自动化脚本在互联网上的爆破攻击,他们不会有耐心去扫描1-65535这么多端口,只会扫描一些常用的端口,将ssh端口更换成30000-40000之间是一个非常棒的做法~

打开配置文件

sudo vi /etc/ssh/sshd_config

找到下面配置

Port 22

将22更改为自己新的端口后别着急,这个时候前往自己云服务器的控制台,找到安全组,添加允许出入得端口,如下图:

服务器安全篇【ssh安全】_第1张图片
服务器安全篇【ssh安全】_第2张图片
添加了端口之后对ssh进行重启操作

sudo service ssh restart

效果:
服务器安全篇【ssh安全】_第3张图片
服务器安全篇【ssh安全】_第4张图片

管理ssh用户

很多ssh爆破问题都出在root用户身上,也许你认为你的密码强度差不多足够了,但不排除依旧被黑客给爆破出来,所以我们需要一个新的用户,去管理系统,比如这样:(ps:指令的具体参数操作自行百度)

    #创建用户
    useradd userA  //创建用户userA
    useradd –e 12/30/2017 userB  //创建userB,指定有效期2017-12-30到期
    useradd –u 600 userC  //创建userC指定用户id为600
    #给与密码
    passwd user1   //无密码用户不能使用此命令。
    #给与可以切换到root的权限
	usermod –g users sudo  //将用户 user1 加入到 sudo组中
	usermod –d /users/us1 user1  //将用户 user1 目录改为/users/us1


	#腾讯云的初始ubuntu用户就是这样权限良好的用户,但是用户名由于使用广泛依旧容易被爆破,我们可以对其更改用户名为非常用用户名比如233wahaha
	usermod –l 233wahaha ubuntu

这样我们就可以在登陆上,如233wahaha用户之后使用

sudo -i

切换到root进行其他操作

下面对root进行拒绝登陆设置

sudo vi /etc/ssh/sshd_config
#找到关键代码
# Authentication:  
LoginGraceTime 120   
PermitRootLogin yes  
StrictModes yes
#更改为
# Authentication:  
LoginGraceTime 120  
PermitRootLogin prohibit-password    
StrictModes yes

拒绝空密码登陆

PermitEmptyPasswords no

连接数及配置权限管理

sudo vi /etc/ssh/sshd_config

找到:

#MaxStartups 10:30:60

更改为:

MaxStartups 10   #10根据自己的需要更改,代表最多同时登陆ssh数量

可以注意到我们的很多操作都是在/etc/ssh/sshd_config进行的,所以对其修改权限我们必须要做限制

chmod 744 /etc/ssh/sshd_config  //对所有非root用户设置只读权限,防止非授权用户修改sshd 服务的安全设置

黑名单白名单操作

hosts.allow和 hosts.deny

服务器默认接受所有的请求连接,这是非常危险的,阻止或允许应用服务仅对某些主机开放,给系统在增加一道安全屏障。这部分设置共涉计到/etc/目录下的两个文件:hosts.allow和 hosts.deny。

将那些明确允许的请求添加到/etc/hosts.allow中。如系统仅允许IP地址为192.168.0.15和10.0.0.11的主机使用 sshd服务,则添加如下内容:

sshd:192.168.0.15 10.0.0.11

将需要禁止使用的信息添加到/etc/hosts.deny中。如对除了在hosts.allow列表中明确允许使用sshd的用户外,所有其他用户都禁止使用sshd服务,则添加如下内容到hosts.deny文件中:

sshd:All

注意:系统对上述两个文件的判断顺序是先检查hosts.allow文件再查看hosts.deny文件,因此一个用户在hosts.allow允许使用网络资源,而同时在hosts.deny中禁止使用该网络资源,在这种情况下系统优先选择使用hosts.allow配置,允许用户使用该网络资源。

使用DenyHosts

对这里可以有更多的利用点,这里介绍一个freebuf上看到的工具,原文点这里

使用DenyHosts软件来设置,其下载地址:

https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz/download

(1)安装cdDenyHosts

# tar-zxvf DenyHosts-2.6.tar.gz # cdDenyHosts-2.6 # pythonsetup.py install

默认是安装到/usr/share/denyhosts目录的。

(2)配置cdDenyHosts

# cd/usr/share/denyhosts/ # cpdenyhosts.cfg-dist denyhosts.cfg # videnyhosts.cfg

PURGE_DENY= 50m #过多久后清除已阻止IP
HOSTS_DENY= /etc/hosts.deny #将阻止IP写入到hosts.deny
BLOCK_SERVICE= sshd #阻止服务名
DENY_THRESHOLD_INVALID= 1 #允许无效用户登录失败的次数
DENY_THRESHOLD_VALID= 10 #允许普通用户登录失败的次数
DENY_THRESHOLD_ROOT= 5 #允许root登录失败的次数
WORK_DIR= /usr/local/share/denyhosts/data #将deny的host或ip纪录到Work_dir中
DENY_THRESHOLD_RESTRICTED= 1 #设定 deny host 写入到该资料夹
LOCK_FILE= /var/lock/subsys/denyhosts #将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务。
HOSTNAME_LOOKUP=NO#是否做域名反解
ADMIN_EMAIL= #设置管理员邮件地址
DAEMON_LOG= /var/log/denyhosts #自己的日志文件
DAEMON_PURGE= 10m #该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间。

(3)设置启动脚本

# cpdaemon-control-dist daemon-control # chownroot daemon-control # chmod700 daemon-control

完了之后执行daemon-contronstart就可以了。

#./daemon-control start

如果要使DenyHosts每次重起后自动启动还需做如下设置:

# ln -s/usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
#chkconfig --add denyhosts #chkconfig denyhosts on#service denyhosts start

可以看看/etc/hosts.deny内是否有禁止的IP,有的话说明已经成功了。

双因子登陆

(1)什么是双因子认证
在这种多重认证的系统中,用户需要通过两种不同的认证程序:提供他们知道的信息(如用户名/密码),再借助其他工具提供用户所不知道的信息(如用手机生成的一次性密码)。这种组合方式常叫做双因子认证或者两阶段验证。
(2)怎么去简单实现双因子认证登陆ssh
提到双因子登陆,或许大家知道的更多的是Google身份密钥管理器,但由于不能备份的原因,我是拒绝使用的,一但手机遗失,你的服务器就永远也上不去了
这里推荐Linux中国17年开发的一个微信小程序,运维密码
发布的具体介绍,点这里
详细的一些操作小程序上有介绍,不多介绍了~

总结

上述操作已经可以屏蔽掉普通站点的绝对多数针对ssh的攻击,对于大规模dos,我只能说能有价值让黑产去dos的,应该不差钱,做个cdn去吧

最后一句话,安全做的再好,也抵不住密码123456,抵制弱密码,从我做起~

你可能感兴趣的:(web运维开发)