阿里云轻量级/ECS之纯净环境配置(附Caddy)

阿里云盾/云监控的建设是一个庞大且系统的工程,包括但不限于对公网流量的检测和对疑似节点的Replay attack,据官方解释,该云盾通过安装在服务器上轻量级Agent与云端威胁情报联动,保护服务器免受网站后门的威胁,同时对于可疑的登录事件进行实时告警,增强服务器的安全防护基线。与此同时,前者又会在系统中产生 Alibaba.Security.Heimdall 的访问记录,获取用户搭建网站的敏感信息,云盾会对从IDC机房入口的流量做分析,自动对流量进行漏洞分析与测试。所以,打造一个较为纯净的运维环境是十分必要的。

卸载云盾

1
2
3
4
curl -sSL http://update.aegis.aliyun.com/download/quartz_uninstall.sh | sudo bash
sudo rm -rf /usr/local/aegis
sudo rm /usr/sbin/aliyun-service
sudo rm /lib/systemd/system/aliyun.service

代码备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/bin/bash

#check linux Gentoo os
var=`lsb_release -a | grep Gentoo`
if [ -z "${var}" ]; then
var=`cat /etc/issue | grep Gentoo`
fi

if [ -d "/etc/runlevels/default" -a -n "${var}" ]; then
LINUX_RELEASE="GENTOO"
else
LINUX_RELEASE="OTHER"
fi

stop_aegis(){
killall -9 aegis_cli >/dev/null 2>&1
killall -9 aegis_update >/dev/null 2>&1
killall -9 aegis_cli >/dev/null 2>&1
printf "%-40s %40s\n" "Stopping aegis" "[ OK ]"
}

stop_quartz(){
killall -9 aegis_quartz >/dev/null 2>&1
printf "%-40s %40s\n" "Stopping quartz" "[ OK ]"
}

remove_aegis(){
if [ -d /usr/local/aegis ];then
rm -rf /usr/local/aegis/aegis_client
rm -rf /usr/local/aegis/aegis_update
fi
}

remove_quartz(){
if [ -d /usr/local/aegis ];then
rm -rf /usr/local/aegis/aegis_quartz
fi
}


uninstall_service() {

if [ -f "/etc/init.d/aegis" ]; then
/etc/init.d/aegis stop >/dev/null 2>&1
rm -f /etc/init.d/aegis
fi

if [ $LINUX_RELEASE = "GENTOO" ]; then
rc-update del aegis default 2>/dev/null
if [ -f "/etc/runlevels/default/aegis" ]; then
rm -f "/etc/runlevels/default/aegis" >/dev/null 2>&1;
fi
elif [ -f /etc/init.d/aegis ]; then
/etc/init.d/aegis uninstall
for ((var=2; var<=5; var++)) do
if [ -d "/etc/rc${var}.d/" ];then
rm -f "/etc/rc${var}.d/S80aegis"
elif [ -d "/etc/rc.d/rc${var}.d" ];then
rm -f "/etc/rc.d/rc${var}.d/S80aegis"
fi
done
fi

}

stop_aegis
stop_quartz
uninstall_service
remove_aegis
printf "%-40s %40s\n" "Uninstalling aegis" "[ OK ]"

remove_quartz
printf "%-40s %40s\n" "Uninstalling aegis_quartz" "[ OK ]"

屏蔽云盾IP

检查服务器记录时发现一堆Alibaba.Security.Heimdall的访问记录,查询后发现是云盾。

根据官方介绍:
云盾会通过公网模拟黑客入侵攻击,进行安全扫描。所以服务器有安全防护时,需要对云盾扫描ip进行放行。
原方法:使用 UFW / iptables,注意:如果已有接受80端口之类的规则,新增的拒绝IP规则在其后将不会生效。所以要在/etc/ufw/before.rules设置。
sudo nano 编辑此文件并找到 # End required lines,在其后添加:

1
2
3
4
5
6
7
# Block Ali Yun Dun  https://help.aliyun.com/knowledge_detail/37436.html

-A ufw-before-input -s 140.205.201.0/24 -j DROP
-A ufw-before-input -s 140.205.225.0/24 -j DROP
-A ufw-before-input -s 106.11.222.0/23 -j DROP
-A ufw-before-input -s 106.11.224.0/24 -j DROP
-A ufw-before-input -s 106.11.228.0/22 -j DROP

保存后运行 sudo ufw reload。

删除阿里云登录界面欢迎信息

1
2
3
4
5
6
7
Welcome to Ubuntu 17.04 (GNU/Linux 4.10.0-19-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

Welcome to Alibaba Cloud Elastic Compute Service ! Last login from ***.***.***.***

源自文件:

1
sudo nano /etc/motd

使用Caddy

Caddy是一款由Go编写的Web Server,与Nginx相比,最大的特点就是部署简单并默认启用HTTPS,它是第一个无需额外配置即可提供 HTTPS 特性的 Web 服务器。同样是使用 Let’s Encrypt,之前使用 Nginx 需要手工配置证书,还需要编写三个月更新证书的 cron 计划任务。另外 Caddy 默认启用更快的 HTTP/2 协议。

安装Caddy

Caddy 官方支持多种安装方式,我是使用脚本的方式,服务器为Ubuntu 16.04 64位。首先更新下系统,然后安装 wget 和 curl 再下载 caddy 安装文件并赋予可执行权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
apt update && sudo apt upgrade -y && sudo apt autoremove -y
apt install wget -y && apt install curl -y
wget https://getcaddy.com -O getcaddy
chmod +x getcaddy
#然后根据需求可选安装插件,比如我安装了http.cache, http.expires, http.ipfilter, http.minify等插件:

./getcaddy personal http.cache,http.expires,http.ipfilter,http.minify,http.nobots,http.ratelimit
#生产环境配置&使用
3安装完成后需要进行一些配置方便在生产环境使用。
#先设置相关权限。
chown root:root /usr/local/bin/caddy
chmod 755 /usr/local/bin/caddy
setcap 'cap_net_bind_service=+eip' /usr/local/bin/caddy
setcap 'cap_net_bind_service=+eip' 是使服务程序运行在非root帐户下时,也能够banding到低端口。

#下面新建配置文件目录,并新建一个 Caddyfile 文件,并写入一条 import 指令。
mkdir -p /etc/caddy
chown -R root:www-data /etc/caddy
mkdir -p /etc/ssl/caddy
chown -R www-data:root /etc/ssl/caddy
chmod 770 /etc/ssl/caddy
touch /etc/caddy/Caddyfile
echo 'import ./vhosts/*' > /etc/caddy/Caddyfile

#然后创建网站文件的存放目录。
mkdir -p /var/www
chown www-data:www-data /var/www
chmod 755 /var/www

#创建好上面的文件和目录之后,我们还需要把 caddy 配置成一个服务,方便管理和开机自动运行。
curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service # 从 github 下载 systemd 配置文件
chown root:root /etc/systemd/system/caddy.service # 配置权限
chmod 744 /etc/systemd/system/caddy.service
systemctl daemon-reload #重新加载 systemd 配置
systemctl enable caddy.service # 设置 caddy 服务自启动
systemctl start caddy.service # 启动 caddy 状态

#Caddy当前状态
systemctl status caddy
service caddy status

#重启下Caddy 服务
systemctl restart caddy.service
systemctl restart caddy
service caddy restart

#更详细的内容可以去官网上看文档学习: https://caddyserver.com/docs