阿里云服务器

宝塔面板(BT Panel)

1
2
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec
bt default
image-20260611130146198

为宝塔面板配置安全组

image-20260611125654475

安全组是什么

安全组就是阿里云为你服务器配备的“虚拟防火墙”。

1. 它是“白名单”机制(默认拒绝所有人)

保安的默认原则是:只要我没在名单上看到你的名字,你就绝对不准进。

  • 如果你什么都不配置,你的服务器就是一座孤岛,谁也访问不了(网站打不开,你也连不上)。
  • 你必须主动给保安下发“通行证”(配置规则),比如“允许访问 80 端口(网站)的人进来”。

2. 它控制“进出”两个方向

  • 入方向(别人访问你): 保安严查!必须看通行证。比如网友访问你的网站(80端口),或者你登录宝塔面板(8888端口),都需要在安全组里提前开放对应端口。
  • 出方向(你访问别人): 保安很宽容!默认允许你的服务器主动去外网下载软件、更新系统。

3. 它是“虚拟”的,且极其靠近你的服务器

在传统的机房里,防火墙是一台独立的硬件机器。但在阿里云,安全组是直接绑定在你的服务器虚拟网卡上的。

  • 好处: 恶意流量在到达你的操作系统(Ubuntu)之前,在底层就被保安直接拦截丢弃了。你的系统根本感觉不到黑客的攻击,极其安全。

安全组到底部署在哪里?

在物理机房,防火墙是一台独立的硬件盒子(网关)。但在阿里云,你的服务器是一台虚拟机(VM)

  • 物理位置:安全组代码运行在宿主机(物理机)的 Hypervisor(虚拟机监视器)层
  • 逻辑位置:它直接绑定在你的虚拟网卡(vNIC) 上。
  • 数据流向:外部数据包 -> 物理网卡 -> 虚拟交换机 -> 安全组拦截检查 -> 虚拟网卡 -> 你的 Ubuntu 操作系统。
  • 结论:如果安全组拒绝了数据包,这个包在到达你的 Ubuntu 系统之前,就已经在内核底层被丢弃(Drop)了。你的系统根本不知道有人试图访问你,这就极大地降低了被攻击的风险。

五元组匹配(Packet Filtering)

当数据包到达安全组时,安全组会剥离数据链路层的帧头,查看 网络层(IP)传输层(TCP/UDP) 的头部信息。它会提取出五元组(5-Tuple)

五元组 所在协议层 作用 示例
源 IP (Source IP) 网络层 (IP) 标识发送方是谁 114.24.56.78 (你的电脑)
目的 IP (Dest IP) 网络层 (IP) 标识接收方是谁 139.196.213.60 (你的服务器)
源端口 (Source Port) 传输层 (TCP/UDP) 标识发送方用的哪个程序 54321 (浏览器随机生成的临时端口)
目的端口 (Dest Port) 传输层 (TCP/UDP) 标识想访问服务器的哪个服务 8888 (宝塔面板)
协议 (Protocol) 网络层/传输层 标识使用的传输协议 TCPUDP

匹配过程:安全组内存里有一张 ACL(访问控制列表)表。数据包来了,提取五元组,从上到下逐条比对。匹配到“允许”就放行,匹配到“拒绝”就丢弃。如果到最后都没匹配到,执行默认策略(拒绝)

最核心的技术:状态检测(Stateful Inspection)

这是新手最容易困惑的地方:“我只配了入方向的 8888,为什么服务器返回给我的数据能顺利通过?”

解答:因为安全组是“有状态”的。

  • 无状态防火墙(如老式路由器 ACL):只认死理。去程包符合规则就放,回程包必须也有一条明确的规则才放。
  • 有状态防火墙(安全组):它内部维护了一张连接追踪表(Connection Tracking Table)

TCP 三次握手在安全组中的微观过程:

  1. 第一次握手 (SYN):你的浏览器向服务器 8888 端口发送 SYN 包。
    • 安全组检查入方向规则 -> 发现允许 8888 -> 放行
    • 关键动作:安全组在内存的“状态表”中记下一笔:[源IP:源端口] <-> [目的IP:8888] 状态:新建
  2. 第二次握手 (SYN-ACK):服务器的宝塔面板回复 SYN-ACK 包(源端口 8888,目的端口 54321)。
    • 安全组检查出方向规则(通常全放行) -> 放行
    • 关键动作:更新状态表:状态:已建立
  3. 第三次握手及后续数据传输 (ACK/PSH)
    • 当后续的数据包到达时,安全组首先检查状态表
    • 发现这个包属于“已建立”的连接 -> 直接放行,根本不去查 ACL 规则表!

总结:有状态检测让安全组变得极其聪明,它知道“谁先发起的对话”,从而自动放行合法的回应流量,省去了配置复杂回程规则的麻烦。

部署sub2api

1
2
3
4
5
6
7
8
# 1. 创建部署目录并进入
mkdir -p /www/sub2api && cd /www/sub2api

# 2. 下载部署脚本并执行
curl -sSL https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/deploy/docker-deploy.sh | bash

# 3. 查看生成的配置(重要!)
cat .env

使用ping测试连通性

1
ping raw.githubusercontent.com

ping 命令不能用来测试网址(URL)!

  • ping 的原理ping 使用的是 ICMP 协议(网络层),它只能测试域名(如 baidu.com)或 IP 地址(如 139.196.213.60)是否连通。
  • URL 是什么https://raw.githubusercontent.com/... 是一个完整的 HTTP 网址(应用层),包含了协议头(https://)和路径(/Wei-Shaw/...)。ping 根本不认识 https:// 这种东西,所以它报错“未知的名称或服务”。

ssh连接

步骤1:修改 SSH 配置文件 在 Workbench 的黑框框里,复制粘贴以下命令并回车(这会打开一个文本编辑器):

1
nano /etc/ssh/sshd_config

步骤2:修改关键配置

PasswordAuthentication no 改成yes

步骤3:保存并退出

Ctrl + X 退出编辑器。

步骤4:重启 SSH 服务让配置生效

在黑框框里输入以下命令并回车:

1
systemctl restart ssh

步骤5:再次尝试本地连接

回到你的 Windows PowerShell,再次输入:

1
ssh root@139.196.213.60

docker部署

1
2
3
4
5
6
# 1. 进入之前创建的项目目录
cd /www/sub2api

# 2. 启动所有服务(包括数据库、Redis和主程序)
# 第一次启动需要下载 Docker 镜像,可能需要几分钟,请耐心等待
docker compose up -d

然后记得配置安全组