Add: document level-0
@ -24,7 +24,7 @@ module.exports = {
|
||||
{ text: '大史记', link: '/about/news' },
|
||||
{ text: '配置指南', link: '/config/' },
|
||||
{ text: '开发指南', link: '/development/' },
|
||||
{ text: '使用指南', link: '/usage/' },
|
||||
{ text: '使用指南', link: '/document/' },
|
||||
{
|
||||
text: '多语言',
|
||||
ariaLabel: 'Language Menu',
|
||||
@ -36,6 +36,37 @@ module.exports = {
|
||||
|
||||
],
|
||||
sidebar: {
|
||||
'/config/basis/': [
|
||||
{
|
||||
title: '基础配置',
|
||||
collapsable: false,
|
||||
children: [
|
||||
'api',
|
||||
'dns',
|
||||
'fakedns',
|
||||
'inbound',
|
||||
'outbound',
|
||||
'policy',
|
||||
'reverse',
|
||||
'routing',
|
||||
'stats',
|
||||
'transport'
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '入站代理',
|
||||
path: '/config/inbounds/',
|
||||
},
|
||||
{
|
||||
title: '出站代理',
|
||||
path: '/config/outbounds/',
|
||||
},
|
||||
{
|
||||
title: '底层传输',
|
||||
path: '/config/transports/',
|
||||
},
|
||||
|
||||
],
|
||||
'/config/': [
|
||||
{
|
||||
title: '特性详解',
|
||||
@ -48,6 +79,10 @@ module.exports = {
|
||||
'features/multiple'
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '基础配置',
|
||||
path: '/config/',
|
||||
},
|
||||
{
|
||||
title: '入站代理',
|
||||
collapsable: false,
|
||||
@ -92,6 +127,17 @@ module.exports = {
|
||||
]
|
||||
},
|
||||
],
|
||||
'/document/level-0/': [
|
||||
'ch01-preface',
|
||||
'ch02-preparation',
|
||||
'ch03-ssh',
|
||||
'ch04-security',
|
||||
'ch05-webpage',
|
||||
'ch06-certificates',
|
||||
'ch07-xray-server',
|
||||
'ch08-xray-clients',
|
||||
'ch09-appendix',
|
||||
],
|
||||
'/': 'auto',
|
||||
}
|
||||
},
|
||||
|
@ -4,7 +4,7 @@ heroImage: /LogoX2.png
|
||||
heroText: 不畏浮云遮望眼 · 金睛如炬耀苍穹
|
||||
tagline: Keep Riding / Never Look Back
|
||||
actionText: 由此开始 →
|
||||
actionLink: /guide/
|
||||
actionLink: /document/
|
||||
features:
|
||||
- title: 极速协议
|
||||
details:
|
||||
|
@ -32,46 +32,46 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有
|
||||
|
||||
## 基础配置模块
|
||||
|
||||
> log:[LogObject](./log.md)
|
||||
> log:[LogObject](./basis/log.md)
|
||||
|
||||
日志配置,控制 Xray输出日志的方式.
|
||||
|
||||
> api:[ApiObject](./api.md)
|
||||
> api:[ApiObject](./basis/api.md)
|
||||
|
||||
提供了一些API接口供远程调用。
|
||||
|
||||
> dns: [DnsObject](./dns.md)
|
||||
> dns: [DnsObject](./basis/dns.md)
|
||||
|
||||
内置的 DNS 服务器. 如果没有配置此项,则使用系统的 DNS 设置。
|
||||
|
||||
> routing: [RoutingObject](./routing.md)
|
||||
> routing: [RoutingObject](./basis/routing.md)
|
||||
|
||||
路由功能。可以设置规则分流数据从不同的outbound发出.
|
||||
|
||||
> policy: [PolicyObject](./policy.md)
|
||||
> policy: [PolicyObject](./basis/policy.md)
|
||||
|
||||
本地策略,可以设置不同的用户等级和对应的策略设置。
|
||||
|
||||
> inbounds: \[ [InboundObject](./inbound.md) \]
|
||||
> inbounds: \[ [InboundObject](./basis/inbound.md) \]
|
||||
|
||||
一个数组,每个元素是一个入站连接配置。
|
||||
|
||||
> outbounds: \[ [OutboundObject](./outbound.md) \]
|
||||
> outbounds: \[ [OutboundObject](./basis/outbound.md) \]
|
||||
|
||||
一个数组,每个元素是一个出站连接配置。
|
||||
|
||||
> transport: [TransportObject](./transport.md)
|
||||
> transport: [TransportObject](./basis/transport.md)
|
||||
|
||||
用于配置 Xray 其它服务器建立和使用网络连接的方式。
|
||||
|
||||
> stats: [StatsObject](./stats.md)
|
||||
> stats: [StatsObject](./basis/stats.md)
|
||||
|
||||
用于配置流量数据的统计。
|
||||
|
||||
> reverse: [ReverseObject](./reverse.md)
|
||||
> reverse: [ReverseObject](./basis/reverse.md)
|
||||
|
||||
反向代理。可以把服务器端的流量向客户端转发,即逆向流量转发
|
||||
|
||||
> fakedns: [FakeDnsObject](./fakedns.md)
|
||||
> fakedns: [FakeDnsObject](./basis/fakedns.md)
|
||||
|
||||
FakeDNS. 可配合透明代理使用,以获取实际域名。
|
||||
|
Before Width: | Height: | Size: 659 KiB After Width: | Height: | Size: 659 KiB |
@ -1,6 +1,6 @@
|
||||
# 入站代理
|
||||
|
||||
入站连接用于接收发来的数据,可用的协议请见[inbound 可用协议列表](./inbounds/)。
|
||||
入站连接用于接收发来的数据,可用的协议请见[inbound 可用协议列表](../inbounds/)。
|
||||
|
||||
## InboundObject
|
||||
|
||||
@ -52,7 +52,7 @@
|
||||
|
||||
>`protocol`: string
|
||||
|
||||
连接协议名称,可选的协议类型见 [inbound 可用协议列表](./inbounds/)。
|
||||
连接协议名称,可选的协议类型见 [inbound 可用协议列表](../inbounds/)。
|
||||
|
||||
>`settings`: InboundConfigurationObject
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 出站代理
|
||||
|
||||
出站连接用于发送数据,可用的协议请见 [outbound 可用协议列表](./outbounds/)。
|
||||
出站连接用于发送数据,可用的协议请见 [outbound 可用协议列表](../outbounds/)。
|
||||
|
||||
## OutboundObject
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
用于发送数据的 IP 地址,当主机有多个 IP 地址时有效,默认值为 `"0.0.0.0"`。
|
||||
>`protocol`: string
|
||||
|
||||
连接协议名称,可选的协议类型见 [outbound 可用协议列表](./outbounds/)。
|
||||
连接协议名称,可选的协议类型见 [outbound 可用协议列表](../outbounds/)。
|
||||
>`settings`: OutboundConfigurationObject
|
||||
|
||||
具体的配置内容,视协议不同而不同。详见每个协议中的 `OutboundConfigurationObject`。
|
||||
@ -83,7 +83,7 @@ Mux 相关的具体配置。
|
||||
:::
|
||||
|
||||
### MuxObject
|
||||
Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细节详见 [Mux.Cool](../development/protocols/muxcool)。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配。
|
||||
Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细节详见 [Mux.Cool](../../development/protocols/muxcool)。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配。
|
||||
|
||||
`MuxObject` 对应 `OutboundObject` 中的 `mux` 项。
|
||||
|
@ -11,7 +11,7 @@
|
||||
* `bridge` 会根据流量的大小进行动态的负载均衡。
|
||||
|
||||
::: tip
|
||||
反向代理默认已开启 [Mux](../development/protocols/muxcool/),请不要在其用到的outbound上再次开启 Mux。
|
||||
反向代理默认已开启 [Mux](../../development/protocols/muxcool/),请不要在其用到的outbound上再次开启 Mux。
|
||||
:::
|
||||
|
||||
::: warning
|
@ -29,31 +29,31 @@
|
||||
}
|
||||
```
|
||||
|
||||
> `tcpSettings`: [TcpObject](./transports/tcp.md)
|
||||
> `tcpSettings`: [TcpObject](../transports/tcp.md)
|
||||
|
||||
针对 TCP 连接的配置。
|
||||
|
||||
> `kcpSettings`: [KcpObject](./transports/mkcp.md)
|
||||
> `kcpSettings`: [KcpObject](../transports/mkcp.md)
|
||||
|
||||
针对 mKCP 连接的配置。
|
||||
|
||||
> `wsSettings`: [WebSocketObject](./transports/websocket).md
|
||||
> `wsSettings`: [WebSocketObject](../transports/websocket.md)
|
||||
|
||||
针对 WebSocket 连接的配置。
|
||||
|
||||
> `httpSettings`: [HttpObject](./transports/h2.md)
|
||||
> `httpSettings`: [HttpObject](../transports/h2.md)
|
||||
|
||||
针对 HTTP/2 连接的配置。
|
||||
|
||||
> `quicSettings`: [QuicObject](./transports/quic.md)
|
||||
> `quicSettings`: [QuicObject](../transports/quic.md)
|
||||
|
||||
针对 QUIC 连接的配置。
|
||||
|
||||
> `grpcSettings`: [GRPCObject](./transports/grpc.md)
|
||||
> `grpcSettings`: [GRPCObject](../transports/grpc.md)
|
||||
|
||||
针对 gRPC 连接的配置。
|
||||
|
||||
> `dsSettings`: [DomainSocketObject](./transports/domainsocket.md)
|
||||
> `dsSettings`: [DomainSocketObject](../transports/domainsocket.md)
|
||||
|
||||
针对 Domain Socket 连接的配置。
|
||||
|
||||
@ -94,7 +94,7 @@
|
||||
是否启用传输层加密,支持的选项有
|
||||
- `"none"` 表示不加密(默认值)
|
||||
- `"tls"` 表示使用 [TLS](https://en.wikipedia.org/wiki/base/transport_Layer_Security)。
|
||||
- `"xtls"` 表示使用 [XTLS](./features/xtls.md)。
|
||||
- `"xtls"` 表示使用 [XTLS](../features/xtls.md)。
|
||||
|
||||
> `tlsSettings`: [TLSObject](#tlsobject)
|
||||
|
||||
@ -103,7 +103,7 @@ TLS 配置。TLS 由 Golang 提供,通常情况下TLS协商的结果为使用
|
||||
> `xtlsSettings`: [XTLSObject](#tlsobject)
|
||||
|
||||
XTLS 配置。XTLS 是 Xray 的原创黑科技, 也是使 Xray 性能一骑绝尘的核心动力。
|
||||
XTLS 与 TLS 有相同的安全性, 配置方式也和TLS一致. 点击此处查看 [XTLS的技术细节剖析](./features/xtls.md)
|
||||
XTLS 与 TLS 有相同的安全性, 配置方式也和TLS一致. 点击此处查看 [XTLS的技术细节剖析](../features/xtls.md)
|
||||
|
||||
::: danger
|
||||
TLS / XTLS 是目前最安全的传输加密方案, 且外部看来流量类型和正常上网具有一致性。
|
||||
@ -111,31 +111,31 @@ TLS / XTLS 是目前最安全的传输加密方案, 且外部看来流量类型
|
||||
当 `security` 的值从 `tls` 改为 `xtls` 时, 只需将 `tlsSettings` 修改成为 `xtlsSettings`
|
||||
:::
|
||||
|
||||
> `tcpSettings`: [TcpObject](./transports/tcp.md)
|
||||
> `tcpSettings`: [TcpObject](../transports/tcp.md)
|
||||
|
||||
当前连接的 TCP 配置,仅当此连接使用 TCP 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `kcpSettings`: [KcpObject](./transports/mkcp.md)
|
||||
> `kcpSettings`: [KcpObject](../transports/mkcp.md)
|
||||
|
||||
当前连接的 mKCP 配置,仅当此连接使用 mKCP 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `wsSettings`: [WebSocketObject](./transports/websocket.md)
|
||||
> `wsSettings`: [WebSocketObject](../transports/websocket.md)
|
||||
|
||||
当前连接的 WebSocket 配置,仅当此连接使用 WebSocket 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `httpSettings`: [HttpObject](./transports/h2.md)
|
||||
> `httpSettings`: [HttpObject](../transports/h2.md)
|
||||
|
||||
当前连接的 HTTP/2 配置,仅当此连接使用 HTTP/2 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `quicSettings`: [QUICObject](./transports/quic.md)
|
||||
> `quicSettings`: [QUICObject](../transports/quic.md)
|
||||
|
||||
当前连接的 QUIC 配置,仅当此连接使用 QUIC 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `grpcSettings`: [GRPCObject](./transports/grpc.md)
|
||||
> `grpcSettings`: [GRPCObject](../transports/grpc.md)
|
||||
|
||||
当前连接的 gRPC 配置,仅当此连接使用 gRPC 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `dsSettings`: [DomainSocketObject](./transports/domainsocket.md)
|
||||
> `dsSettings`: [DomainSocketObject](../transports/domainsocket.md)
|
||||
|
||||
当前连接的 Domain socket 配置,仅当此连接使用 Domain socket 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
@ -384,7 +384,7 @@ ocspStapling 检查更新时间间隔。 单位:秒
|
||||
透明代理需要 Root 或 `CAP\_NET\_ADMIN` 权限。
|
||||
|
||||
::: danger
|
||||
当 [Dokodemo-door](./inbounds/dokodemo.md) 中指定了 `followRedirect`为`true`,且 Sockopt设置中的`tproxy` 为空时,Sockopt设置中的`tproxy` 的值会被设为 `"redirect"`。
|
||||
当 [Dokodemo-door](../inbounds/dokodemo.md) 中指定了 `followRedirect`为`true`,且 Sockopt设置中的`tproxy` 为空时,Sockopt设置中的`tproxy` 的值会被设为 `"redirect"`。
|
||||
:::
|
||||
|
||||
> `domainStrategy`: "AsIs" | "UseIP" | "UseIPv4" | "UseIPv6"
|
@ -25,3 +25,21 @@ Xray有多种命令和参数可用,因此变得灵活和强大.
|
||||
如果你有兴趣,请点击 [使用文档](./document.md) 帮助我们改进文档,或者点击页面下方的 `帮助我们改善此页面!`
|
||||
|
||||
我们十分感谢每一位 contributor 作出的贡献!是你们让 Project X 变得更加强大!
|
||||
|
||||
## 小小白白话文
|
||||
给予新手指导的使用心得
|
||||
|
||||
请点击 [小小白白话文](./level-0/) 以进行查看
|
||||
|
||||
## 入门技巧
|
||||
具备了基础之后,你就可以通过 [入门技巧](./level-1/) 来探索更多的使用方式了
|
||||
|
||||
## 进阶文档
|
||||
给予进阶用户指导的使用技巧
|
||||
|
||||
点击 [进阶文档](./level-2/) 以进行查看
|
||||
|
||||
|
||||
::: tip 感谢
|
||||
非常感谢大家无私分享使用技巧和心得, 使得Xray日益强大。
|
||||
:::
|
26
docs/document/level-0/README.md
Normal file
@ -0,0 +1,26 @@
|
||||
# 小小白白话文
|
||||
|
||||
**这个章节是【从零开始】的基础课,新来的同学好好看好好学哦**
|
||||
|
||||
::: tip
|
||||
Made with ❤️ by [@ricuhkaen](https://github.com/ricuhkaen)
|
||||
:::
|
||||
|
||||
[【第1章】 前言罗嗦篇](./ch01-preface.md) - 机场还是自建?这是个问题
|
||||
|
||||
[【第2章】 原料准备篇](./ch02-preparation.md) - 工欲善其事,必先利其器
|
||||
|
||||
[【第3章】 远程登录篇](./ch03-ssh.md) - 一桥飞架南北,天堑变通途
|
||||
|
||||
[【第4章】 安全防护篇](./ch04-security.md) - 安全不注意,亲人两行泪
|
||||
|
||||
[【第5章】 网站建设篇](./ch05-webpage.md) - 秀出你的美
|
||||
|
||||
[【第6章】 证书管理篇](./ch06-certificates.md) - 领证的才是合法的
|
||||
|
||||
[【第7章】 Xray服务器篇](./ch07-xray-server.md) - 终于等到你
|
||||
|
||||
[【第8章】 Xray客户端篇](./ch08-xray-clients.md) - 新的开始
|
||||
|
||||
[【第9章】 附录](./ch09-appendix.md) - 考点都在这里
|
||||
|
BIN
docs/document/level-0/ch01-img01-choice.png
Normal file
After Width: | Height: | Size: 161 KiB |
103
docs/document/level-0/ch01-preface.md
Normal file
@ -0,0 +1,103 @@
|
||||
# 【第1章】 小小白白话文
|
||||
|
||||
## 1.1 这篇文档是写给谁的?
|
||||
|
||||
一句话:写给 **①零基础** **②希望学习自建VPS** 的新人。
|
||||
|
||||
## 1.2 这篇文档不是写给谁的?
|
||||
|
||||
包括但不限于:各路大神大能、懒得自己折腾的小白、已经会折腾的高手、确定要用机场的土豪、确定要用一键脚本的逍遥派...... 总之只要有技术基础、或不愿不想自建的同学,您直接关闭本文即可,因为这篇文章大概是入不了您的法眼的,更可能会让您生一肚子闲气,那多划不来。
|
||||
|
||||
|
||||
|
||||
## 1.3 郑重声明及其他声明
|
||||
|
||||
郑重声明:
|
||||
|
||||
鄙人技术奇菜无比,故本文必然挂一漏万破绽百出。您若发现问题还请温柔提醒,莫要人参公鸡。
|
||||
|
||||
免责声明:
|
||||
|
||||
本文内容请您自行判断是否可信可靠可用,若您根据本文内容建立和使用VPS服务器时出了任何问题和不良结果,鄙人概不负责。
|
||||
|
||||
啰嗦声明:
|
||||
|
||||
基于本文【零基础用户】的目标受众,许多内容会尽力详尽说明,所以语言偏啰嗦,请做好心理准备。
|
||||
|
||||
|
||||
## 1.4 为什么自建是个难题?
|
||||
|
||||
要回答这个问题,就需要稍微多说一点背景信息了。
|
||||
|
||||
一、科学上网这件事
|
||||
|
||||
科学上网这件事情,说来已经发展了近二十年(震惊!!!.jpg)。最初,自己稍微动动手即可(改改host、连一下ssh)、后来需要找一个网页代理,再后来需要写一个私有协议(比如Shadowsocks)等等。
|
||||
|
||||
随着GFW技术这十几年来不断的迭代升级,若要完成【自己动手科学上网】这个目标,需要做的事情已经包括但不限于:
|
||||
|
||||
1. 了解Linux系统基本命令
|
||||
2. 了解网络传输协议
|
||||
3. 有技术和经济能力完成VPS购买及管理
|
||||
4. 有技术和经济能力完成域名购买及管理
|
||||
5. 有技术能力完成TLS证书申请 等等。
|
||||
|
||||
这就让【自建VPS科学上网】这个曾经简单的行为逐渐变成了令新人望而生畏的挑战。
|
||||
|
||||
二、零基础用户的无奈
|
||||
|
||||
零基础的非技术用户,如果完成上面这一连串的操作,势必要学习大量的知识,但稍微搜索之后,新人只怕会更加迷茫:大量的信息散布在互联网的各个角落:博客、问答网站、群组、论坛、GitHub、Telegram、YouTube 等等等等)。这些信息纷乱复杂、水平良莠不齐、甚至可能互相矛盾。基本上就是不把新人彻底弄晕誓不罢休。
|
||||
|
||||
面对这些杂乱无章的信息,新人突然就从【信息匮乏】变成了【信息过剩】。若是几番连蒙带猜的折腾以失败告终(大概率如此)的话,他的积极性势必大受挫折。在这个过程中,若他又恰好去了一些不太友好的地方去求助,恐怕还要雪上加霜的被嘲讽一番:“这么菜,用机场不就行了,瞎折腾什么啊!”、“先去学会Linux再回来问吧”。
|
||||
|
||||
这时候,大概也只有一声“呵呵”可以表达心情了。
|
||||
|
||||
## 1.5 “用机场不就行了?”
|
||||
|
||||
首先,我想反问一下那些冷嘲热讽的人:“用机场”真的就是万灵药吗?
|
||||
|
||||
其次,我认为“不懂”和“不想懂”是有本质区别的。态度恶劣的巨婴伸手党自然惹人厌烦,但真心自学却不得要领的人不该受到无端的白眼和歧视,也正是这种对新人不加区分的恶劣社区氛围促使我写下本文。那么闲话少说,我们来看看机场的优势与劣势究竟如何:
|
||||
|
||||
一、“机场“的优势
|
||||
|
||||
所谓“机场”,就是“线路提供商”。他负责完成1.4提到的那一串技术操作和管理,用户则付费获得使用权。所以,它的优点至少有:
|
||||
|
||||
1. **用户操作简单**:扫码操作、一键添加规则等
|
||||
2. **线路选择多**:可解锁不同国家、地区的网络服务;比如iplc等专线服务、游戏加速服务等
|
||||
3. **接入节点多**:所以抵抗节点封锁的能力强一些,封了一个就换下一个
|
||||
|
||||
二、“机场”的风险
|
||||
|
||||
“方便”这枚硬币的另一面就是“风险”,基于“机场”的技术特点和市场情况,它的风险至少有:
|
||||
|
||||
1. **“机场”可完全获得用户信息**:用户在网上的所有痕迹,都【必然】经过且【非常可能】长期存储在其服务器上,这些记录无法受到任何具备法律效力的用户隐私协议的约束(**窥视、记录你的一举一动**)
|
||||
2. **“机场”缺乏市场管理**:不可避免存在着以欺诈为目标的恶意商家(**主动跑路**)
|
||||
3. **“机场”面临监管压力**:大机场相对有保障的同时,也无法避免树大招风。2020年间,已经有几个大机场停运、跑路的事件发生,用户的正常使用受到严重干扰(**被动跑路**)
|
||||
4. **“机场”技术水平难以确定**:线路质量良莠不齐,挂羊头卖狗肉的现象屡见不鲜(**速度慢、掉线多、连不上**)
|
||||
|
||||
|
||||
|
||||
## 1.6 那么你到底要不要自建呢?
|
||||
|
||||
现在,你已经看到了机场的优势和风险,要用什么,就请各位充分思考并自行决定。毕竟,最适合你的方案才是最好的方案。
|
||||
|
||||
<img src="./ch01-img01-choice.png" alt="It's Your Choice!" />
|
||||
|
||||
|
||||
1. 如果决定使用机场的话,现在,你可以关闭本文了。
|
||||
|
||||
2. 如果你决定自建,那就请继续阅读后面的章节吧!!
|
||||
|
||||
总之,本文的目标就是成为零基础用户的知识起点,提供对每一步充分的讲解和演示,清清楚楚(甚至**婆婆妈妈、絮絮叨叨、啰啰嗦嗦**)的协助新人完成【**从输入第一条命令开始,完成VPS服务器部署,并成功在客户端完成科学上网**】的全程。并在这个过程中帮助新人逐步接触和熟悉Linux的基础操作,为之后的进一步自学打下基础。
|
||||
|
||||
## 1.7 题外啰嗦几句
|
||||
|
||||
1. 墙外的信息泥沙俱下,请务必学会理性、独立的思辨,不要随意站队,不要轻信猎奇的信息。
|
||||
|
||||
2. 衷心希望大家获得更顺畅的网络后,可以获取更新鲜的知识、更丰富的娱乐、接触更美好的世界、结交更多志同道合的朋友,但不要成为任何有不可告人目的之人的替罪羊。
|
||||
|
||||
3. 你的互联网身份依然是你的身份,绝对的匿名化是极为困难的,所以请务必遵守你个人所在地区和IP所在地区的相关法律法规。无论何时,自我保护都是最基本的底线。
|
||||
|
||||
|
||||
## 1.8 你的进度
|
||||
|
||||
> `⬛⬜⬜⬜⬜⬜⬜⬜ 12.5%`
|
BIN
docs/document/level-0/ch02-img01-a-name.png
Normal file
After Width: | Height: | Size: 55 KiB |
57
docs/document/level-0/ch02-preparation.md
Normal file
@ -0,0 +1,57 @@
|
||||
# 【第2章】原料准备篇
|
||||
|
||||
这一章比较特殊,因为涉及到金钱交易行为,本文基于项目的中立立场,不做具体的推荐。我能做的,是告诉你需要准备哪些东西。
|
||||
|
||||
## 2.1 获取一台VPS
|
||||
|
||||
你需要获取一台健康的、IP没有被墙的VPS,并在管理后台做下面这些基础准备:
|
||||
|
||||
1. 在VPS的后台安装 Debian 10 64bit 系统
|
||||
2. 小本本记下VPS的IP地址(本文会用 `"100.200.300.400"` 来表示)
|
||||
::: tip
|
||||
**注意:** 这是一个故意写错的非法IP,请替换成你的真实IP)
|
||||
:::
|
||||
3. 小本本记下VPS的SSH远程登陆端口(Port)
|
||||
4. 小本本记下SSH远程登录的用户名和密码
|
||||
|
||||
购买VPS是一个比较复杂的事情,建议先去学习一下相关知识,选择适合自己的经济能力和线路需求的即可。另外可以选择薅一些国际大厂的羊毛(比如甲骨文和谷歌提供的永久免费或限时免费的套餐)。总之,务必量力而行。
|
||||
|
||||
::: tip
|
||||
**说明:** 关于选择 Debian 10 作为操作系统,这里稍微多说一句:不管你在网上听说了什么,不管哪个大神告诉你XXX版的Linux更好、XXX版的Linux更牛,这些Linux的派系之争**跟现在的你半毛钱关系也没有**!使用 Debian 10 足以让你的VPS服务器在安全、稳健运行的同时得到足够的优化(如cloud专用内核、及时的bbr支持等)。等你对Linux熟悉之后,再回头去尝试其他的Linux发行版也不迟
|
||||
:::
|
||||
|
||||
## 2.2 获取一个心仪的域名
|
||||
|
||||
你需要获取一个域名、并在DNS设置中添加一条A记录,指向你VPS的IP地址
|
||||
|
||||
1. 请选择靠谱的国际域名服务商。选择一些常见的域名后缀就行,注意不要用 `.cn` 后缀。
|
||||
2. 在DNS设置中,添加一条指向你VPS的IP地址的A记录(A记录的名字可以随便起,本文会用 `"a-name"` 来表示。完整的域名则会用 `"二级域名.你的域名.com"` 或者 `"a-name.yourdomain.com"` 来表示)。效果如下图:
|
||||
|
||||
<img src="./ch02-img01-a-name.png" alt="添加A记录" />
|
||||
|
||||
::: tip
|
||||
**注意:** 这**不是**一个真实可用的网址,请替换成你的真实网址
|
||||
:::
|
||||
|
||||
|
||||
|
||||
## 2.3 你本地电脑上需要安装的软件
|
||||
|
||||
1. SSH远程登录工具
|
||||
- Windows: [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
|
||||
- macOS/Linux: Terminal
|
||||
|
||||
2. 远程文件拷贝工具
|
||||
- Windows: [WinSCP](https://winscp.net/eng/index.php)
|
||||
- macOS/Linux: Terminal
|
||||
|
||||
3. 靠谱的文本编辑器
|
||||
- Windows/macOS/Linux: [VSCode](https://code.visualstudio.com)
|
||||
|
||||
|
||||
|
||||
## 2.4 你的进度
|
||||
|
||||
如果上面的原材料你都准备好了的话,你已经拿到了开启新世界大门的钥匙。那还等什么,让我们快点进入下一章,走进这扇门吧!
|
||||
|
||||
> `⬛⬛⬜⬜⬜⬜⬜⬜ 25%` :::
|
BIN
docs/document/level-0/ch03-img01-putty-download.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
docs/document/level-0/ch03-img02-putty-settings.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
docs/document/level-0/ch03-img03-putty-keepalive.png
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
docs/document/level-0/ch03-img04-ssh-login.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
docs/document/level-0/ch03-img05-ssh-login-success.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
docs/document/level-0/ch03-img06-apt-upgrade-full.gif
Normal file
After Width: | Height: | Size: 3.1 MiB |
89
docs/document/level-0/ch03-ssh.md
Normal file
@ -0,0 +1,89 @@
|
||||
# 【第3章】远程登录篇
|
||||
|
||||
## 3.1 远程登录VPS (PuTTY)
|
||||
|
||||
首先,鉴于零基础人群中Windows的用户基数最大,所以本文以Windows为例进行展示。
|
||||
|
||||
其次,虽然Windows 10之后的PowerShell和WSL也可以达到很好的SSH操作体验。但是因为并非所有版本的Windows都有最新的组件,故本文还是以老牌的PuTTY为例,进行SSH远程登录的操作详解。(使用其他工具的话、在SSH登陆之后的操作都是一样的)
|
||||
|
||||
下面就跟我一步步操作吧。
|
||||
|
||||
1. 进入PuTTY的[官网](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html),选择适合你操作系统的版本下载。(本文以64位版本为例)
|
||||
|
||||
<img src="./ch03-img01-putty-download.png" alt="下载PuTTY"/>
|
||||
|
||||
2. 安装运行后,将会看到PuTTY的主界面。现在请拿出你上一章记东西的[小本本](../ch02-preparation/#21-%E8%8E%B7%E5%8F%96%E4%B8%80%E5%8F%B0vps),在下图的对应位置填入你VPS的**IP地址(VPS IP)**和**端口(VPS PORT)**。为了方便以后使用时不用重复输入,我们可以保存会话 (Saved Sessions),未来使用时只要按Load即可一键载入设置。
|
||||
|
||||
<img src="./ch03-img02-putty-settings.png" alt="设置PuTTY"/>
|
||||
|
||||
3. 我建议将 `Connection` 中的 `keepalive` 设置为 `60` 秒,防止你一段时间没有操作之后SSH自动断线。另外务必再次保存设置。
|
||||
|
||||
::: warning 注意
|
||||
对PuTTY的任何设置更新都要再次手动保存Session,不然关闭后就会丢失
|
||||
:::
|
||||
|
||||
<img src="./ch03-img03-putty-keepalive.png" alt="防止频繁断线"/>
|
||||
|
||||
4. 点击 Open 就会进入SSH连接窗口,对应下图输入用户名与密码,与你的VPS远程主机建立连接。(本文假设默认用户名是 `root`,另外,在Linux系统输入密码的时候,是不会出现 `******` 这种提示符的,这样可以避免密码长度泄漏,不是你的键盘坏掉了哦!)
|
||||
|
||||
<img src="./ch03-img04-ssh-login.png" alt="SSH远程登录"/>
|
||||
|
||||
|
||||
## 3.2 成功登录SSH!初识命令行界面!
|
||||
|
||||
1. 如果你的信息都填写正确,你将会看到类似下图的界面,说明已登录成功:
|
||||
|
||||
<img src="./ch03-img05-ssh-login-success.png" alt="初次登录VPS"/>
|
||||
|
||||
这个界面,就等于远程服务器的【桌面】,但它没有你熟悉的图标和鼠标,没有绚丽的色彩,有的只是简单文字,这就是【**命令行界面**】- `Command Line Interface`,或者缩写为 `CLI`。
|
||||
|
||||
接下来的所有操作,都需要你像电影里的黑客一样,在这个命令行界面中完成。也许你会觉得陌生,但请相信我,使用命令行既不可怕,也不神秘。说到底,它只不过是把你习惯的鼠标操作变成了文字指令而已,**你说一句,它做一句**。
|
||||
|
||||
2. 现在,你可以稍微观察并熟悉一下命令行环境,这个界面其实已经告诉了你一些有用的信息了,比如系统内核版本(比如图内是 `4.19.37-5`)、上次登录时间及IP等。当然根据VPS的不同,你看到的界面可能会略有不同。
|
||||
|
||||
3. 请注意命令行最下面一行,闪动的光标左边,有一串字符。图中显示的是`root@vps-server:~#`,这一串要怎么理解呢?很简单:
|
||||
|
||||
- 现在的用户是 `root`
|
||||
- `root` 所在的服务器是 `vps-server`
|
||||
- `root` 现在所在的文件夹是 `~`
|
||||
- `#` 之后是你可以输入命令的地方
|
||||
|
||||
前两个很直观,无需多说。第三个是关于Linux的文件夹系统,现在也不需要过于深入,你只需要知道,"`~`"就是【当前用户的大本营】。第四个,提示符`#`,你也不用管,只需要知道,未来文章中会写一些需要你输入的命令,都会以 "`#`" 或者 "`$`" 开头,提示你**后面**是你输入命令的地方。(所以你复制命令的时候,**只需要复制后面的内容**,不要复制提示符)
|
||||
|
||||
|
||||
|
||||
## 3.3 第一次更新Linux的软件!
|
||||
|
||||
1. 正如你的手机,无论安卓还是iPhone,为了APP及时更新(获取安全补丁和新功能),都会时不时从应用商店获得更新信息,并且提示你有多少个APP可更新。Linux系统也有逻辑十分类似的更新机制。所以只要你会更新手机APP,就能学会更新Linux软件!
|
||||
|
||||
2. Linux下,每个APP都叫做一个“包” (package)。管理APP的程序自然就叫做“包管理器”(Package Manager)。你可以通过它安装、更新、卸载各种软件、甚至更新Linux系统本身。Linux下的包管理器非常强大,此处按下不表,现在你只需要知道Debian系统的包管理器叫做 `apt` 即可。接下来,我们就先使用 `apt` 做一次软件的全面更新,让你熟悉它的基本操作。
|
||||
|
||||
3. 小小白白Linux基础命令:
|
||||
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-01` | `apt update` | 查询软件更新 |
|
||||
| `cmd-02` | `apt upgrade` | 执行软件更新 |
|
||||
|
||||
4. 现在请输入第一条命令,获取更新信息
|
||||
```
|
||||
# apt update
|
||||
```
|
||||
|
||||
5. 然后请输入第二条命令,并在询问是否继续安装 `(Y/n)` 时输入 `y` 并回车确认,开始安装
|
||||
```
|
||||
# apt upgrade
|
||||
```
|
||||
|
||||
6. 完整流程演示如下:
|
||||
|
||||
<img src="./ch03-img06-apt-upgrade-full.gif" alt="初次软件更新流程演示"/>
|
||||
|
||||
|
||||
|
||||
## 3.4 你的进度
|
||||
|
||||
**恭喜你又迈出了坚实的一步!** 现在,你已经可以通过SSH来登录你的远程服务器了!那登录进去之后,除了升级软件之外,应该再做点什么呢?敬请进入下一章一探究竟吧!
|
||||
|
||||
|
||||
> `⬛⬛⬛⬜⬜⬜⬜⬜ 37.5%` :::
|
BIN
docs/document/level-0/ch04-img01-nano-ui.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
docs/document/level-0/ch04-img02-sshd-conf-full.gif
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
docs/document/level-0/ch04-img03-adduser.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
docs/document/level-0/ch04-img04-adduser-full.gif
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
docs/document/level-0/ch04-img05-sudo-full.gif
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
docs/document/level-0/ch04-img06-ssh-no-root-full.gif
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
docs/document/level-0/ch04-img07-putty-default-user.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
docs/document/level-0/ch04-img08-puttygen-save.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
docs/document/level-0/ch04-img09-puttygen-save-keys.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
docs/document/level-0/ch04-img10-winscp-import-session.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
docs/document/level-0/ch04-img11-winscp-ui.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
docs/document/level-0/ch04-img12-winscp-locations.png
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
docs/document/level-0/ch04-img13-winscp-newfolder-key.png
Normal file
After Width: | Height: | Size: 143 KiB |
BIN
docs/document/level-0/ch04-img14-winscp-upload-key.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
docs/document/level-0/ch04-img15-winscp-rename-key.png
Normal file
After Width: | Height: | Size: 141 KiB |
BIN
docs/document/level-0/ch04-img16-winscp-full.gif
Normal file
After Width: | Height: | Size: 961 KiB |
BIN
docs/document/level-0/ch04-img17-rsa-login-full.gif
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
docs/document/level-0/ch04-img18-putty-privatekey-location.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
docs/document/level-0/ch04-img19-putty-privatekey-passphrase.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
docs/document/level-0/ch04-img20-winscp-privatekey-location.png
Normal file
After Width: | Height: | Size: 193 KiB |
320
docs/document/level-0/ch04-security.md
Normal file
@ -0,0 +1,320 @@
|
||||
# 【第4章】安全防护篇
|
||||
|
||||
## 4.1 为什么要做安全防护
|
||||
|
||||
Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网站、APP、服务、甚至线下基础设施都建立在Linux的基石之上,这背后牵涉到巨大的经济利益和商业价值,当然也就就意味着黑灰产有巨大的攻击动力。但是这些服务是如此重要、根本不允许出现重大的安全漏洞。于是无数的运维专业人员都在安全攻防的战场上拼搏努力,这才让大家能享受到基本稳定的现代化数字生活。
|
||||
|
||||
现在,你拥有了一台VPS,并且将会敞开他的数据访问渠道来达到流量转发的目标,那就相当于你已经置身于安全攻防战场的第一线、直面所有风险。但与此同时,新人由于知识和信息的不足,看待安全问题是总是难免两极分化:要么觉得轻如鸿毛和自己没有半点关系,要么觉得重于泰山甚至惶惶不可终日。
|
||||
|
||||
- 对于前者,我的建议是:安全无小事,尽量多查一些安全方面的信息,免得自己真的受了损失才后悔莫及
|
||||
|
||||
- 对于后者,我的建议是:不用紧张,我们的服务器仍不具有太高的价值、一般不会吸引到高水平的攻击,需要面对的基本都是一些自动化脚本的恶意扫描和登录尝试,跟着本文做一些基础的防护即可
|
||||
|
||||
## 4.2 具体的风险到底是什么
|
||||
|
||||
就像我们在《远程登录篇》配置的一样,任何人只需要知道【IP地址】+【端口】+【用户名】+【密码】这四个要素,就能登录你的VPS服务器。那很显然,这四要素的安全就是我们要防护的底线。我们来逐一分析:
|
||||
|
||||
1. 【IP地址】:恶意脚本会随机尝试和扫描IP段,可以简单认为是公开信息、无法隐藏
|
||||
|
||||
2. 【端口】:如果使用默认端口,那么【端口 = `22`】
|
||||
|
||||
3. 【用户名】:如果使用默认用户,那么【用户名 = `root`】
|
||||
|
||||
4. 【密码】:密码不存在默认值,一定是由VPS后台随机生成或由你自行设置的。也就是说,如果你的服务器都是默认设置,则四要素中的三个已经是已知的,那么你整个服务器的安全,就全部寄托在一串小小的密码上了。这时有几种情况:
|
||||
|
||||
- 如果你用了VPS管理后台随机生成密码,它一般包含随机的十几个大小写混杂的字母和符号,相对比较安全
|
||||
|
||||
- 如果你为了好记、把密码改成了类似`123456`这种超弱的密码,破解你的VPS服务器可谓不费吹灰之力
|
||||
|
||||
- 如果你为了好记、把密码改成了比较复杂、但在别的地方用过的密码,其实也并不安全。你要明白黑客手里有作弊器,比如说`密码表`,包含数万、数十万、数百万甚至更多曾经泄漏的真实密码)
|
||||
|
||||
5. 但你要明白,没有哪个黑客真的要坐在电脑前一次一次的尝试你的密码,全部的攻击尝试都是恶意脚本自动进行的,它会24小时不眠不休的工作。也许每天你酣睡之时,你的服务器都在经受着一轮又一轮的冲击。
|
||||
|
||||
一旦密码被成功撞破,意味着你的四要素全部被攻击者掌握,恶意脚本就会快速登录服务器、获取服务器的最高 `root` 控制权、安装部署它的恶意服务,然后就可以用你的服务器来24小时做各种坏事(比如挖矿、传播病毒、发送垃圾邮件、欺诈邮件、做BT中继、甚至暗网公众节点等等等等)。如果恶意脚本比较克制,其实可以做到相当的隐蔽性。而新人一般也不会去观察留意VPS的登录记录、进程变化、CPU占用变化、流量变化等指标,你其实就很难发现自己被黑了。直到你的VPS服务商封禁你的账号、或者收到律师函为止。
|
||||
|
||||
6. 别忘了,你获得VPS时大概率需要使用真实的支付信息,你登录各种网站、社交平台时也会留下你的IP地址,这些都与你的身份有直接或者间接的关系。于是,**一旦这些坏事发生,它们就不可避免的与你产生了关联。**
|
||||
|
||||
## 4.3 我们要做的安全防护有哪些
|
||||
|
||||
基于上述分析,我们要做的,自然就是对【端口】、【用户名】、【密码】这三要素进行加强,来降低被攻破的风险:
|
||||
|
||||
1. 【端口】:将SSH远程登录端口修改为【非22端口】 (4.4)
|
||||
2. 【用户名】:建立【非root】的新用户、并禁用root用户SSH远程登录 (4.5、4.6)
|
||||
3. 【密码】:SSH启用RSA密钥验证登录、同时禁用密码验证登录 (4.7)
|
||||
|
||||
记得按顺序来,别把自己锁在门外了。
|
||||
|
||||
## 4.4 将SSH远程登录端口修改为非22端口
|
||||
|
||||
现在,我们来解决【端口 = `22`】的问题。(注意:有些VPS服务商,默认的端口已经是非22端口,那么你可以忽略这一步,当然也可以跟着本文改成别的端口)
|
||||
|
||||
1. 小小白白Linux基础命令:
|
||||
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-03` | `nano` | 文本编辑器 |
|
||||
| `cmd-04` | `systemctl restart` | 重启某个服务 |
|
||||
|
||||
2. 小小白白Linux基础配置文件
|
||||
|
||||
| 编号 | 配置文件位置 | 文件说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `conf-01` | `/etc/ssh/sshd_config` | SSH远程登录程序设置 |
|
||||
|
||||
3. 我们要做的第一件事,当然就是【用`nano`这个文本编辑器打开`SSH远程登录程序设置`】,在Windows下,你会【找到文件并双击】,在Linux下该怎么办呢?仔细看看上面的命令说明,是不是就很简单了?没错,就是:
|
||||
|
||||
```
|
||||
# nano /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
4. 文件打开后,你就进入了`nano`的界面,稍微观察一下,你会发现,它把重要的快捷键都显示在屏幕下方了(下图红框内),直接开卷考试、不用死记硬背,是不是很贴心呢?
|
||||
|
||||
<img src="./ch04-img01-nano-ui.png" alt="nano的界面"/>
|
||||
|
||||
|
||||
5. 我们要做的第二件事,是【在打开的文件中找到`Port`这一项,并修改它的端口】。Port后面的数字就是SSH的端口,一般建议把它改成一个大于`1024`小于`65535`的整数(本文以`9753`为例)。请结合`nano`的快捷键,想一下该怎么操作呢?果然,你又说对了!就是:
|
||||
|
||||
- 使用 `ctrl+w` 进入搜索模式,然后输入 `Port 22` 并回车
|
||||
- 删除 `22` 并改成 `9753`
|
||||
- 说明:如果这一行开头有个`#`,证明这一行【不生效】(被注释掉了),你可像我一样在文件最后写一个不带`#`的,或者把`#`删掉就好。
|
||||
|
||||
|
||||
::: warning 注意
|
||||
本文以`9753`为例,就意味着随着本文的发布,这个端口会变成一个不大不小的特征,也许会被攻击者优先尝试、也许被GFW干扰、阻断。所以我强烈建议你用一个自己想到的其他端口,毕竟,你有6万多个端口可以自由选择。
|
||||
:::
|
||||
|
||||
|
||||
6. 我们要做的第三件事,是【保存文件并退出】
|
||||
|
||||
- 如果第3步你有仔细观察,就会发现保存并不是常见的 `ctrl+s`。
|
||||
- 正确的快捷键:保存是 `ctrl+o` + `回车`,退出是 `ctrl+x`
|
||||
|
||||
7. 我们最后要做的事,是【重启ssh服务,使变更生效】
|
||||
```
|
||||
# systemctl restart ssh
|
||||
```
|
||||
|
||||
8. 完整流程演示如下:
|
||||
|
||||
<img src="./ch04-img02-sshd-conf-full.gif" alt="修改非22端口演示"/>
|
||||
|
||||
9. 修改 PuTTY 配置
|
||||
|
||||
现在新的端口已经生效,下次使用PuTTY登录时就要用`9753`了。所以现在请到PuTTY的设置中修改端口号码,然后保存Session。嗯,你应该知道去哪里改了吧?(如果不知道的话,要重读前面的内容了哦!)
|
||||
|
||||
|
||||
|
||||
## 4.5 建立非root的新用户
|
||||
|
||||
第二步,我们来解决【用户名 = `root`】的问题。
|
||||
|
||||
首先你要理解, Linux系统中的`root`,不仅仅是一个管理员账号那么简单。它是整个系统的【根基】、是系统的主宰、至高无上的神。一旦`root`账号出现安全问题,整个系统都只能任人鱼肉、无处可逃。那么就跟随我进行操作吧:
|
||||
|
||||
1. 小小白白Linux基础命令:
|
||||
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-05` | `adduser` | 给系统新增用户 |
|
||||
| `cmd-06` | `apt install` | 安装某个软件 |
|
||||
| `cmd-07` | `visudo` | 修改sudo权限设置专用编辑器 |
|
||||
|
||||
2. 我们要做的第一件事,是【新增一个用户并设定登录密码】,名字你可以随便起,我这里以`vpsadmin`为例:
|
||||
|
||||
```
|
||||
# adduser vpsadmin
|
||||
```
|
||||
|
||||
|
||||
执行命令后,根据提示操作即可。请务必设置一个用户密码(别忘记设置密码时你时看不到 `******` 的)。之后系统会询问你一些用户的附加信息,这些就可以无视,一路回车即可。
|
||||
|
||||
<img src="./ch04-img03-adduser.png" alt="建立新用户"/>
|
||||
|
||||
::: warning 注意
|
||||
本文以`vpsadmin`为例,就意味着随着本文的发布,这个用户名也会变成一个不大不小的特征,也许会被攻击者优先尝试。所以和端口一样,我强烈建议你用一个自己想到的其他用户名。
|
||||
:::
|
||||
|
||||
4. 完整流程演示如下:
|
||||
|
||||
<img src="./ch04-img04-adduser-full.gif" alt="建立新用户"/>
|
||||
|
||||
5. 我们要做的第二件事,是【安装`sudo`功能】(`sudo` 就是在关键时刻,让普通账户临时获得 `root` 的神力,战力全开拯救世界)
|
||||
```
|
||||
# apt update && apt install sudo
|
||||
```
|
||||
|
||||
聪明的你大概已经发现,这一行命令其实是两个命令。前一半 `apt update` 你之前已经见过并且用过了,是去服务器刷新软件版本信息。后面的 `apt install` 就是这一次要用到的【安装命令】。两条连接在一起,就是让系统去【刷新可用的最新软件,然后安装最新版的`sudo`程序】。 `&&` 则是把两个命令连起来执行的意思。
|
||||
|
||||
6. 我们要做的第三件事,是【把`vpsadmin`用户加入`sudo`名单里,让他有资格借用`root`的神力】
|
||||
|
||||
```
|
||||
# visudo
|
||||
```
|
||||
|
||||
在 `User Privilege Specification` 下加入一行 `vpsadmin ALL=(ALL) NOPASSWD: ALL` 即可。
|
||||
|
||||
|
||||
::: warning 注意
|
||||
我要特别说明的是`NOPASSWD`这个设置,它的意思是`vpsadmin`用户临时使用`root`权限时,不用额外输入密码。**这与一般的安全建议相反**。我之所以如此推荐,是因为很多新人不顾危险坚持使用`root`账号就是因为用`root`时不用重复输入密码、觉得轻松。“两害相权取其轻”,我认为【直接用`root`用户的风险】大于【使用`sudo`时不用输密码的风险】,所以做了以上的建议。
|
||||
|
||||
如果你希望遵守传统习惯、每次使用`sudo`时需要输入密码,那么这一行改成 `vpsadmin ALL=(ALL:ALL) ALL` 即可。
|
||||
:::
|
||||
|
||||
7. 完整流程演示如下:
|
||||
|
||||
<img src="./ch04-img05-sudo-full.gif" alt="建立新用户"/>
|
||||
|
||||
|
||||
|
||||
## 4.6 禁用root用户SSH远程登录
|
||||
|
||||
1. 现在你已经逐渐熟悉Linux了,所以这次换你思考,我们要做的第一件事是什么呢?没错,还是【用`nano`编辑器打开`SSH远程登录程序设置`】,什么,你想不起来怎么操作了?那去复习一下上面的内容再回来吧!............ 正确答案:
|
||||
```
|
||||
# nano /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
2. 找到`PermitRootLogin Yes`这一项,然后把它后面的设定值改为`no`即可。还记得怎么操作吗?............ 正确答案:
|
||||
- 使用 `ctrl+w` 进入搜索模式,然后输入 `PermitRootLogin` 并回车
|
||||
- 删除 `yes` 并改成 `no`
|
||||
|
||||
3. 保存文件并退出。还记得怎么操作吗?............ 正确答案:
|
||||
- 保存是 `ctrl+o`,然后 `回车` 确认
|
||||
- 退出是 `ctrl+x`
|
||||
|
||||
4. 重启ssh服务,让变更生效。还记得............ 算了直接公布正确答案:
|
||||
```
|
||||
# systemctl restart ssh
|
||||
```
|
||||
|
||||
5. 完整流程演示如下:
|
||||
|
||||
<img src="./ch04-img06-ssh-no-root-full.gif" alt="禁用root用户SSH远程登录"/>
|
||||
|
||||
6. 下次通过PuTTY远程SSH登录的时候,`root`用户已无法连接,用户名就要换成`vpsadmin`了!方便起见,我们可以在PuTTY中把`vpsadmin`设置成默认登录用户名。(啰嗦君:别忘了保存Session)
|
||||
|
||||
<img src="./ch04-img07-putty-default-user.png" alt="PuTTY设置默认用户名"/>
|
||||
|
||||
|
||||
|
||||
## 4.7 使用RSA密钥登录并禁用密码登录
|
||||
|
||||
第三步,我们来解决【密码】可能被撞破的问题。
|
||||
|
||||
前面我说过,黑客并不是很蠢的用穷举法破解你的密码,而是会用一些比如“密码表”的作弊手段。除非你用的是随机生成的超长密码(比如借助1Password,或者macOS的keychain等密码管理工具),否则很容易中招。
|
||||
|
||||
超长随机密码虽然安全性有所提高,但是基本上无法记忆,手动输入也十分麻烦易错。为了解决这个困境,我们可以直接弃用【密码验证】方式,改用更安全的【密钥验证】。
|
||||
|
||||
所谓的【密钥验证】,就是生成【一对】相关联的密钥文件(公钥和私钥),然后把【公钥】上传到VPS备用。每次登录时,SSH会将【公钥】和【私钥】进行匹配,若验证是正确的【密钥对】,则验证通过。(换言之,你无需记忆和输入复杂的密码,只要保护好【私钥】这个文件不外泄即可)
|
||||
|
||||
::: warning 注意
|
||||
本文以 `RSA` 密钥举例,是因为 `RSA` 密钥在各种设备、各种 `SSH` 客户端中有广泛悠久的支持历史,且目前依然能提供够用的安全性。但它绝非唯一选择。
|
||||
|
||||
其他的常见密钥还有:
|
||||
|
||||
- `DSA` - 已经从数学层面被证明不安全,所以永远不要用它
|
||||
- `ECDSA` - 密钥小安全性高,但其算法被指留有NSA的后门,如果你的VPS上有值得NSA关注的东西就不要用它
|
||||
- `Ed25519` - 这是一个与 `ECDSA` 十分类似的算法,故具有相似的性能优势。同时其文档全部公开,所以普遍认为无后门
|
||||
|
||||
所以,如果你的设备和软件都支持的话,我建议优先选择 `Ed25519` 密钥。
|
||||
:::
|
||||
|
||||
那我们现在就来配置【密钥验证】吧!
|
||||
|
||||
1. 运行`PuTTYgen` (PuTTY密钥生成器)。位置是 `开始菜单` --> `所有程序` --> `PuTTY (64-bit)` --> `PuTTYgen`
|
||||
1. 点击`Generate`开始生成(在界面空白处乱晃鼠标增加随机数)
|
||||
<img src="./ch04-img08-puttygen-save.png" alt="生成密钥"/>
|
||||
|
||||
::: warning 注意
|
||||
本图中是以 `2048` 位的 `RSA` 密钥为例的。但实际上,如果要获得与 `EDCSA/Ed25519` 的 `256` 位密钥相同的安全性,你需要使用 `3072` 位的 `RSA` 密钥。(即右下角的数字改成 `3072`)
|
||||
:::
|
||||
|
||||
2. 你可以给私钥设置密码,增加一层安全性
|
||||
3. 点击 `Save public key` 保存公钥,文件名为 `id_rsa.pub`
|
||||
4. 点击 `Save private key` 保存私钥,文件名为 `id_rsa` (PuTTY私钥自带`.ppk`后缀)
|
||||
5. 最重要的,将上方红框内的内容,向下滚动全部复制出来并保存,文件名为 `authorized_keys`。(用vscode保存,默认会变成带`txt`后缀的文本文件,这没关系,之后上传VPS时我们会把后缀名去掉)
|
||||
<img src="./ch04-img09-puttygen-save-keys.png" alt="保存密钥"/>
|
||||
|
||||
2. 将公钥上传至VPS的`vpsadmin`用户下
|
||||
1. 这一步就需要用到之前准备的`WinSCP`了。
|
||||
2. 去[官网](https://winscp.net/eng/index.php)下载并安装,会提示你导入PuTTY的设置,当然一键导入啦!
|
||||
<img src="./ch04-img10-winscp-import-session.png" alt="一键导入Session"/>
|
||||
|
||||
3. 如果没有提示导入或者你已经提前安装好了,那按照下图进行配置即可
|
||||
<img src="./ch04-img11-winscp-ui.png" alt="WinSCP登录设置"/>
|
||||
|
||||
4. WinSCP左边的目录就是本地电脑上的文件夹和文件,请定位到密钥所在的文件夹
|
||||
|
||||
5. WinSCP右边的目录则是VPS服务器上的文件夹和文件,默认就在 `/home/vpsadmin/` 文件夹,此时在请点击右下角 `X hidden` 来显示隐藏文件
|
||||
<img src="./ch04-img12-winscp-locations.png" alt="本地和远程文件夹"/>
|
||||
|
||||
6. 在右边(VPS中)点击右键并新建文件夹,起名`.ssh` (注意有一个`.`)
|
||||
<img src="./ch04-img13-winscp-newfolder-key.png" alt="在VPS中建立放置公钥的文件夹"/>
|
||||
|
||||
7. 将【公钥】`authorized_keys`上传到`.ssh`文件夹内
|
||||
<img src="./ch04-img14-winscp-upload-key.png" alt="上传authorized_keys"/>
|
||||
|
||||
8. 在上传时,将【公钥】从 `authorized_keys.txt` 改名为 `authorized_keys`(去掉`.txt`这个后缀名)
|
||||
<img src="./ch04-img15-winscp-rename-key.png" alt="确保没有任何后缀"/>
|
||||
|
||||
9. 完整流程演示如下:
|
||||
<img src="./ch04-img16-winscp-full.gif" alt="WinSCP操作完整演示"/>
|
||||
|
||||
3. 在VPS端设置SSH启用RSA密钥验证登录、同时禁用密码验证登录
|
||||
|
||||
1. 小小白白Linux基础命令:
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-08` | `sudo` | 用`root`权限运行某个命令 |
|
||||
| `cmd-09` | `chmod` | 修改目标文件/文件夹的权限 |
|
||||
|
||||
2. SSH远程连接到VPS上(PuTTY)
|
||||
|
||||
3. 修改 `authorized_keys` 文件权限为 `600` (仅所有者可读可写)
|
||||
```
|
||||
$ chmod 600 ~/.ssh/authorized_keys
|
||||
```
|
||||
|
||||
4. 修改 SSH 配置。这个我们已经用了很多次,但现在我们已经从无所不能的`root`变成了普通用户`vpsadmin`,此时的我们是没有权限直接编辑SSH配置的。这时候就需要使用`sudo`命令了:
|
||||
```
|
||||
$ sudo nano /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
5. 找到(`ctrl+w`) `PasswordAuthentication` 改成 `no`
|
||||
|
||||
6. 找到(`ctrl+w`) `PubkeyAuthentication` 改成 `yes`,然后保存(`ctrl+o`)退出(`ctrl+x`)
|
||||
|
||||
7. 重启SSH服务。(啰嗦君:别忘了现在需要使用`sudo`来获得权限)
|
||||
```
|
||||
$ sudo systemctl restart ssh
|
||||
```
|
||||
|
||||
8. 完整流程如下:
|
||||
|
||||
<img src="./ch04-img17-rsa-login-full.gif" alt="SSH开启密钥验证并禁用密码验证"/>
|
||||
|
||||
4. VPS端已经设置好了公钥,现在要给PuTTY指定私钥位置供登录时使用(啰嗦君:别忘了保存Session)
|
||||
|
||||
<img src="./ch04-img18-putty-privatekey-location.png" alt="PuTTY指定私钥位置"/>
|
||||
|
||||
5. 至此,【密钥登录】已成功开启、【密码验证】已成功关闭、并且还给PuTTY保存了默认的登录用户名和私钥。未来使用PuTTY登录时,载入`VPS-SERVER`配置后,点击`Open`就可以一键登录了。
|
||||
|
||||
如果你给私钥设置了密码保护,登录时当然还需要输入这个密码才能使用密钥,如下图:
|
||||
|
||||
<img src="./ch04-img19-putty-privatekey-passphrase.png" alt="输入私钥密码"/>
|
||||
|
||||
6. 别忘了给`WinSCP`也做对应的密钥设置,否则之后想要传输文件时就无法登录了:
|
||||
|
||||
<img src="./ch04-img20-winscp-privatekey-location.png" alt="WinSCP指定私钥位置"/>
|
||||
|
||||
::: warning 注意
|
||||
任何需要借助SSH进行登录的软件都需要密钥验证了,软件过多,无法逐一展示,请根据你的需要自行设置好哦
|
||||
:::
|
||||
|
||||
|
||||
|
||||
## 4.8 你的进度
|
||||
|
||||
到这里为止,你的VPS已经完成了【端口】、【用户名】、【密码】这三要素的基本安全保障,虽然远称不上固若金汤,但一般的恶意脚本应该已经无法对你造成伤害了!
|
||||
|
||||
现在我们终于有了一个安全的系统基础,下一章,我们就可以开始逐步安装配置Xray需要的基础设施了!(什么基础设施呢?一个网页,一张证书)
|
||||
|
||||
> `⬛⬛⬛⬛⬜⬜⬜⬜ 50%` :::
|
BIN
docs/document/level-0/ch05-img01-nginx-default-running.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
docs/document/level-0/ch05-img02-nginx-conf-full.gif
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
docs/document/level-0/ch05-img03-nginx-http-running.png
Normal file
After Width: | Height: | Size: 308 KiB |
155
docs/document/level-0/ch05-webpage.md
Normal file
@ -0,0 +1,155 @@
|
||||
# 【第5章】网站建设篇
|
||||
|
||||
## 5.1 为什么要做一个网站?
|
||||
|
||||
新人也许会迷惑,为什么科学上网还要建一个网站?我不会编程啊,是不是特别麻烦?
|
||||
|
||||
先回答第一个问题,建网站的原因有:
|
||||
|
||||
1. 申请合法的TLS证书(非常重要)
|
||||
2. 提供合理的回落,防止主动探测攻击,提高安全性
|
||||
3. 建设一个伪装站(如博客、私人网盘、多媒体网站、游戏网站等),直接访问时有合理的前台,使流量使用看上去更合理。
|
||||
|
||||
再回答第二个问题:
|
||||
1. 本文作为演示,仅仅使用了一个最简单的【单文件html页面 + Nginx】来搭建,以此完成上面的目标,所以【非常简单】
|
||||
2. 这个网站完全可以不仅仅是伪装,而是真的做大做强,这个复杂性就完全取决于你了
|
||||
3. 对于“伪装”和“网站运营”这个目标,需要的就是各不相同、秀出真我,需要的同学可以自行搜索学习。这个内容已经完全偏离了科学上网,本文就不深入解析了。
|
||||
|
||||
## 5.2 登录VPS、安装运行Nginx
|
||||
|
||||
1. 这里用到的,都是之前已经详解过的命令,所以就不重复讲解了。看不懂的同学可以看看前面的章节哦。
|
||||
```
|
||||
$ sudo apt update && sudo apt install nginx
|
||||
```
|
||||
|
||||
2. 完成后,Nginx已经自动运行。此时打开Windows上的浏览器并输入 `http://100.200.300.400:80`,若看到下图的界面就说明Nginx已经正常在运行了。
|
||||
|
||||
<img src="./ch05-img01-nginx-default-running.png" alt="Nginx默认界面"/>
|
||||
|
||||
|
||||
## 5.3 创建一个最简单的网页
|
||||
|
||||
1. 小小白白Linux基础命令:
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-10` | `mkdir` | 新建文件夹 |
|
||||
| `cmd-11` | `systemctl reload` | 重新加载某个服务 |
|
||||
|
||||
2. 小小白白Linux基础配置文件:
|
||||
| 编号 | 配置文件位置 | 文件说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `conf-02` | `/etc/nginx/nginx.conf` | Nginx程序设置 |
|
||||
|
||||
3. 创建一个网站专用的文件夹`/home/vpsadmin/www/webpage/`并建立网页文件`index.html`
|
||||
```
|
||||
$ mkdir -p ~/www/webpage/ && nano ~/www/webpage/index.html
|
||||
```
|
||||
|
||||
::: warning 注意
|
||||
如果你用的不是 `vpsadmin` 这个用户名,请务必理解这条命令中 `“~”` 符号的意义(这关系到【第5步】你要写的内容):
|
||||
|
||||
- 如果是 【非 `root` 用户】,`“~”` 就等价于 `/home/用户名`
|
||||
- 如果是 【 `root` 用户】,`“~”` 就等价于 `/root`
|
||||
:::
|
||||
|
||||
4. 把下面的内容完整的复制进去,然后保存(`ctrl+o`)退出(`ctrl+x`)
|
||||
```
|
||||
<html>
|
||||
<!-- Text between angle brackets is an HTML tag and is not displayed.
|
||||
Most tags, such as the HTML and /HTML tags that surround the contents of
|
||||
a page, come in pairs; some tags, like HR, for a horizontal rule, stand
|
||||
alone. Comments, such as the text you're reading, are not displayed when
|
||||
the Web page is shown. The information between the HEAD and /HEAD tags is
|
||||
not displayed. The information between the BODY and /BODY tags is displayed.-->
|
||||
<head>
|
||||
<title>Enter a title, displayed at the top of the window.</title>
|
||||
</head>
|
||||
<!-- The information between the BODY and /BODY tags is displayed.-->
|
||||
<body>
|
||||
<h1>Enter the main heading, usually the same as the title.</h1>
|
||||
<p>Be <b>bold</b> in stating your key points. Put them in a list: </p>
|
||||
<ul>
|
||||
<li>The first item in your list</li>
|
||||
<li>The second item; <i>italicize</i> key words</li>
|
||||
</ul>
|
||||
<p>Improve your image by including an image. </p>
|
||||
<p><img src="https://i.imgur.com/SEBww.jpg" alt="A Great HTML Resource"></p>
|
||||
<p>Add a link to your favorite <a href="https://www.dummies.com/">Web site</a>.
|
||||
Break up your page with a horizontal rule or two.
|
||||
</p>
|
||||
<hr>
|
||||
<p>Finally, link to <a href="page2.html">another page</a> in your own Web site.</p>
|
||||
<!-- And add a copyright notice.-->
|
||||
<p>© Wiley Publishing, 2011</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
5. 修改 `nginx.conf` 并重启 `Nginx` 服务,将`80`端口的http访问定位到刚才建立的 `html` 页面上
|
||||
1. 修改 `nginx.conf` 。
|
||||
```
|
||||
$ sudo nano /etc/nginx/nginx.conf
|
||||
```
|
||||
|
||||
2. 将下面一段,添加在 `http{}` 内,然后保存(`ctrl+o`)退出(`ctrl+x`)。(记得将域名替换为之前准备好的、包含二级域名的真实域名)
|
||||
```
|
||||
server {
|
||||
listen 80;
|
||||
server_name 二级域名.你的域名.com;
|
||||
root /home/vpsadmin/www/webpage;
|
||||
index index.html;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
::: warning 特别注意!
|
||||
如我在【第3步】中的提示所说,请务必确保 `/home/vpsadmin/www/webpage` 改成你的实际文件路径。
|
||||
:::
|
||||
|
||||
|
||||
3. 让 `nginx` 重新载入配置使其生效
|
||||
```
|
||||
$ sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
4. 完整的设置流程如下:
|
||||
|
||||
<img src="./ch05-img02-nginx-conf-full.gif" alt="网页设置演示"/>
|
||||
|
||||
5. 此时如果你访问 `http://二级域名.你的域名.com`,你看到这样的页面则说明成功:
|
||||
|
||||
<img src="./ch05-img03-nginx-http-running.png" alt="http网页成功"/>
|
||||
|
||||
|
||||
|
||||
## 5.4 常见错误的说明
|
||||
|
||||
首先,如果你一路按照文章的说明来操作,并且足够细心,那肯定不会出错。所以,我并不打算修改本文的写法。
|
||||
|
||||
那为什么依然有很多同学卡在了这一步,网页怎么也打不开呢?基本上就是两个字:**粗心**。因为这里配置可能出现的问题只有两种,原因也只有两个。
|
||||
|
||||
一、两种问题:
|
||||
|
||||
- `nginx.conf` 里面的 `/home/vpsadmin/www/webpage` 这一条,与你的实际文件路径不符,`nginx` 找不到文件
|
||||
- 路径正确,但 `nginx` 无权读取
|
||||
|
||||
二、两个原因:
|
||||
|
||||
- 使用了【非 `root` 用户】,但仍然直接拷贝文中的命令不加修改。(这基本就等于抄答案时把同学的名字一起抄过去了)
|
||||
- 坚持使用【 `root` 用户】
|
||||
|
||||
碰到错误的同学,就回过头仔细看一下【5.3】中【第3步】和【第5-2步】的说明吧。
|
||||
|
||||
::: warning
|
||||
本文前期已经用了大量篇幅说明了使用【非 `root` 用户】对安全的重要性,全文也是基于此而写。所以,因使用【 `root` 用户】而导致的问题并不在本文的设计范围里。
|
||||
|
||||
但我相信,坚持使用【 `root` 用户】的同学应该是有主见、动手能力强、或者有一定 Linux 基础的同学。问题的症结我已经全部说明了,我相信你一定可以自行解决。
|
||||
:::
|
||||
|
||||
|
||||
|
||||
## 5.5 你的进度
|
||||
|
||||
至此,Xray的第一个基础设施【网页】已经就位,我们马上就进入第二个基础设施【证书】吧!
|
||||
|
||||
> `⬛⬛⬛⬛⬛⬜⬜⬜ 62.5%` :::
|
194
docs/document/level-0/ch06-certificates.md
Normal file
@ -0,0 +1,194 @@
|
||||
# 【第6章】证书管理篇
|
||||
|
||||
## 6.1 申请TLS证书
|
||||
|
||||
接下来我们要做的,是为我们的域名申请一个真实的TLS证书,使网站具备标准TLS加密的能力及HTTPS访问的能力。这就是Xray等现阶段安全代理工具确保流量充分加密最重要的工具。
|
||||
|
||||
::: warning 注意
|
||||
请不要轻易使用自签证书。它并没有让操作简单太多,但增加了无谓的风险(如中间人攻击)。
|
||||
:::
|
||||
|
||||
这里我会使用一个叫做 [`acme.sh`](https://github.com/acmesh-official/acme.sh) 的证书管理工具,它简单、轻量、高效,并可完成证书自动更新。
|
||||
|
||||
另外,我相信,现在你已经逐渐熟悉了Linux的基础操作,所以已经多次出现的命令从本章开始不再重复截图、只做简单的描述。如果实在想不起来怎么用的话,就稍微复习一下前面的章节吧。
|
||||
|
||||
## 6.2 安装 `acme.sh`
|
||||
|
||||
1. 小小白白Linux基础命令:
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-12` | `wget` | 访问(或下载)某个网页文件 |
|
||||
| `cmd-13` | `acme.sh` | acme.sh证书管理相关的命令 |
|
||||
|
||||
2. 运行安装脚本
|
||||
```
|
||||
$ wget -O - https://get.acme.sh | sh
|
||||
```
|
||||
|
||||
3. 让 `acme.sh` 命令生效
|
||||
```
|
||||
$ . .bashrc
|
||||
```
|
||||
|
||||
4. 开启 `acme.sh` 的自动升级
|
||||
```
|
||||
$ acme.sh --upgrade --auto-upgrade
|
||||
```
|
||||
|
||||
5. 到这一步的完整流程如下图:
|
||||
|
||||
<img src="./ch06-img01-acme-install.gif" alt="acme.sh安装演示"/>
|
||||
|
||||
## 6.3 测试证书申请
|
||||
|
||||
在正式申请证书之前,我们先用测试命令(`--issue --test`)来验证是否可以成功申请,这样可以避免在本地配置有误时,反复申请证书失败,超过 Let's Encrypt 的频率上限(比如,每小时、每个域名、每个用户失败最多5次),导致后面的步骤无法进行。
|
||||
|
||||
1. 测试证书申请的命令如下(本文均以 `ECC` 证书为例,因为时至今日,实在没什么理由不用它):
|
||||
```
|
||||
$ acme.sh --issue --test -d 二级域名.你的域名.com -w /home/vpsadmin/www/webpage --keylength ec-256
|
||||
```
|
||||
|
||||
::: warning 说明
|
||||
`ECC`证书的主要优势在于它的Keysize更小,意味着同等大小下安全性的提升和加密解密速度的加快。如 ECC-256bit 的强度大约相当于 RSA-3072bit,何乐而不为呢?当然,有人说ECC证书握手会明显更快,这我觉得就有些夸张了,因为RSA握手也没有太慢,就算有差别应该也是毫秒级,很难直接感知。
|
||||
|
||||
另外,如果有些网站确实需要兼容某些古老设备的,那也还是请按需选择`RSA`证书。
|
||||
:::
|
||||
|
||||
2. 你最终应该看到类似这样的提示:
|
||||
```
|
||||
[Wed 30 Dec 2022 04:25:12 AM EST] Using ACME_DIRECTORY: https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] Using CA: https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] Create account key ok.
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] Registering account: https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] Registered
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] ACCOUNT_THUMBPRINT='CU6qmPKuRqhyTAIrF4swosR375194z_1ddUlWef8xDc'
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] Creating domain key
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] The domain key is here: /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/二级域名.你的域名.com.key
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] Single domain='二级域名.你的域名.com'
|
||||
[Wed 30 Dec 2022 04:25:13 AM EST] Getting domain auth token for each domain
|
||||
[Wed 30 Dec 2022 04:25:14 AM EST] Getting webroot for domain='二级域名.你的域名.com'
|
||||
[Wed 30 Dec 2022 04:25:14 AM EST] Verifying: 二级域名.你的域名.com
|
||||
[Wed 30 Dec 2022 04:25:23 AM EST] Pending
|
||||
[Wed 30 Dec 2022 04:25:25 AM EST] Success
|
||||
[Wed 30 Dec 2022 04:25:25 AM EST] Verify finished, start to sign.
|
||||
[Wed 30 Dec 2022 04:25:25 AM EST] Lets finalize the order.
|
||||
[Wed 30 Dec 2022 04:25:25 AM EST] Le_OrderFinalize='https://acme-staging-v02.api.letsencrypt.org/acme/finalize/490205995/7730242871'
|
||||
[Wed 30 Dec 2022 04:25:25 AM EST] Downloading cert.
|
||||
[Wed 30 Dec 2022 04:25:25 AM EST] Le_LinkCert='https://acme-staging-v02.api.letsencrypt.org/acme/cert/xujss5xt8i38waubafz2xujss5xt8i38waubz2'
|
||||
[Wed 30 Dec 2022 15:21:52 AM EST] Cert success.
|
||||
--BEGIN CERTIFICAT--
|
||||
sxlYqPvWreKgD5b8JyOQX0Yg2MLoRUoDyqVkd31PthIiwzdckoh5eD3JU7ysYBtN
|
||||
cTFK4LGOfjqi8Ks87EVJdK9IaSAu7ZC6h5to0eqpJ5PLhaM3e6yJBbHmYA8w1Smp
|
||||
wAb3tdoHZ9ttUIm9CrSzvDBt6BBT6GqYdDamMyCYBLooMyDEM4CUFsOzCRrEqqvC
|
||||
2mTTEmhvpojo5rhdTSJxibozyNWTGwoTj0v9pTUeQcGqLIzqi4DowjBHD5guwRid
|
||||
SjAFnm6JT2xUQgWFm58A1gv1OhbH1TRPUUmtE1nFEN7YiSjI4xgxqAXT3CLD2EUb
|
||||
wXlUrO6c75zSsQP4bRMzgOjJUqHtSb6IEqELzt4M7KzL5iCOruCChCo2DZxUwvVX
|
||||
tOoaAyQJzCbTqE6aUqwiKi3gVyoxvDP9mI5JdRYzsDL6GVud7EHPnYeMl9ubLZAK
|
||||
0vg84mbMP3f6mYM4KRa1cqiyOIcQPT4AzGFYVv4sm049bZQg7sd0Bz9CaFvE7yDA
|
||||
1y17XlgCDnsjxl66bqI1vkENN9XT5xeFHONqc18b5fZEKSIvdX7iWPFWp1PyMPpG
|
||||
0pMCP1EymZNFxIMJLgbWqExwLWfPc5Ib3PjBaIqhXPnw6sT2MQSxXwDupq1UJVhV
|
||||
7E3hQRVlwI4CXi6WLHJMNvNRyyK87gCrLH1bKYsPeRVaz77poWBq49zwBCts6hPY
|
||||
IeF4ltGXyANNIOPEi8vy138fRU4LYh81d8FjOtFfJZogMjwhfNvapqxPMsioPlmX
|
||||
TnZu0n7setrVNUEfTMHWqPpDgk5MPrWLA4LapqaDfEX4pwnQJLMwMi6s94z165c0
|
||||
iMRSKA1yU5zqv8aNsDfPoY4OkSPWs4MaXgRRSLBsUfZ15DwQXPk76kegHIyxWvwF
|
||||
tYw9HKR5QCMK66fa0z4aJoFVFLK0IIOGEZOanRFUCnkLUDd3QZ3YU8lEcrj7Uxos
|
||||
haiRNICyC6UfsCJ94a8vcNyMosPv3xBLMp19WXgiFYqEFQkntkv1FLRI35fjeJmg
|
||||
0fmD9VG9bkzGPHihJgQLRlCHasGf6XrdfkSsODAyCUHUHJ0RzqF4YEZMcxDxzuQ2
|
||||
YO7bFwj7S3mUdVPZ6MPasjxdyBjJgEBMch2uy4AhmudXfEBQBye8W6ZI4ztZjLVV
|
||||
FmP4SIuaNUmMe20TjR8b9NVC96AhxOanWT3mRROsdokpKQGTJvl27EHH8KuAbUOc
|
||||
G6KtPy4wslNZNXWcBy9n63RcWak12r7kAIFn38tZxmlw2WUKoRSMAH64GcDTjRQd
|
||||
Am65hBHzvGrj93wEuVNIebvNIsJOlng3HFjpIxVqKGMCIfWIKGDE3YzK3p4LbGZ6
|
||||
NZFQWYJLNVf2M9CCJfbEImPYgvctrxl39H6KVYPCw1SAdaj9NneUqmREOQkKoEB0
|
||||
x6PmNirbMscHhQPSC0JQaqUgaQFgba1ALmzRYAnYhNb0twkTxWbY7DBkAarxqMIp
|
||||
yiLKcBFc5H7dgJCImo7us7aJeftC44uWkPIjw9AKH=
|
||||
--END CERTIFICAT--
|
||||
[Wed 30 Dec 2022 15:21:52 AM EST] Your cert is in /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/二级域名.你的域名.com.cer
|
||||
[Wed 30 Dec 2022 15:21:52 AM EST] Your cert key is in /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/二级域名.你的域名.com.key
|
||||
[Wed 30 Dec 2022 15:21:52 AM EST] The intermediate CA cert is in /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/ca.cer
|
||||
[Wed 30 Dec 2022 15:21:52 AM EST] And the full chain certs is there: /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/fullchain.cer
|
||||
```
|
||||
|
||||
3. 注意:这里申请的是测试证书,没办法直接用的,只是用来证明你的域名、配置全都正确。仔细观察,你会发现给你发证书的域名是 `https://acme-staging-v02.api.letsencrypt.org`,这个 `staging` 你就理解成【测试服】吧!
|
||||
|
||||
4. 如果这一步出错的话,你可以运行下面的命令,来查看详细的申请过程和具体的错误。(看不懂就隐藏掉敏感信息后,去Xray群里问吧)
|
||||
```
|
||||
$ acme.sh --issue --test -d 二级域名.你的域名.com -w /home/vpsadmin/www/webpage --keylength ec-256 --debug
|
||||
```
|
||||
|
||||
嗯没错,就是在命令的最后加了一个 `--debug` 参数
|
||||
|
||||
5. 这一步确定成功之后,就可以申请正式的证书了。(测试证书不需要删除,它会自动被正式证书覆盖)
|
||||
|
||||
|
||||
|
||||
## 6.4 正式证书申请
|
||||
|
||||
1. 申请正式证书的命令如下(即删掉 `--test` 参数,并在最后加入 `--force`参数):
|
||||
```
|
||||
$ acme.sh --issue -d 二级域名.你的域名.com -w /home/vpsadmin/www/webpage --keylength ec-256 --force
|
||||
```
|
||||
|
||||
::: warning 说明
|
||||
`--force` 参数的意思就是,在现有证书到期前,手动(强行)更新证书。上一步我们从“测试服”申请的证书虽然不能直接用,但是它本身是尚未过期的,所以需要用到这个参数。
|
||||
:::
|
||||
|
||||
2. 你最终应该看到跟上面很像的提示:
|
||||
```
|
||||
vpsadmin@vps-server:~$ acme.sh --issue -d 二级域名.你的域名.com -w /home/vpsadmin/www/webpage --keylength ec-256
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Using CA: https://acme-v02.api.letsencrypt.org/directory
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Creating domain key
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] The domain key is here: /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/二级域名.你的域名.com.key
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Single domain='二级域名.你的域名.com'
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Getting domain auth token for each domain
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Getting webroot for domain='二级域名.你的域名.com'
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Verifying: 二级域名.你的域名.com
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Pending
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Success
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Verify finished, start to sign.
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Lets finalize the order.
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/490205996/7730242872'
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Downloading cert.
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/vsxvk0oldnuobe51ayxz4dms62sk2dwmw9zhuw'
|
||||
[Wed 30 Dec 2022 15:22:51 AM EST] Cert success.
|
||||
--BEGIN CERTIFICAT--
|
||||
sxlYqPvWreKgD5b8JyOQX0Yg2MLoRUoDyqVkd31PthIiwzdckoh5eD3JU7ysYBtN
|
||||
cTFK4LGOfjqi8Ks87EVJdK9IaSAu7ZC6h5to0eqpJ5PLhaM3e6yJBbHmYA8w1Smp
|
||||
wAb3tdoHZ9ttUIm9CrSzvDBt6BBT6GqYdDamMyCYBLooMyDEM4CUFsOzCRrEqqvC
|
||||
2mTTEmhvpojo5rhdTSJxibozyNWTGwoTj0v9pTUeQcGqLIzqi4DowjBHD5guwRid
|
||||
SjAFnm6JT2xUQgWFm58A1gv1OhbH1TRPUUmtE1nFEN7YiSjI4xgxqAXT3CLD2EUb
|
||||
wXlUrO6c75zSsQP4bRMzgOjJUqHtSb6IEqELzt4M7KzL5iCOruCChCo2DZxUwvVX
|
||||
tOoaAyQJzCbTqE6aUqwiKi3gVyoxvDP9mI5JdRYzsDL6GVud7EHPnYeMl9ubLZAK
|
||||
0vg84mbMP3f6mYM4KRa1cqiyOIcQPT4AzGFYVv4sm049bZQg7sd0Bz9CaFvE7yDA
|
||||
1y17XlgCDnsjxl66bqI1vkENN9XT5xeFHONqc18b5fZEKSIvdX7iWPFWp1PyMPpG
|
||||
0pMCP1EymZNFxIMJLgbWqExwLWfPc5Ib3PjBaIqhXPnw6sT2MQSxXwDupq1UJVhV
|
||||
7E3hQRVlwI4CXi6WLHJMNvNRyyK87gCrLH1bKYsPeRVaz77poWBq49zwBCts6hPY
|
||||
IeF4ltGXyANNIOPEi8vy138fRU4LYh81d8FjOtFfJZogMjwhfNvapqxPMsioPlmX
|
||||
TnZu0n7setrVNUEfTMHWqPpDgk5MPrWLA4LapqaDfEX4pwnQJLMwMi6s94z165c0
|
||||
iMRSKA1yU5zqv8aNsDfPoY4OkSPWs4MaXgRRSLBsUfZ15DwQXPk76kegHIyxWvwF
|
||||
tYw9HKR5QCMK66fa0z4aJoFVFLK0IIOGEZOanRFUCnkLUDd3QZ3YU8lEcrj7Uxos
|
||||
haiRNICyC6UfsCJ94a8vcNyMosPv3xBLMp19WXgiFYqEFQkntkv1FLRI35fjeJmg
|
||||
0fmD9VG9bkzGPHihJgQLRlCHasGf6XrdfkSsODAyCUHUHJ0RzqF4YEZMcxDxzuQ2
|
||||
YO7bFwj7S3mUdVPZ6MPasjxdyBjJgEBMch2uy4AhmudXfEBQBye8W6ZI4ztZjLVV
|
||||
FmP4SIuaNUmMe20TjR8b9NVC96AhxOanWT3mRROsdokpKQGTJvl27EHH8KuAbUOc
|
||||
G6KtPy4wslNZNXWcBy9n63RcWak12r7kAIFn38tZxmlw2WUKoRSMAH64GcDTjRQd
|
||||
Am65hBHzvGrj93wEuVNIebvNIsJOlng3HFjpIxVqKGMCIfWIKGDE3YzK3p4LbGZ6
|
||||
NZFQWYJLNVf2M9CCJfbEImPYgvctrxl39H6KVYPCw1SAdaj9NneUqmREOQkKoEB0
|
||||
x6PmNirbMscHhQPSC0JQaqUgaQFgba1ALmzRYAnYhNb0twkTxWbY7DBkAarxqMIp
|
||||
yiLKcBFc5H7dgJCImo7us7aJeftC44uWkPM=
|
||||
--END CERTIFICAT--
|
||||
[Wed 30 Dec 2022 15:22:52 AM EST] Your cert is in /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/二级域名.你的域名.com.cer
|
||||
[Wed 30 Dec 2022 15:22:52 AM EST] Your cert key is in /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/二级域名.你的域名.com.key
|
||||
[Wed 30 Dec 2022 15:22:52 AM EST] The intermediate CA cert is in /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/ca.cer
|
||||
[Wed 30 Dec 2022 15:22:52 AM EST] And the full chain certs is there: /home/vpsadmin/.acme.sh/二级域名.你的域名.com_ecc/fullchain.cer
|
||||
```
|
||||
|
||||
3. 仔细观察,你会发现这次给你发证书的域名是 `https://acme-v02.api.letsencrypt.org`,少了 `staging`,自然就是【正式服】了!
|
||||
|
||||
|
||||
|
||||
## 6.5 你的进度
|
||||
|
||||
至此,Xray所需要的两个基础设施终于全部就位!千呼万唤始出来的Xray马上就要揭开面纱,我们终于要进入最激动人心章节啦!
|
||||
|
||||
|
||||
> `⬛⬛⬛⬛⬛⬛⬜⬜ 75%` :::
|
BIN
docs/document/level-0/ch06-img01-acme-install.gif
Normal file
After Width: | Height: | Size: 170 KiB |
BIN
docs/document/level-0/ch07-img01-xray-install.gif
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
docs/document/level-0/ch07-img02-xray-cert-install.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
docs/document/level-0/ch07-img03-crontab-cert-renew.gif
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
docs/document/level-0/ch07-img04-xray-log-and-config.gif
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
docs/document/level-0/ch07-img05-xray-start-and-status.gif
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
docs/document/level-0/ch07-img06-bbr-proper.gif
Normal file
After Width: | Height: | Size: 404 KiB |
BIN
docs/document/level-0/ch07-img07-http-to-https.gif
Normal file
After Width: | Height: | Size: 211 KiB |
BIN
docs/document/level-0/ch07-img08-http-to-https-check.png
Normal file
After Width: | Height: | Size: 27 KiB |
556
docs/document/level-0/ch07-xray-server.md
Normal file
@ -0,0 +1,556 @@
|
||||
# 【第7章】Xray服务器篇
|
||||
|
||||
## 7.1 博观而约取,厚积而薄发
|
||||
|
||||
本文撰写过程中,大佬开玩笑的吐槽到:你这教程,居然连载了6章都还没到Xray,不知道的还以为你是“手把手教你建网站”教程呢。(我竟无法反驳.jpg!)
|
||||
|
||||
其实这样的结构是我多番思考之后的决定,毕竟只有打好基础,才能在后面事半功倍快速反超。我在群里看到许多新人连`nano`都无法正确使用,也不会用`WinSCP`,远程手写编辑出来的`config.json`自然错误百出,连查错也变得举步维艰。
|
||||
|
||||
::: warning
|
||||
经过了前6章的准备,各位已经跟我一起翻越了Linux基本操作、VPS远程管理、网页搭建、域名管理、证书申请等等几座大山。是不是回头看看,觉得其实非常简单呢?现在我们有了如此扎实的准备,接下来安装和配置Xray时会有一种【水到渠成】的轻快感觉。
|
||||
:::
|
||||
|
||||
后面要做的事情非常简单:
|
||||
1. 安装
|
||||
2. 配置(如安装TLS证书、`config.json`)
|
||||
3. 运行
|
||||
4. 优化(如更新内核、开启`bbr`、网站`http`访问自动跳转`https`等)
|
||||
|
||||
## 7.2 安装Xray
|
||||
|
||||
首先,Xray的官方载体,就是 [xray-core](https://github.com/XTLS/Xray-core) 开源项目(基于 `MPL 2.0` 开源协议)生成的二进制程序。你把这个二进制放在服务器运行,它就是服务器端;你把它下载到本地电脑运行,它就是客户端。主要区别来源于【配置】。
|
||||
|
||||
安装时,直接使用官方安装脚本就很简单直接。它提供了多种安装选项,有兴趣的可以去官方的[安装脚本仓库](https://github.com/XTLS/Xray-install)中看看脚本的说明,**本文使用的是【非root用户】安装模式**。
|
||||
|
||||
写本文时,安装脚本在使用非root账户时有一些小bug,所以我决定正好把这几步分开操作,可以顺便说明一下Linux下的删除命令。
|
||||
|
||||
1. 小小白白Linux基础命令:
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-14` | `rm` | 删除命令 |
|
||||
|
||||
2. 将安装脚本下载至本地:
|
||||
```
|
||||
$ wget https://github.com/XTLS/Xray-install/raw/main/install-release.sh
|
||||
```
|
||||
|
||||
3. 执行安装命令
|
||||
```
|
||||
$ sudo bash install-release.sh
|
||||
```
|
||||
|
||||
4. 使用完成之后可以删除该脚本
|
||||
```
|
||||
$ rm ~/install-release.sh
|
||||
```
|
||||
|
||||
::: warning
|
||||
**注意:** 使用 `rm` 命令删除文件的时候,默认其实就是删除现在所在的文件夹下的文件。但是,**我依然写了完整的路径**: `~/install-release.sh`,这是我使用 `rm` 时的一个安全习惯、也是我把安装分成几步之后想强调一下的内容。如果你听过一些“程序员从删库到跑路”之类的段子,大概就知道为什么了。
|
||||
:::
|
||||
|
||||
5. 完整流程演示如下:
|
||||
|
||||
<img src="./ch07-img01-xray-install.gif" alt="Xray服务器端安装流程演示"/>
|
||||
|
||||
## 7.3 给Xray配置TLS证书
|
||||
|
||||
虽然我们前面已经申请好了TLS证书,但是按照 [`acme.sh`的官方说明](https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E#3-copy%E5%AE%89%E8%A3%85-%E8%AF%81%E4%B9%A6),申请后的证书不建议直接使用。正确的方法是使用 `--install-cert` 命令安装给需要的程序。我们现在就来把证书安装给 `xray-core` 使用。
|
||||
|
||||
1. 为了规避非root账户的各种潜在的权限困扰,我们在vpsadmin账户下建立一个证书文件夹
|
||||
```
|
||||
$ mkdir ~/xray_cert
|
||||
```
|
||||
|
||||
2. 使用`acme.sh`的`--install-cert`正确安装(拷贝)证书文件
|
||||
```
|
||||
$ acme.sh --install-cert -d 二级域名.你的域名.com --ecc \
|
||||
--fullchain-file ~/xray_cert/xray.crt \
|
||||
--key-file ~/xray_cert/xray.key
|
||||
```
|
||||
|
||||
3. `xray.key`文件默认对其他用户不可读,所以需要赋予其可读性权限
|
||||
```
|
||||
$ chmod +r ~/xray_cert/xray.key
|
||||
```
|
||||
|
||||
4. 过程比较简单就不放动图了:
|
||||
|
||||
<img src="./ch07-img02-xray-cert-install.png" alt="Xray证书安装"/>
|
||||
|
||||
5. `acme.sh` 会每60天检查一次证书并自动更新临期证书。但据我所知是它并不会自动将新证书安装给 `xray-core`,所以我们需要新增一个系统的自动周期任务来完成这一步。
|
||||
1. 小小白白Linux基础命令:
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-15` | `crontab -e` | 编辑当前用户的定时任务 |
|
||||
|
||||
2. 建立一个脚本文件(`xray-cert-renew.sh`)
|
||||
```
|
||||
$ nano ~/xray_cert/xray-cert-renew.sh
|
||||
```
|
||||
|
||||
3. 把下面的内容复制进去,记得替换你的真实域名,然后保存退出
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
/home/vpsadmin/.acme.sh/acme.sh --install-cert -d a-name.yourdomain.com --ecc --fullchain-file /home/vpsadmin/xray_cert/xray.crt --key-file /home/vpsadmin/xray_cert/xray.key
|
||||
echo "Xray Certificates Renewed"
|
||||
|
||||
chmod +r /home/vpsadmin/xray_cert/xray.key
|
||||
echo "Read Permission Granted for Private Key"
|
||||
|
||||
sudo systemctl restart xray
|
||||
echo "Xray Restarted"
|
||||
```
|
||||
|
||||
::: warning 注意
|
||||
经大家提醒,`acme.sh` 有一个 `reloadcmd` 命令,可以在证书更新时自动执行特定命令,那么就可以指定自动给 `Xray` 安装证书,但因为 `crontab` 是 Linux 系统中一个非常有用、非常常用的功能,所以本文保留 `crontab` 的方式来更新 `Xray` 证书。(对 `reloadcmd` 感兴趣的同学可以查看 `acme.sh` 的[官方文档](https://github.com/acmesh-official/acme.sh))
|
||||
|
||||
另外,录制动图时,脚本中没有加入重启 `Xray` 的命令,是因为 `Xray` 计划支持【证书热更新】功能,即 `Xray` 会自动识别证书更新并重载证书、无需手动重启。待功能加入后,我将适当修改 `config.json` 开启此设置,并删除脚本中的重启命令。
|
||||
:::
|
||||
|
||||
4. 给这个文件增加【可执行】权限
|
||||
```
|
||||
$ chmod +x ~/xray_cert/xray-cert-renew.sh
|
||||
```
|
||||
|
||||
54. 运行 `crontab -e`,添加一个自动任务【每月自动运行一次`xray-cert-renew.sh`】 (注意不要加`sudo`,因为我们增加的是`vpsadmin`账户的自动任务。初次运行时会让你选择编辑器,当然是选择熟悉的`nano`啦!)
|
||||
```
|
||||
$ crontab -e
|
||||
```
|
||||
|
||||
5. 把下面的内容增加在文件最后,保存退出即可。
|
||||
```
|
||||
# 1:00am, 1st day each month, run `xray-cert-renew.sh`
|
||||
0 1 1 * * bash /home/vpsadmin/xray_cert/xray-cert-renew.sh
|
||||
```
|
||||
|
||||
6. 完整流程演示如下:
|
||||
|
||||
<img src="./ch07-img03-crontab-cert-renew.gif" alt="每月自动给Xray安装证书"/>
|
||||
|
||||
|
||||
|
||||
## 7.4 配置Xray
|
||||
|
||||
首先,各种配置都可以参考[官方VLESS配置示例](https://github.com/XTLS/Xray-examples)。本文会基于官方示例,配置一个最精简的方式:【单 `VLESS` 协议入站 + `80` 端口回落】,满足大多数场景的最大速度及必要安全。
|
||||
|
||||
1. 生成一个合法的 `UUID` 并保存备用(`UUID`可以简单粗暴的理解为像指纹一样几乎不会重复的ID)
|
||||
```
|
||||
$ xray uuid
|
||||
```
|
||||
|
||||
2. 建立日志文件及文件夹备用
|
||||
1. 小小白白Linux基础命令:
|
||||
| 编号 | 命令名称 | 命令说明 |
|
||||
|:--:|:--:|:--:|
|
||||
| `cmd-16` | `touch` | 建立空白文件 |
|
||||
|
||||
2. 在`vpsadmin`的文件夹内建立一个【日志专用文件夹】
|
||||
```
|
||||
$ mkdir ~/xray_log
|
||||
```
|
||||
|
||||
2. 生成所需的两个日志文件(访问日志、错误日志)
|
||||
```
|
||||
$ touch ~/xray_log/access.log && touch ~/xray_log/error.log
|
||||
```
|
||||
|
||||
::: warning 注意
|
||||
这个位置不是`Xray`标准的日志文件位置,放在这里是避免权限问题对新人的操作带来困扰。当你熟悉之后,建议回归默认位置: `/var/log/xray/access.log` 和 `/var/log/xray/error.log` 。
|
||||
:::
|
||||
|
||||
3. 因为Xray默认是nobody用户使用,所以我们需要让其他用户也有“写”的权限(`*.log` 就是所有文件后缀是`log`的文件,此时`CLI`界面的效率优势就逐渐出现了)
|
||||
```
|
||||
$ chmod a+w ~/xray_log/*.log
|
||||
```
|
||||
|
||||
3. 使用`nano`创建`Xray`的配置文件
|
||||
```
|
||||
$ sudo nano /usr/local/etc/xray/config.json
|
||||
```
|
||||
|
||||
4. 将下面的文件全部复制进去,并将之前生成的`UUID`填入第61行 `"id": "",` 之中。(填好之后的样子是 `"id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid"`),本文的这个配置文件中增加了我的各种啰嗦注解,以方便你理解每一个配置模块的功能是什么。
|
||||
|
||||
```
|
||||
// REFERENCE:
|
||||
// https://github.com/XTLS/Xray-examples
|
||||
// https://xtls.github.io/config/
|
||||
|
||||
// 常用的config文件,不论服务器端还是客户端,都有5个部分。外加小小白解读:
|
||||
// ┌─ 1_log 日志设置 - 日志写什么,写哪里(出错时有据可查)
|
||||
// ├─ 2_dns DNS-设置 - DNS怎么查(防DNS污染、防偷窥、避免国内外站匹配到国外服务器等)
|
||||
// ├─ 3_routing 分流设置 - 流量怎么分类处理(是否过滤广告、是否国内外分流)
|
||||
// ├─ 4_inbounds 入站设置 - 什么流量可以流入Xray
|
||||
// └─ 5_outbounds 出站设置 - 流出Xray的流量往哪里去
|
||||
|
||||
|
||||
{
|
||||
// 1_日志设置
|
||||
"log": {
|
||||
"loglevel": "warning", // 内容从少到多: "none", "error", "warning", "info", "debug"
|
||||
"access": "/home/vpsadmin/xray_log/access.log", // 访问记录
|
||||
"error": "/home/vpsadmin/xray_log/error.log" // 错误记录
|
||||
},
|
||||
|
||||
// 2_DNS设置
|
||||
"dns": {
|
||||
"servers": [
|
||||
"https+local://1.1.1.1/dns-query", // 首选1.1.1.1的DoH查询,牺牲速度但可防止ISP偷窥
|
||||
"localhost"
|
||||
]
|
||||
},
|
||||
|
||||
// 3_分流设置
|
||||
"routing": {
|
||||
"domainStrategy": "AsIs",
|
||||
"rules": [
|
||||
// 3.1 防止服务器本地流转问题:如内网被攻击或滥用、错误的本地回环等
|
||||
{
|
||||
"type": "field",
|
||||
"ip": [
|
||||
"geoip:private" // 分流条件:geoip文件内,名为"private"的规则(本地)
|
||||
],
|
||||
"outboundTag": "block" // 分流策略:交给出站"block"处理(黑洞屏蔽)
|
||||
},
|
||||
// 3.2 屏蔽广告
|
||||
{
|
||||
"type": "field",
|
||||
"domain": [
|
||||
"geosite:category-ads-all" // 分流条件:geosite文件内,名为"category-ads-all"的规则(各种广告域名)
|
||||
],
|
||||
"outboundTag": "block" // 分流策略:交给出站"block"处理(黑洞屏蔽)
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// 4_入站设置
|
||||
// 4.1 这里只写了一个最简单的vless+xtls的入站,因为这是Xray最强大的模式。如有其他需要,请根据模版自行添加。
|
||||
"inbounds": [
|
||||
{
|
||||
"port": 443,
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"clients": [
|
||||
{
|
||||
"id": "", // 填写你的 UUID
|
||||
"flow": "xtls-rprx-direct",
|
||||
"level": 0,
|
||||
"email": "vpsadmin@yourdomain.com"
|
||||
}
|
||||
],
|
||||
"decryption": "none",
|
||||
"fallbacks": [
|
||||
{
|
||||
"dest": 80 // 默认回落到防探测的代理
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp",
|
||||
"security": "xtls",
|
||||
"xtlsSettings": {
|
||||
"allowInsecure": false, // 正常使用应确保关闭
|
||||
"minVersion": "1.2", // TLS最低版本设置
|
||||
"alpn": [
|
||||
"http/1.1"
|
||||
],
|
||||
"certificates": [
|
||||
{
|
||||
"certificateFile": "/home/vpsadmin/xray_cert/xray.crt",
|
||||
"keyFile": "/home/vpsadmin/xray_cert/xray.key"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
// 5_出站设置
|
||||
"outbounds": [
|
||||
// 5.1 第一个出站是默认规则,freedom就是对外直连(vps已经是外网,所以直连)
|
||||
{
|
||||
"tag": "direct",
|
||||
"protocol": "freedom"
|
||||
},
|
||||
// 5.2 屏蔽规则,blackhole协议就是把流量导入到黑洞里(屏蔽)
|
||||
{
|
||||
"tag": "block",
|
||||
"protocol": "blackhole"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
5. 完整流程演示如下:
|
||||
|
||||
<img src="./ch07-img04-xray-log-and-config.gif" alt="创建日志文件及`config.json`配置文件"/>
|
||||
|
||||
|
||||
|
||||
## 7.5 启动Xray服务!!(并查看服务状态)
|
||||
|
||||
如果你是跟随本文一步步设置过来,其实就已经避开了最常见**日志文件权限不足**、**证书文件权限不足** 这两个大坑。那么现在运行`Xray`自然应该无比顺利。
|
||||
|
||||
1. 输入下面的命令,享受启动`Xray`的历史性时刻吧!!!
|
||||
```
|
||||
$ sudo systemctl start xray
|
||||
```
|
||||
|
||||
2. 仅仅`start`我们并不能确定是否成功的开启了Xray的服务,要确定它的状态,就要用到下面的命令。
|
||||
```
|
||||
$ sudo systemctl status xray
|
||||
```
|
||||
|
||||
看到那个绿色的、令人愉悦的 `active (running)` 了吗?它就是说 `Xray` 已经在正确的运行了
|
||||
|
||||
3. 完整流程演示如下:
|
||||
|
||||
<img src="./ch07-img05-xray-start-and-status.gif" alt="启动并查看Xray运行状态"/>
|
||||
|
||||
|
||||
|
||||
## 7.6 回顾 `systemd` 进行基本的服务管理
|
||||
|
||||
到现在为止,我们已经使用过了`systemctl`相关的`start`, `status`, `reload` 等命令,这些都是基于`systmed`管理模块对Linux系统中各种服务进行管理的通用命令。现在正好熟悉一下相关的其他几个命令。
|
||||
|
||||
1. 若你需要暂时关闭 `Xray` 的服务,那就用`stop`命令
|
||||
```
|
||||
$ sudo systemctl stop xray
|
||||
```
|
||||
|
||||
2. 若你需要重启`Xray`的服务,那就用`restart`命令
|
||||
```
|
||||
$ sudo systemctl restart xray
|
||||
```
|
||||
|
||||
3. 若你需要禁用`Xray`的服务(电脑重启后禁止Xray自动运行),那就用`disable`命令
|
||||
```
|
||||
$ sudo systemctl disable xray
|
||||
```
|
||||
|
||||
4. 若你需要启用`Xray`的服务(电脑重启后确保Xray自动运行),那就用`enable`命令
|
||||
```
|
||||
$ sudo systemctl enable xray
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 7.7 服务器优化之一:开启BBR
|
||||
|
||||
1. 传说中的`BBR`
|
||||
|
||||
我相信,你在搜索各种科学上网技术的时候,肯定不止一次的听过`bbr`这个东西,在各种博客添油加醋之下,让人觉得它神乎其神。更有`bbrplus`, `bbr2`, `魔改bbr` 等一大堆衍生品。仿佛神油一般,用了就能野鸡线路变专线。
|
||||
|
||||
那么,这东西究竟是什么?它有没有用?又该用哪一个版本呢?
|
||||
|
||||
2. 实际的`BBR`
|
||||
|
||||
**BBR** = **B**ottleneck **B**andwidth and **R**ound-trip propagation time,是一种TCP的**拥塞控制算法**。简单粗暴的理解就是**数据流量的交通管理**:当公路不再塞车的时候,每辆车自然就能保持较快的车速了。
|
||||
|
||||
那么它有没有用呢?一般而言,`有BBR` 和 `没有BBR` 会有可以感知的差别(速度、稳定性、延迟方面都会有一些改善),所以 **【非常建议开启 `BBR`】**。
|
||||
|
||||
但开启之后,`BBR` 在 `4.x` 和 `5.x` 之间的差异往往比较微妙、见仁见智,造成体验差别的决定性因素仍然是线路质量。所以 **【不必纠结版本、不必盲目追新、跟随你的发行版更新内核即可】**
|
||||
|
||||
3. `bbrplus`, `bbr2`, `魔改bbr` 和其他各种听起来就酷炫的版本是不是更好?
|
||||
|
||||
一句话:**不是!不要用这些!这些都为了吸引眼球乱起的名字!**
|
||||
|
||||
`BBR` 的更新和发布,都是跟随Linux的内核(`Kernel`)进行的。换言之,只要你用的是比较新的内核,就自然会使用到新版`BBR`。
|
||||
|
||||
而这些名字看起来很酷炫的东西,说白了就是仍未正式发布的、尚在测试阶段的内核及其对应的`BBR`版本。这些脚本也仅仅就是通过下载预览版的内核(甚至第三方魔改内核)来率先开启而已。
|
||||
|
||||
内核的稳定是一台服务器稳定运行的基石。**【BBR测试版带来的细微性能差异绝对不值得更换不稳定的内核。】** 请选择你所在的Linux发行版所支持的最新内核,这样可以最大限度的保持服务器的长期稳定和兼容。
|
||||
|
||||
|
||||
::: warning 注意
|
||||
所谓魔改`bbr`的【领先】是有非常强的时效性的。比如很多 `bbrplus` 脚本,因为几年来都没有更新,到现在还会把你的内核换成 `4.19`,要知道现在稳定如 Debian 已经是 `5.9` 的时代了,那么这个脚本放在2018年1月也许领先了一点,到2018年10月4.19正发布时就已经失去了意义,放在现在甚至可以说是完完全全的【降级】和【劣化】
|
||||
:::
|
||||
|
||||
|
||||
4. `fq`, `fq_codel`, `fq_pie`, `cake`和其他算法哪个好?
|
||||
|
||||
一句话:**看不懂的话,请保持`fq`,足够、且不会劣化你的线路**
|
||||
|
||||
5. 锐速、Finalspeed、LotServer和其他“加速工具”
|
||||
|
||||
一句话:**不要用这些!把他们丢进历史的垃圾桶吧!**
|
||||
|
||||
它能解决的也只有丢包率的问题。不太准确的比喻,就是本来你用一辆车送你的货,有时候车半路就坏了(丢包),用了这些以后,你直接派出3份一样的货,让三辆车同时送,只要有一辆没坏就能送到。马路上都是你的车,自然就能把别人挤下去。但可想而知,你挤别人的时候,别人也会来挤你,而整个机房的出口道路一共就那么宽,最终势必就变成集体大堵车了。
|
||||
|
||||
::: warning 说明
|
||||
它们的原理不是算法优化、不是提速、大多数是简单粗暴的**多倍发包**。对于【丢包率非常高】的差线路可能有一点作用,但【对丢包率低的好线路没有任何优化作用,反而会成倍的消耗你的流量】,进而造成服务器和你的邻居不必要的压力。
|
||||
|
||||
如果你的线路真的丢包率奇高,真正靠谱的解决方案是【换线路】。
|
||||
:::
|
||||
|
||||
6. 啰嗦了这么多,就是因为围绕 `BBR` 忽悠小白的错误概念和坑人脚本实在是太多了。我希望你们现在对 `BBR` 有了相对清晰的理解。接下来,我们就动手安装最新的Debian内核并开启`BBR` 吧!(真的很简单)
|
||||
1. 给 Debian 10 添加官方 `backports` 源,获取更新的软件库
|
||||
```
|
||||
$ sudo nano /etc/apt/sources.list
|
||||
```
|
||||
|
||||
::: warning 说明
|
||||
本文以 Debian 10 为例,所以使用 `/etc/apt/sources.list` 仍无问题,但如果你并不是根据本文从头开始,或者使用了其他Linux发行版,那么建议你建立 `/etc/apt/sources.list.d/` 文件夹,并在这个文件夹内建立自己的配置文件,形如 `/etc/apt/sources.list.d/vpsadmin.list`,以此保证兼容性,也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。
|
||||
:::
|
||||
|
||||
|
||||
2. 然后把下面这一条加在最后,并保存退出。
|
||||
```
|
||||
deb http://deb.debian.org/debian buster-backports main
|
||||
```
|
||||
|
||||
3. 刷新软件库并查询 Debian 官方的最新版内核并安装。请务必安装你的VPS对应的版本(本文以比较常见的【amd64】为例)。
|
||||
```
|
||||
$ sudo apt update && sudo apt -t buster-backports install linux-image-amd64
|
||||
```
|
||||
|
||||
::: warning 注意
|
||||
如果你的VPS支持,可以尝试【云服务器专用内核】`linux-image-cloud-amd64`,优点就是精简、资源占用低,缺点嘛是有同学反馈不支持的系统强行安装会导致无法开机(Kernel无法识别)。
|
||||
|
||||
为了避免无法识别的悲剧,请确保:
|
||||
- 尝试前做一个系统快照,或者
|
||||
- 你有 `vnc` 可以救场(并且你知道怎么用)
|
||||
:::
|
||||
|
||||
4. 修改 `kernel` 参数配置文件 `sysctl.conf` 并指定开启 `BBR`
|
||||
```
|
||||
$ sudo nano /etc/sysctl.conf
|
||||
```
|
||||
|
||||
::: warning 说明
|
||||
本文以 Debian 10 为例,所以使用 `/etc/sysctl.conf` 仍无问题,但如果你并不是跟着本文从头开始,或者使用了其他Linux发行版,那么建议你建立 `/etc/sysctl.d/` 文件夹,并在这个文件夹内建立自己的配置文件,形如 `/etc/sysctl.d/vpsadmin.conf`,以此保证兼容性,因为部分发行版在 `systemd` 207 版本之后便不再从 `/etc/sysctl.conf` 读取参数。使用自定义配置文件也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。
|
||||
:::
|
||||
|
||||
|
||||
5. 把下面的内容添加进去
|
||||
```
|
||||
net.core.default_qdisc=fq
|
||||
net.ipv4.tcp_congestion_control=bbr
|
||||
```
|
||||
|
||||
6. 重启VPS、使内核更新和`BBR`设置都生效
|
||||
```
|
||||
$ sudo reboot
|
||||
```
|
||||
|
||||
7. 完整流程演示如下:
|
||||
|
||||
::: warning
|
||||
**啰嗦君:** 因为我做展示的VPS支持云服务器专用内核,所以动图中我用了 `linux-image-cloud-amd64` 。如果你不确定你的VPS是否支持,那请务必按照第3步的命令,使用常规内核 `linux-image-amd64`。
|
||||
:::
|
||||
|
||||
<img src="./ch07-img06-bbr-proper.gif" alt="更新Debian内核并开启`BBR`"/>
|
||||
|
||||
|
||||
8. 确认`BBR`开启
|
||||
|
||||
如果你想确认 `BBR` 是否正确开启,可以使用下面的命令:
|
||||
|
||||
```
|
||||
$ lsmod | grep bbr
|
||||
```
|
||||
|
||||
此时应该返回这样的结果:
|
||||
|
||||
```
|
||||
tcp_bbr
|
||||
```
|
||||
|
||||
如果你想确认 `fq` 算法是否正确开启,可以使用下面的命令:
|
||||
|
||||
```
|
||||
$ lsmod | grep fq
|
||||
```
|
||||
|
||||
此时应该返回这样的结果:
|
||||
|
||||
```
|
||||
sch_fq
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 7.8 服务器优化之二:开启HTTP自动跳转HTTPS
|
||||
|
||||
1. 之前我们已经搭建了 `80` 端口的 `http` 网页,并以此申请了TLS证书。
|
||||
|
||||
但如果你尝试过用浏览器访问我们的这个界面,就会发现 `http` 访问并不会像大多数网站一样自动升级为 `https` 访问。换言之,我们现在的设置下,`http(80)` 和 `https(443)`之间完全是独立的。如果要解决这个问题,就需要做一些修改。
|
||||
|
||||
2. 编辑Nginx的配置文件
|
||||
```
|
||||
$ sudo nano /etc/nginx/nginx.conf
|
||||
```
|
||||
|
||||
3. 在我们设置过的80端口Server中加入下面的语句,并保存退出(可同时删除`root`和`index`两行)
|
||||
```
|
||||
return 301 https://$http_host$request_uri;
|
||||
```
|
||||
|
||||
4. 在与 `80` 端口同级的位置增加一个本地端口监听来提供网页展示。本文以 `8080` 端口做演示。(可以是任意端口)
|
||||
```
|
||||
server {
|
||||
listen 127.0.0.1:8080;
|
||||
root /home/vpsadmin/www/webpage;
|
||||
index index.html;
|
||||
add_header Strict-Transport-Security "max-age=63072000" always;
|
||||
}
|
||||
```
|
||||
|
||||
5. 重启 Nginx 服务
|
||||
```
|
||||
$ sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
6. 修改Xray的回落设置,将回落从 `80` 端口改为 `8080` 端口。(找到 `"dest": 80`, 并改成 `"dest": 8080`)
|
||||
```
|
||||
$ sudo nano /usr/local/etc/xray/config.json
|
||||
```
|
||||
|
||||
7. 重启 `Xray` 服务,即完成了设置
|
||||
```
|
||||
$ sudo systemctl restart xray
|
||||
```
|
||||
|
||||
8. 完整流程演示如下:
|
||||
|
||||
<img src="./ch07-img07-http-to-https.gif" alt="http自动跳转https"/>
|
||||
|
||||
9. 当你输入 `http://a-name.yourdomain.com`的时候,它应该已经会自动跳转https了
|
||||
|
||||
<img src="./ch07-img08-http-to-https-check.png" alt="http自动跳转https生效"/>
|
||||
|
||||
|
||||
|
||||
## 7.9 服务器优化之三:更丰富的回落
|
||||
|
||||
如果你需要更丰富的回落功能,可以参考 [《回落 (fallbacks) 功能简析》](../../level-1/fallbacks-lv1/)
|
||||
|
||||
|
||||
|
||||
## 7.10 你的进度
|
||||
|
||||
恭喜!!到这一步,你已经拥有了可以正常科学上网的服务器、同时也有了可以防止主动探测攻击的伪装网站。接下来,只要给你的客户端装上合适的软件,就可以享受顺畅的网络了!
|
||||
|
||||
> `⬛⬛⬛⬛⬛⬛⬛⬜ 87.5%`
|
||||
|
||||
## 7.11 重要勘误
|
||||
|
||||
1. 初版中`Xray`配置文件`config.json`文件夹位置错误。若你已经根据之前的位置进行了操作,`Xray`会无法正确启动。故勘误说明于此,请自查,造成不便十分抱歉!
|
||||
|
||||
- 正确位置:`/usr/local/etc/xray/config.json`
|
||||
- 错误位置:`/usr/local/etc/config.json`
|
||||
|
||||
受影响章节:
|
||||
|
||||
- 7.4 配置`Xray` - 3. 使用`nano`创建`Xray`的配置文件
|
||||
- 7.8 服务器优化之二 - 6. 修改`Xray`的回落设置
|
||||
|
||||
|
||||
2. 初版中修改`Nginx`配置文件`nginx.conf`时内容错误(网页文件夹位置错误),若你已经根据之前的位置进行了操作,`Nginx`会无法找到正确的网站。请自查,造成不便十分抱歉!
|
||||
|
||||
- 正确文件夹位置:`root /home/vpsadmin/www/webpage;`
|
||||
- 错误文件夹位置:`root /var/www/website/html`
|
||||
|
||||
受影响章节:
|
||||
|
||||
- 7.8 服务器优化之二 - 4. 在与 `80` 端口同级的位置增加一个本地端口监听来提供网页展示
|
BIN
docs/document/level-0/ch08-img01-flow.png
Normal file
After Width: | Height: | Size: 335 KiB |
BIN
docs/document/level-0/ch08-img02-buzz.png
Normal file
After Width: | Height: | Size: 686 KiB |
340
docs/document/level-0/ch08-xray-clients.md
Normal file
@ -0,0 +1,340 @@
|
||||
# 【第8章】Xray客户端篇
|
||||
|
||||
## 8.1 Xray的工作原理简述
|
||||
|
||||
要正确的配置和使用`Xray`,就需要正确的理解其工作原理,对于新人,可以先看看下面简化的示意图(省略了许多复杂的设置):
|
||||
|
||||
<img src="./ch08-img01-flow.png" alt="Xray数据流向"/>
|
||||
|
||||
这其中的关键点是:
|
||||
|
||||
1. APP要主动或借助转发工具,将数据【流入(`inbounds`)】`Xray` 客户端
|
||||
|
||||
2. 流量进入客户端后,会被【客户端路由(`routing`)】按规则处理后,向不同方向【流出`(outbounds)`】`Xray` 客户端。比如:
|
||||
|
||||
1. 国内流量直连(`direct`)
|
||||
2. 国外流量转发VPS(`proxy`)
|
||||
3. 广告流量屏蔽(`block`)
|
||||
|
||||
3. 向VPS转发的国外流量,会跨过防火墙,【流入(`inbounds`)】 `Xray` 服务器端
|
||||
|
||||
4. 流量进入服务器端后,与客户端一样,会被【服务器端路由(`routing`)】按规则处理后,向不同方向【流出`(outbounds)`】:
|
||||
1. 因为已经在防火墙之外,所以流量默认直连,你就可以访问到不存在网站们了(`direct`)
|
||||
2. 如果需要在不同的VPS之间做链式转发,就可以继续配置转发规则(`proxy`)
|
||||
3. 你可以在服务器端继续禁用各种你想禁用的流量,如广告、BT下载等(`block`)
|
||||
|
||||
:::warning 注意
|
||||
**注意:** 请务必记得,`Xray` 的路由配置非常灵活,上面的说明只是无限可能性中的一种。
|
||||
|
||||
借助 `geosite.dat` 和 `geoip.dat` 这两个文件,可以很灵活的从【域名】和【IP】这两个角度、不留死角的控制流量流出的方向。这比曾经单一笼统的 `GFWList` 强大很多很多,可以做到非常细致的微调:比如可以指定Apple域名直连或转发、指定亚马逊域名代理或转发,百度的域名屏蔽等等。。。)
|
||||
|
||||
现在,[《路由 (routing) 功能简析》](../../level-1/routing-lv1-part1) 已经上线,我建议对路由功能有兴趣的同学,先继续跟着本文完成客户端的基础配置,之后再去这里详细学习。
|
||||
:::
|
||||
|
||||
## 8.2 客户端与服务器端正确连接
|
||||
|
||||
现在你已经理解了 `Xray` 的工作原理,那么接下来的配置,其实就是【告诉你的客户端如何连接VPS服务器】。这和你已经很熟悉的、告诉`PuTTY`如何远程连接服务器是一样的。只不过Xray连接时的要素不止是【IP地址】+【端口】+【用户名】+【密码】这四要素了。
|
||||
|
||||
实际上,`Xray`的连接要素是由不同的[协议](../../../config/inbound-protocols/)决定的。本文在第7章的配置文件 `config.json` 里,我们使用 `Xray` 下独特而强大的 `VLESS` 协议 + `XTLS` 流控。所以看看那个配置文件的内容就能知道,这个协议组合的连接要素有:
|
||||
|
||||
- 服务器【地址】: `a-name.yourdomain.com`
|
||||
- 服务器【端口】: `443`
|
||||
- 连接的【协议】: `vless`
|
||||
- 连接的【流控】: `xtls-rprx-direct` (direct模式适合全平台,若是Linux/安卓用户,可改成 `xtls-rprx-splice` 性能全开)
|
||||
- 连接的【验证】: `uuiduuid-uuid-uuid-uuiduuiduuid`
|
||||
- 连接的【安全】: `"allowInsecure": false`
|
||||
|
||||
鉴于新人一般都会使用手机APP或者电脑的GUI客户端,我就把常用的客户端罗列在下面。每个客户端都有自己独特的配置界面,逐一截图展示并不现实,所以请你务必仔细阅读这些客户端的说明、然后把上述要素填入合适的地方即可。
|
||||
|
||||
:::warning 注意
|
||||
许多工具其实是同时支持 `xray-core` 和 `v2fly-core` 的,但默认内置的不一定是哪个,所以别忘记检查一下是否是你想要的那个在工作哦!
|
||||
:::
|
||||
|
||||
- **v2rayN - 适用于Windows平台**
|
||||
- 请从它的[GitHub仓库Release页面](https://github.com/2dust/v2rayN/releases)获取最新版
|
||||
- 请根据该客户端的说明进行设置
|
||||
|
||||
- **v2rayNG - 适用于Android平台**
|
||||
- 请从它的[GitHub仓库Release页面](https://github.com/2dust/v2rayNG/releases)获取最新版
|
||||
- 请根据该客户端的说明进行设置
|
||||
|
||||
- **Shadowrocket - 适用于iOS, 基于苹果M芯片的macOS**
|
||||
- 你需要注册一个【非中国区】的iCloud账户
|
||||
- 你需要通过 App Store 搜索并购买
|
||||
- 请根据该客户端的说明进行设置
|
||||
|
||||
- **Qv2ray - 跨平台图形界面,适用于Linux, Windows, macOS**
|
||||
- 请从它的[GitHub仓库Release页面](https://github.com/Qv2ray/Qv2ray/releases)获取最新版(还可以从它的[GitHub自动构建仓库](https://github.com/Qv2ray/Qv2ray/actions)寻找更新的版本)
|
||||
- 请从它的[项目主页](https://qv2ray.net/)学习文档
|
||||
- 请根据该客户端的说明进行设置
|
||||
|
||||
到这一步,你的全套配置就已经可以正常使用啦!
|
||||
|
||||
## 8.3 附加题 1:在PC端手工配置 `xray-core`
|
||||
|
||||
虽然到上面一步已经可以结束了,但是如果你是个好奇心强、记忆力好的的同学,一定会想起来我在上一章说过,你把`xray-core` 的二进制文件“放在服务器运行,它就是服务器端;你把它下载到本地电脑运行,它就是客户端。” 那究竟要怎样直接使用 `xray-core` 做客户端呢?
|
||||
|
||||
为了回答这个问题,我加入了附加题章节,有一点点超纲,有一点点麻烦,但费这个笔墨是因为这个方式有它的优势:
|
||||
|
||||
- 第一时间获得最新版而无需等待APP升级适配
|
||||
|
||||
- 灵活自由的路由配置能力(当然GUI客户端中Qv2ray的高级路由编辑器非常强大,也可以完整实现xray-core的路由配置功能)
|
||||
|
||||
- 节约系统资源 (GUI界面一定会有资源消耗,消耗的多少则取决于客户端的实现)
|
||||
|
||||
它的劣势应该就是【需要手写配置文件】有点麻烦了。但其实,你想想,服务器上你已经成功的写过一次了,现在又有什么区别呢?接下来,还是老样子,我们分解一下步骤:
|
||||
|
||||
1. 首先请从Xray官方的 [GitHub仓库Release页面](https://github.com/XTLS/Xray-core/releases) 获取对应平台的版本,并解压缩到合适的文件夹
|
||||
2. 在合适的文件夹建立空白配置文件:`config.json` (自己常用平台下新建文件大家肯定都会,这就真不用啰嗦了)
|
||||
3. 至于什么是“合适的文件夹”?这就取决于具体的平台了~
|
||||
4. 填写客户端配置
|
||||
- 我就以 `8.1` 原理说明里展示的基本三类分流(国内流量直连、国际流量转发VPS、广告流量屏蔽),结合 `8.2` 的连接要素,写成一个配置文件
|
||||
- 请将 `uuid` 替换成与你服务器一致的 `uuid`
|
||||
- 请将 `address` 替换成你的真实域名
|
||||
- 请将 `serverName` 替换成你的真实域名
|
||||
- 各个配置模块的说明我都已经(很啰嗦的)放在对应的配置点上了
|
||||
|
||||
|
||||
```
|
||||
// REFERENCE:
|
||||
// https://github.com/XTLS/Xray-examples
|
||||
// https://xtls.github.io/config/
|
||||
|
||||
// 常用的config文件,不论服务器端还是客户端,都有5个部分。外加小小白解读:
|
||||
// ┌─ 1_log 日志设置 - 日志写什么,写哪里(出错时有据可查)
|
||||
// ├─ 2_dns DNS-设置 - DNS怎么查(防DNS污染、防偷窥、避免国内外站匹配到国外服务器等)
|
||||
// ├─ 3_routing 分流设置 - 流量怎么分类处理(是否过滤广告、是否国内外分流)
|
||||
// ├─ 4_inbounds 入站设置 - 什么流量可以流入Xray
|
||||
// └─ 5_outbounds 出站设置 - 流出Xray的流量往哪里去
|
||||
|
||||
|
||||
{
|
||||
// 1_日志设置
|
||||
// 注意,本例中我默认注释掉了日志文件,因为windows, macOS, Linux 需要写不同的路径,请自行配置
|
||||
"log": {
|
||||
// "access": "/home/local/xray_log/access.log", // 访问记录
|
||||
// "error": "/home/local/xray_log/error.log", // 错误记录
|
||||
"loglevel": "warning" // 内容从少到多: "none", "error", "warning", "info", "debug"
|
||||
},
|
||||
|
||||
// 2_DNS设置
|
||||
"dns": {
|
||||
"servers": [
|
||||
// 2.1 国外域名使用国外DNS查询
|
||||
{
|
||||
"address": "1.1.1.1",
|
||||
"domains": [
|
||||
"geosite:geolocation-!cn"
|
||||
]
|
||||
},
|
||||
// 2.2 国内域名使用国内DNS查询,并期待返回国内的IP,若不是国内IP则舍弃,用下一个查询
|
||||
{
|
||||
"address": "223.5.5.5",
|
||||
"domains": [
|
||||
"geosite:cn"
|
||||
],
|
||||
"expectIPs": [
|
||||
"geoip:cn"
|
||||
]
|
||||
},
|
||||
// 2.3 作为2.2的备份,对国内网站进行二次查询
|
||||
{
|
||||
"address": "114.114.114.114",
|
||||
"domains": [
|
||||
"geosite:cn"
|
||||
]
|
||||
},
|
||||
// 2.4 最后的备份,上面全部失败时,用本机DNS查询
|
||||
"localhost"
|
||||
]
|
||||
},
|
||||
|
||||
// 3_分流设置
|
||||
// 所谓分流,就是将符合否个条件的流量,用指定`tag`的出站协议去处理(对应配置的5.x内容)
|
||||
"routing": {
|
||||
"domainStrategy": "AsIs",
|
||||
"rules": [
|
||||
// 3.1 广告域名屏蔽
|
||||
{
|
||||
"type": "field",
|
||||
"domain": [
|
||||
"geosite:category-ads-all"
|
||||
],
|
||||
"outboundTag": "block"
|
||||
},
|
||||
// 3.2 国内域名直连
|
||||
{
|
||||
"type": "field",
|
||||
"domain": [
|
||||
"geosite:cn"
|
||||
],
|
||||
"outboundTag": "direct"
|
||||
},
|
||||
// 3.3 国内IP直连
|
||||
{
|
||||
"type": "field",
|
||||
"ip": [
|
||||
"geoip:cn",
|
||||
"geoip:private"
|
||||
],
|
||||
"outboundTag": "direct"
|
||||
},
|
||||
// 3.4 国外域名代理
|
||||
{
|
||||
"type": "field",
|
||||
"domain": [
|
||||
"geosite:geolocation-!cn"
|
||||
],
|
||||
"outboundTag": "proxy"
|
||||
}
|
||||
// 3.5 默认规则
|
||||
// 在Xray中,任何不符合上述路由规则的流量,都会默认使用【第一个outbound(5.1)】的设置,所以一定要把转发VPS的outbound放第一个
|
||||
]
|
||||
},
|
||||
|
||||
// 4_入站设置
|
||||
"inbounds": [
|
||||
// 4.1 一般都默认使用socks5协议作本地转发
|
||||
{
|
||||
"tag": "socks-in",
|
||||
"protocol": "socks",
|
||||
"listen": "127.0.0.1", // 这个是通过socks5协议做本地转发的地址
|
||||
"port": 10800, // 这个是通过socks5协议做本地转发的端口
|
||||
"settings": {
|
||||
"udp": true
|
||||
}
|
||||
},
|
||||
// 4.2 有少数APP不兼容socks协议,需要用http协议做转发,则可以用下面的端口
|
||||
{
|
||||
"tag": "http-in",
|
||||
"protocol": "http",
|
||||
"listen": "127.0.0.1", // 这个是通过http协议做本地转发的地址
|
||||
"port": 10801 // 这个是通过http协议做本地转发的端口
|
||||
}
|
||||
],
|
||||
|
||||
// 5_出站设置
|
||||
"outbounds": [
|
||||
// 5.1 默认转发VPS
|
||||
// 一定放在第一个,在routing 3.5 里面已经说明了,这等于是默认规则,所有不符合任何规则的流量都走这个
|
||||
{
|
||||
"tag": "proxy",
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"vnext": [
|
||||
{
|
||||
"address": "a-name.yourdomain.com", // 替换成你的真实域名
|
||||
"port": 443,
|
||||
"users": [
|
||||
{
|
||||
"id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid", // 和服务器端的一致
|
||||
"flow": "xtls-rprx-direct", // Windows, macOS 同学保持这个不变
|
||||
// "flow": "xtls-rprx-splice", // Linux和安卓同学请改成Splice性能更强
|
||||
"encryption": "none",
|
||||
"level": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp",
|
||||
"security": "xtls",
|
||||
"xtlsSettings": {
|
||||
"serverName": "a-name.yourdomain.com", // 替换成你的真实域名
|
||||
"allowInsecure": false // 禁止不安全证书
|
||||
}
|
||||
}
|
||||
},
|
||||
// 5.2 用`freedom`协议直连出站,即当routing中指定'direct'流出时,调用这个协议做处理
|
||||
{
|
||||
"tag": "direct",
|
||||
"protocol": "freedom"
|
||||
},
|
||||
// 5.3 用`blackhole`协议屏蔽流量,即当routing中指定'block'时,调用这个协议做处理
|
||||
{
|
||||
"tag": "block",
|
||||
"protocol": "blackhole"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 8.4 附加题 2:在PC端手工运行 `xray-core`
|
||||
|
||||
写好了配置文件该,要怎么让 `xray-core` 运行起来呢?双击好像并没有反应啊?
|
||||
|
||||
首先,你要找到电脑上的【命令行界面】。
|
||||
|
||||
1. Linux桌面、macOS系统的同学肯定已经比较熟悉了,搜索 `Console` 或者 `Terminal` 就可以
|
||||
2. Windows就可以搜索使用 `Cmd` 或者 `Powershell` 等程序(WSL的同学你坐下,你的 `Console` 当然也可以)
|
||||
|
||||
其次,我们要做的事情是【让 `xray` 找到并读取配置文件 `config.json`,然后运行】,所以:
|
||||
|
||||
1. 在Windows下,假设你的 `Xray` 程序位置是 `C:\Xray-windows-64\xray.exe`,配置文件位置是`C:\Xray-windows-64\config.json`,那么正确的启动命令就是:
|
||||
|
||||
```
|
||||
C:\Xray-windows-64\xray.exe -c C:\Xray-windows-64\config.json
|
||||
```
|
||||
|
||||
:::warning 说明
|
||||
这里的 `-c` 就是指定配置文件路径的参数,告诉 `xray` 去后面的位置找配置文件
|
||||
:::
|
||||
|
||||
2. 相似的,在Linux和macOS下,假设你的 `Xray` 程序位置是 `/usr/local/bin/xray`,配置文件位置是`/usr/local/etc/xray/config.json`,那么正确的启动命令就是
|
||||
|
||||
```
|
||||
$ /usr/local/bin/xray -c /usr/local/etc/xray/config.json
|
||||
```
|
||||
|
||||
:::warning 说明
|
||||
每个系统都有系统路径变量,所以写 `Xray` 程序时不一定要写绝对路径。但是写了肯定没错,所以我就如此演示了。
|
||||
:::
|
||||
|
||||
|
||||
|
||||
## 8.5 附加题 3:在PC端开机自动运行 `xray-core`
|
||||
|
||||
如果你真的尝试了手动运行 `xray-core`,你一定会发现这个方式还有点小问题:
|
||||
|
||||
1. 每次运行 `Xray` 都要出现一个黑乎乎的窗口,很丑
|
||||
2. 不能开机自动运行,每次都要手工输入,十分不方便
|
||||
|
||||
我可以肯定的告诉你:**完全可以解决**。但是具体的解决方式,就当作课外作业留给大家吧!(友情提示,文档站的问答区有线索哦)
|
||||
|
||||
|
||||
|
||||
## 8.6 圆满完成!
|
||||
|
||||
我相信,有耐心看到这里的同学,都是兼具好奇心和行动力的学习派!我现在要郑重的恭喜你,因为到了这里,你已经完完整整的【**从第一条命令开始,完成了VPS服务器部署,并成功的在客户端配置使用Xray**】了!这毫无疑问是一个巨大的胜利!
|
||||
|
||||
我相信,你现在一定对`Linux`不再恐惧,对`Xray`不再陌生了吧!
|
||||
|
||||
**至此,小小白白话文圆满结束!** `⬛⬛⬛⬛⬛⬛⬛⬛` **`100%`**
|
||||
|
||||
|
||||
|
||||
## 8.7 TO INFINITY AND BEYOND!
|
||||
|
||||
**但现在你看到的,远远不是Xray的全貌。**
|
||||
|
||||
`Xray`是一个强大而丰富的网络工具集合,平台化的提供了众多模块,可以像瑞士军刀一样,通过灵活的配置组合解决各种不同的问题。而本文,仅仅蜻蜓点水的用了**最简单**、**最直观**的配置来做**基础演示**。
|
||||
|
||||
如果你觉得现在已经完全够用了,那就好好的享受它给你带来的信息自由。但如果你的好奇心依然不能停歇,那就去继续挖掘它无限的可能性吧!
|
||||
|
||||
需要更多信息,可以到这里寻找:
|
||||
1. [xtls.github.io](https://xtls.github.io/) - 官方文档站
|
||||
2. [官方Telegram群组](https://t.me/projectXray) - 活跃而友善的官方讨论社区
|
||||
|
||||
<img src="./ch08-img02-buzz.png" alt="TO INFINITY AND BEYOND!"/>
|
||||
|
||||
|
||||
:::tip
|
||||
**不算后记的后记:**
|
||||
|
||||
希望我陪你走过的这一段小小的旅程,可以成为你网络生活中的一份小小助力。
|
||||
|
||||
这篇文章里的工具和信息难免会一点点的陈旧过时,但你一定会逐渐成长为大佬。未来的某个时间,若你能偶尔想起这篇教程、想起我写下本文的初衷,那我衷心希望你能够薪火相传、把最新的知识分享给后来人,让这一份小小的助力在社区里坚定的传递下去。
|
||||
|
||||
这是个大雪封山乌云密布的世界,人们孤独的走在各自的路上试图寻找阳光,如果大家偶尔交汇时不能守望相助互相鼓励,那最终剩下的,恐怕只有【千山鸟飞绝 万径人踪灭】的凄凉了吧。
|
||||
:::
|
50
docs/document/level-0/ch09-appendix.md
Normal file
@ -0,0 +1,50 @@
|
||||
# 【第9章】附录
|
||||
|
||||
## 1. 小小白白Linux基础命令索引
|
||||
|
||||
| 编号 | 命令名称 | 命令说明 | 出现篇章 |
|
||||
|:--:|:--|:--|:--:|
|
||||
| `cmd-01` | `apt update` | 查询软件更新 | [《远程登录篇》](../ch03-ssh) |
|
||||
| `cmd-02` | `apt upgrade` | 执行软件更新 | [《远程登录篇》](../ch03-ssh) |
|
||||
| `cmd-03` | `nano` | 文本编辑器 | [《安全防护篇》](../ch04-security) |
|
||||
| `cmd-04` | `systemctl restart` | 重启某个服务 | [《安全防护篇》](../ch04-security) |
|
||||
| `cmd-05` | `adduser` | 给系统新增用户 | [《安全防护篇》](../ch04-security) |
|
||||
| `cmd-06` | `apt install` | 安装某个软件 | [《安全防护篇》](../ch04-security) |
|
||||
| `cmd-07` | `visudo` | 修改sudo权限设置专用编辑器 | [《安全防护篇》](../ch04-security) |
|
||||
| `cmd-08` | `sudo` | 用`root`权限运行某个命令 | [《安全防护篇》](../ch04-security) |
|
||||
| `cmd-09` | `chmod` | 修改目标文件/文件夹的权限 | [《安全防护篇》](../ch04-security) |
|
||||
| `cmd-10` | `mkdir` | 新建文件夹 | [《网站建设篇》](../ch05-webpage) |
|
||||
| `cmd-11` | `systemctl reload` | 重新加载某个服务 | [《网站建设篇》](../ch05-webpage) |
|
||||
| `cmd-12` | `wget` | 访问(或下载)某个网页文件 | [《证书管理篇》](../ch06-certificates) |
|
||||
| `cmd-13` | `acme.sh` | acme.sh证书管理相关的命令 | [《证书管理篇》](../ch06-certificates) |
|
||||
| `cmd-14` | `rm` | 删除命令 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `cmd-15` | `crontab -e` | 编辑当前用户的定时任务 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `cmd-16` | `touch` | 建立空白文件 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `cmd-17` | `systemctl` | `systemd`基本服务管理命令 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `cmd-18` | `reboot` | 重启Linux系统 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
|
||||
|
||||
## 2. 小小白白Linux重要配置文件索引
|
||||
|
||||
| 编号 | 配置文件位置 | 文件说明 | 出现篇章 |
|
||||
|:--:|:--|:--|:--:|
|
||||
| `conf-01` | `/etc/ssh/sshd_config` | SSH远程登录程序设置 | [《远程登录篇》](../ch03-ssh) |
|
||||
| `conf-02` | `/etc/nginx/nginx.conf` | Nginx程序设置 | [《网站建设篇》](../ch05-webpage) |
|
||||
| `conf-03` | `/etc/apt/sources.list` | apt软件源列表 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `conf-04` | `/etc/apt/sources.list.d/vpsadmin.list` | 用户自定义软件源列表列表 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `conf-05` | `crontab -e` | 当前用户的定时任务 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `conf-06` | `/etc/sysctl.conf` | 手动设置kernel参数 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `conf-07` | `/etc/sysctl.d/vpsadmin.conf` | 用户自定义kernel参数配置文件 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
|
||||
|
||||
|
||||
## 3. 小小白白Xray重要文件索引
|
||||
|
||||
|
||||
| 编号 | 配置文件位置 | 文件说明 | 出现篇章 |
|
||||
|:--:|:--|:--|:--:|
|
||||
| `xray-01` | `/usr/local/etc/xray/config.json` | Xray程序设置 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `xray-02` | `/home/vpsadmin/xray_cert/xray.cert` | TLS证书 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `xray-03` | `/home/vpsadmin/xray_cert/xray.key` | TLS私钥 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `xray-04` | `/home/vpsadmin/xray_log/access.log` | Xray访问日志 | [《Xray服务器篇》](../ch07-xray-server) |
|
||||
| `xray-05` | `/home/vpsadmin/xray_log/error.log` | Xray错误日志 | [《Xray服务器篇》](../ch07-xray-server) |
|