阿里云服务器
宝塔面板(BT Panel)
1 | wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec |
为宝塔面板配置安全组
安全组是什么
安全组就是阿里云为你服务器配备的“虚拟防火墙”。
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) | 网络层/传输层 | 标识使用的传输协议 | TCP 或 UDP |
匹配过程:安全组内存里有一张 ACL(访问控制列表)表。数据包来了,提取五元组,从上到下逐条比对。匹配到“允许”就放行,匹配到“拒绝”就丢弃。如果到最后都没匹配到,执行默认策略(拒绝)。
最核心的技术:状态检测(Stateful Inspection)
这是新手最容易困惑的地方:“我只配了入方向的 8888,为什么服务器返回给我的数据能顺利通过?”
解答:因为安全组是“有状态”的。
- 无状态防火墙(如老式路由器 ACL):只认死理。去程包符合规则就放,回程包必须也有一条明确的规则才放。
- 有状态防火墙(安全组):它内部维护了一张连接追踪表(Connection Tracking Table)。
TCP 三次握手在安全组中的微观过程:
- 第一次握手 (SYN):你的浏览器向服务器
8888端口发送 SYN 包。- 安全组检查入方向规则 -> 发现允许
8888-> 放行。 - 关键动作:安全组在内存的“状态表”中记下一笔:
[源IP:源端口] <-> [目的IP:8888] 状态:新建。
- 安全组检查入方向规则 -> 发现允许
- 第二次握手 (SYN-ACK):服务器的宝塔面板回复 SYN-ACK
包(源端口 8888,目的端口 54321)。
- 安全组检查出方向规则(通常全放行) -> 放行。
- 关键动作:更新状态表:
状态:已建立。
- 第三次握手及后续数据传输 (ACK/PSH):
- 当后续的数据包到达时,安全组首先检查状态表。
- 发现这个包属于“已建立”的连接 -> 直接放行,根本不去查 ACL 规则表!
总结:有状态检测让安全组变得极其聪明,它知道“谁先发起的对话”,从而自动放行合法的回应流量,省去了配置复杂回程规则的麻烦。
部署sub2api
1 | # 1. 创建部署目录并进入 |
使用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 | # 1. 进入之前创建的项目目录 |
然后记得配置安全组