原本觉得,我的服务器上就一个小博客,都没什么人访问,谁会来黑我呢?所以一直对自己服务器的安全这块考虑的很少,直到踩坑吃闷亏之后,才追悔莫及啊!其实有不少商业黑客,批量扫描网络上的IP端口,利用一些已知常见的漏洞来攻入你的服务器,有的删除数据之后向你勒索(比如比特币),有的用你的服务器做挖矿机或者用你的服务器在作为肉鸡去攻击其他人的服务器。第一种情况一般比较发现,后面两种情况你可能被黑了很久都不自知。。。
而有很多简单的举措,就能从一定程度上防止这些结果的发生,毕竟这些商业黑客也注重时间和效率,一般只会利用常见的漏洞来入侵别人的机器。【当然如果你得罪人,导致有人刻意要黑你的机器,那就另当别论了。】
一、配置普通用户,开启sodu权限,禁用root登录
1 | addgroup developers |
然后编辑 /etc/sudoers
,添加如下内容:
1 | silov ALL=(ALL:ALL) ALL |
以上,新用户组 development
以及新用户 silov
创建成功。并为用户 silov
开启 sudo
权限。
退出ssh 并使用 silov 用户登录,执行:
1 | sudo vim /etc/ssh/sshd_config |
修改如下内容
1 | PermitRootLogin yes //原内容 |
并执行:
1 | sudo service ssh restart |
或者:
1 | sudo /etc/init.d/ssh restart |
然后会发现 root 用户无法使用 ssh 登录服务器了~ 完成。
二、更换登录端口,配置阿里云安全组
修改文件 /etc/ssh/sshd_config
如下内容
1 | Port 16000 |
并执行:
1 | sudo service ssh restart |
或者:
1 | sudo /etc/init.d/ssh restart |
即可修改。然后登录 ssh 使用 -p
参数即可,如:
1 | ssh -p 16000 username@your_ip |
三、配置 SSH 密钥,禁用密码登录,并定期更细密钥
四、修改 Redis 默认端口,禁止外网访问
Redis 默认情况下,会绑定在
0.0.0.0:6379
,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。
入侵特征:
1.Redis 可能执行过FLUSHALL
方法,整个 Redis 数据库被清空
2.在 Redis 数据库中新建了一个名为crackit
(网上流传的命令指令) 的键值对,内容为一个 SSH 公钥。
3.在/root/.ssh
文件夹下新建或者修改了authorized_keys
文件,内容为 Redis 生成的 db 文件,包含上述公钥
如果你的 Redis 只对本机提供服务,只需修改 redis.conf
,绑定本地IP即可:
1 | bind 127.0.0.1 |
如果你的 Redis 有对其他机器提供服务,那么就需要做一些其他的安全措施:
1. 设置 Redis 访问密码
1 | # redis.conf 文件 |
2. 禁止一些高危命令
1 | # redis.conf 文件 |
3. 以低权限运行 Redis 服务
为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
4. 修改执行端口
例如为redis分配一个8888端口,操作步骤如下:
1、
$REDIS_HOME/redis.conf
重新复制一份,重命名为redis8888.conf
。
2、 打开redis8888.conf
配置文件,找到port 6379
这行,把 6379 改为 8888。
3、把redis8888.conf
移到$REDIS_HOME/redis-svrs/my_dir
目录下( my_dir 为自己新建)。
4、启动 redis 服务:redis-server /home/redis/redis-2.4.15/redis-svrs/my_dir/redis8888.conf &
5、通过ps -x | grep redis
查看进程,在输出的信息中会看到/home/redis/redis-2.4.15/redis-svrs/my_dir/redis8888.conf
6、redis-cli -p 8888
, 测试端口是否创建成功。
五、使用 RDS 替代本机安装的数据库服务
六、定期备份快照
七、禁用 PING
1 | cd /etc |
八、网站业务开启 HTTPS
具体参考 升级 HTTPS 和 HTTP2