最近发现服务器被挖矿病毒侵害,Nginx里的网站源码都是静态的,只暴露了22和80,443接口,密码长度16位,实在不知道是怎么被人搞的。
思来想去,怀疑Trojan一键搭建脚本里可能有什么不干净的东西,于是决定自己手工用Docker搭建一个Trojan。
一、安装Docker
apt-get update
apt-get upgrade
apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
bionic \
stable"
apt-get install docker-ce docker-ce-cli containerd.io
二、获取Https证书
申请https证书,在Docker下,为了方便,用DNS的方式验证网站的所有权。
domain=""
Ali_Key=""
Ali_Secret=""
output="$(pwd)/out"
docker run --rm -it \
-v "$output":/acme.sh \
-e Ali_Key="$Ali_Key" \
-e Ali_Secret="$Ali_Secret" \
neilpang/acme.sh --issue --log --dns dns_ali -d "$domain"
mkdir -p /etc/trojan/
ln -sf "$output"/"$domain"/fullchain.cer /etc/trojan/fullchain.crt
ln -sf "$output"/"$domain"/"$domain".key /etc/trojan/private.key
续期
docker run --rm -it \
-v "$output":/acme.sh \
-e Ali_Key="$Ali_Key" \
-e Ali_Secret="$Ali_Secret" \
neilpang/acme.sh --renew --force --log --dns dns_ali -d "$domain"
三、Nginx
mkdir -p /var/www/html
mkdir -p /opt/nginx/logs
#拷出默认配置,便于定制化
docker pull nginx
docker run --name tmp-nginx -d nginx
docker cp tmp-nginx:/etc/nginx/nginx.conf /opt/nginx/
docker cp tmp-nginx:/etc/nginx/conf.d /opt/nginx/
docker cp tmp-nginx:/usr/share/nginx/html/index.html /var/www/html/
docker rm -f tmp-nginx
#运行
docker run \
--name nginx \
--net host \
-v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/conf.d:/etc/nginx/conf.d \
-v /opt/nginx/logs:/var/log/nginx \
-v /var/www/html:/usr/share/nginx/html \
-d nginx
四、Trojan
运行Trojan
docker run \
--name trojan \
--net host \
-v /etc/trojan:/etc/trojan \
-v /etc/trojan/fullchain.crt:/etc/trojan/fullchain.crt \
-v /etc/trojan/private.key:/etc/trojan/private.key \
-d teddysun/trojan
五、Nginx配置
开启全站https,在conf.d/default.conf配置修改至如下:
#本地网站目录,供Trojan访问
server {
listen 127.0.0.1:80 default_server;
server_name <domain>;
location / {
root /var/www/html;
index index.html index.htm;
}
}
# server_name替换为服务器ip,目的是,当有人直接访问服务器ip时,跳转至https网站
server {
listen 127.0.0.1:80;
server_name <10.10.10.10>;
return 301 https://$host$request_uri;
}
# 将所有80端口的流量重定向至443
server {
listen 0.0.0.0:80;
listen [::]:80;
server_name _;
location / {
return 301 https://$host$request_uri;
}
}