关于阿里云服务器(ECS)安全,一些简单而又必须做的事

原本觉得,我的服务器上就一个小博客,都没什么人访问,谁会来黑我呢?所以一直对自己服务器的安全这块考虑的很少,直到踩坑吃闷亏之后,才追悔莫及啊!其实有不少商业黑客,批量扫描网络上的IP端口,利用一些已知常见的漏洞来攻入你的服务器,有的删除数据之后向你勒索(比如比特币),有的用你的服务器做挖矿机或者用你的服务器在作为肉鸡去攻击其他人的服务器。第一种情况一般比较发现,后面两种情况你可能被黑了很久都不自知。。。

而有很多简单的举措,就能从一定程度上防止这些结果的发生,毕竟这些商业黑客也注重时间和效率,一般只会利用常见的漏洞来入侵别人的机器。【当然如果你得罪人,导致有人刻意要黑你的机器,那就另当别论了。】

一、配置普通用户,开启sodu权限,禁用root登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
addgroup developers
>Adding group `developers' (GID 1000) ...
>Done.
adduser silov --gid 1000
>Adding user `silov' ...
>Adding new user `silov' (1000) with group `developers' ...
>Creating home directory `/home/silov' ...
>Copying files from `/etc/skel' ...
>Enter new UNIX password:
>Retype new UNIX password:
>passwd: password updated successfully
>Changing the user information for silov
>Enter the new value, or press ENTER for the default
> Full Name []: Silov
> Room Number []:
> Work Phone []:
> Home Phone []:
> Other []:
>Is the information correct? [Y/n]Y

然后编辑 /etc/sudoers ,添加如下内容:

1
2
silov   ALL=(ALL:ALL) ALL
%developers ALL=(ALL:ALL) ALL

以上,新用户组 development 以及新用户 silov 创建成功。并为用户 silov 开启 sudo 权限。

退出ssh 并使用 silov 用户登录,执行:

1
sudo vim /etc/ssh/sshd_config

修改如下内容

1
2
PermitRootLogin yes //原内容
PermitRootLogin no //修改后

并执行:

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
2
# redis.conf 文件
requirepass mypassword
2. 禁止一些高危命令
1
2
3
4
# redis.conf 文件
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
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
2
3
4
5
6
7
8
cd /etc
sudo chmod +w sysctl.conf
sudo vim sysctl.conf

#文件尾部追加net.ipv4.icmp_echo_ignore_all = 1
#保存退出
sudo chmod -w sysctl.conf
sudo sysctl -p

八、网站业务开启 HTTPS

具体参考 升级 HTTPS 和 HTTP2