服务器安全篇【ssh安全】
前言中午吃饭时才注意到腾讯云给我发了很多安全提示(惨无人性啊,一元一个月学生机都有人入侵,根据提示ssh端口再被爆破),上服务器看了下history,记录被清除了,根据腾讯的安全提示找到了相应可疑病毒文件,本地虚拟机做了分析这应该是一个十字符病毒,没看到可疑正在运行进程。亏我还是搞安全的,啪啪打脸,qwq本来也就是一个测试机,索性直接重置系统了(如果是有各种服务的站点就要头疼了),这里对新...
前言
中午吃饭时才注意到腾讯云给我发了很多安全提示(惨无人性啊,一元一个月学生机都有人入侵,根据提示ssh端口再被爆破),上服务器看了下history,记录被清除了,根据腾讯的安全提示找到了相应可疑病毒文件,本地虚拟机做了分析这应该是一个十字符病毒,没看到可疑正在运行进程。亏我还是搞安全的,啪啪打脸,qwq
本来也就是一个测试机,索性直接重置系统了(如果是有各种服务的站点就要头疼了),这里对新重置的ubuntu16.04主机进行一个ssh的安全配置,供个人云主机用户参考~
更换ssh端口
或许你会说,这毫无意义,黑客依然能够发现我的端口,但是,你得注意到,除非你是被盯上了,否则批量自动化脚本在互联网上的爆破攻击,他们不会有耐心去扫描1-65535这么多端口,只会扫描一些常用的端口,将ssh端口更换成30000-40000之间是一个非常棒的做法~
打开配置文件
sudo vi /etc/ssh/sshd_config
找到下面配置
Port 22
将22更改为自己新的端口后别着急,这个时候前往自己云服务器的控制台,找到安全组,添加允许出入得端口,如下图:
添加了端口之后对ssh进行重启操作
sudo service ssh restart
效果:
管理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,抵制弱密码,从我做起~
更多推荐
所有评论(0)