这篇笔记的内容诞生于作者在黑五促销时冲动的服务器上,服务器是基于 KVM 架构的 VPS,系统为 Ubuntu 20.04 LTC。促销的原因,这台机器没有托管防火墙,所以在安全上要多做一些工作。下面从连接到服务器后开始记录。
0. Before
到手的服务器默认只有 root 用户,添加普通用户:
adduser username |
按照提示输入密码和基本信息,然后将新用户添加到 sudo 组:
adduser username sudo |
随后通过新用户登录。
安装 zsh 和 Oh My ZSH(可选的):
sudo apt install zsh |
1. 基本安全配置
1.1. 更改 ssh 配置
需要更改的地方如下:
Port # your port # 更改默认端口 |
在本地生成一对密钥,将公钥上传到服务器的 ~/.ssh/authorized_keys 内,并设置权限为 600.
重启 sshd:
sudo systemctl restart ssh.service |
这时用尝试用密钥登录,成功登录后再配置:
# 禁用密码登录 |
再次重启 sshd.
1.2. 防火墙配置
Ubuntu 自带有 UFW,可以极大简化防火墙的配置。首先查看 UFW 的运行状态:
sudo ufw status |
一般回显 inactive.
查看已安装的规则:
sudo ufw app list |
一般回显中会有 OpenSSH,这些规则一般放在 /etc/ufw/applications.d/ 下,比如 OpenSSH 就定义在 openssh-server 中。如果没有可以自己定义,语法遵循 ini 文件:
[OpenSSH] |
UFW 默认的 ssh 端口为 22,修改为上一步设置的值,然后更新并启用它:
sudo ufw app update OpenSSH |
启用 UFW:
sudo ufw enable |
程序可能会提示你这个操作可能会影响 ssh 连接,但是我们已经允许 ssh 使用的端口通过防火墙,所以直接回车即可。
2. 常用软件安装
上面我们完成了基本的安全配置,现在可以安装常用软件了。
开始之前应该先更新已有软件,执行 sudo apt update && sudo apt upgrade -y.
如果你的网络环境不佳,建议在新的 screen 会话中执行上面的命令,然后分离会话,坐和放宽。
2.1. 更新内核(可选的)
现阶段 Ubuntu 20.04 自带的内核是 5.4.x,如果你觉得有必要,可以升级到 5.10.x.
如果选择的内核版本 >5.10.32,你可能会遇到 linux-headers-5.10.x-generic depends on libc6 (>= 2.33); however: Version of libc6:amd64 on system is 2.31-0ubuntu9.2. 这样的错误,这是因为更新的内核是用 21.04 编译的,21.04 上 libc6 的版本要新一点,详细见这里。
因此我们直接选择 5.10.30 的内核,在这里选择合适的架构,比如 amd64. 在 home 创建一个目录 kernel,进入该目录,把需要下载的文件的链接放到 urls.txt 中:
https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.10.30/amd64/linux-headers-5.10.30-051030-generic_5.10.30-051030.202104140332_amd64.deb |
然后执行:
wget -i urls.txt |
等到下载完成,执行:
sudo dpkg -i *.deb |
等待命令完成,重启服务器并登录。现在执行 uname -r 将会回显 5.10.30-051030-generic,安装成功。
2.2. 安装 nginx
本部分内容由 nginx 官网文档精简。
首先安装依赖:
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring |
导入 nginx 官方签名密钥:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ |
在 apt 源中配置 nginx 稳定版:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ |
配置优先级:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ |
安装 nginx:
sudo apt update |
2.3. 安装 Docker
Docker yyds!
2.3.1. Docker 引擎的安装
本部分由 Docker 官方文档精简。
如果你曾安装过 Ubuntu 官方库的 Docker,先卸载:
sudo apt-get remove docker docker-engine docker.io containerd runc |
Ubuntu 20.04 LTC 默认支持 overlay2,如果你的 Ubuntu 不支持,需要自行安装合适的存储驱动。
向 apt 添加 Docker 的官方库:
sudo apt-get install \ |
安装 Docker:
sudo apt update |
2.3.2. 防火墙配置
Docker 的网络管理是通过配置 iptables 来完成的,我们在前面用来辅助管理防火墙的 UFW 不能管理 Docker 发布出来的端口,甚至 UFW 配置的规则对 Docker 失效,这里推荐使用 GitHub 上的 ufw-docker 来解决这个问题。
下载 ufw-docker 脚本:
sudo wget -O /usr/local/bin/ufw-docker \ |
使用下列命令来修改 ufw 的 after.rules 文件:
ufw-docker install |
通过 ufw reload 命令使配置生效。
假设你将宿主机的 8080 端口映射到容器 web 的 80 端口,在以后的使用中,如果你需要将 8080 端口暴露到公网,你应该:
ufw-docker allow web 80 |
更多案例参见使用方法。
2.3.3. Docker Compose 的安装(可选的)
本部分参考官方文档。
执行 which docker-compose 或 docker-compose --version 看看系统里有没有安装 Docker Compose,如果回显出正确的结果,比如 Docker Compose 的位置或版本信息,就可以结束这一步了。
执行以下命令安装:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
测试安装是否成功:
docker-compose --version |
应该回显:
docker-compose version 1.29.2, build 1110ad01 |
2.4. 通过 Docker 运行 V2Ray
作为笔记,本文默认你已经熟悉 V2Ray 的配置,如果你是第一次接触 V2Ray,有专门的教程更好更详细的讲解如何使用它,比如新 V2Ray 白话文指南。
通过 Docker 运行 V2Ray,需要我们向容器挂载一个目录来传递配置文件,在 home 下创建一个目录用来存放和 V2Ray 相关的文件。如果你已经安装了 Docker Compose,在这个目录下创建 docker-compose.yml,根据你的需求编写配置内容。
这是我的配置
version: "3" |
我将 V2Ray 的配置文件放在 config 目录下,因此目录结构是这样的:
v2ray |
执行命令运行 V2Ray:
docker-compose up -d |
如果你使用 nginx 作为反代,且偏爱 unix 域套接字的话,需要为套接字文件设置正确的权限,或者让容器以 nginx 用户运行。另外说一嘴,V2Ray 是可以转发 ssh 的流量的,因此从现在开始可以直接不允许 ssh 端口的流量入站,这样安全性有没有更高不清楚,至少不用担心有人盯着你的 ssh 端口了。
以上就是我对一台新 VPS 的常规配置。其实一个买境外服务器的人是要干嘛每个人都心知肚明,GFW 也算是特殊时代下的特殊产物了。希望有一天我们可以自信自由的接入互联网。