20250903pm

This commit is contained in:
alex 2025-09-03 14:20:55 +08:00
parent 2bbc82630b
commit 5c63f7db06
11 changed files with 0 additions and 693 deletions

View file

@ -1,103 +0,0 @@
# OpenBSD relayd
在 OpenBSD 的生态中有一款低调而又强大的工具。它就是relayd也是我本人最喜欢的工具。
relayd是什么能做什么先看段演示
relayd 是 OpenBSD 系统自带的一个能实现中继转发、负载均衡与代理服务守护进程。
它最早是为 PF 防火墙做状态跟踪和高可用中继设计的,也就是说,它本质上属于 网络流量的“应用层网关” 同时又具备了反向代理、负载均衡、会话控制等功能。
relayd(8)既可以运行在 第三层L3也就是网络层也可以运行在 第七层L7也就是应用层。
它可以实现第三层重定向通过与OpenBSD的PF防火墙内核模块通信动态添加或移除重定向规则从而在网络层直接对 IP 流量做透明转发。
这种模式类似于 NAT端口地址转换比如用户访问某个 IP + 端口; PF 和 relayd 合作,把这个流量 导向指定的主机或端口上。比如之前演示的ssh网关例子
relayd(8)在第三层可以做高性能、零协议的解析,适合中继 比如SSH、数据库、VPN等原生TCP服务但无法做内容过滤、修改以及TLS解密
relayd(8)在第七层也就是应用层工作时,就会真正解析协议内容(如 HTTP 请求头、TLS的服务器指示、TCP 选项等),决定转发逻辑、是否重写字段、是否屏蔽某些内容等,也就是具有了自管理能力。
它支持协议过滤、负载均策略、流量拦截保护、以及智能调度、应用增强等。能够隐藏真实服务器,所有流量都由 relayd 接收并中继,后端服务器只能看到 relayd 的 IP屏蔽了原始客户端 IP有效缓解直接攻击。
它在第七层适合做 Web 服务、API 网关、HTTP/HTTPS反向代理、统一出口TLS代理、接口负载均衡调度以及健康度检查和监控等
不过在第七层工作时性能略逊于第三层,
relayd 不支持 UDP的转发和中继
Layer 3 模式是“透明搬运工”、马匹——你叫我转我就转;
Layer 7 模式是“智能网关”、马夫——我还要看看你是谁、说了什么,才决定怎么处理。
relayd(8) 能做什么?
首先是 TCP 中继SSH、数据库、VPN等
监听一个端口,将流量转发给后台服务器
用于SSH 网关、MySQL/Postgresql等数据库代理、OpenVPN 中继
其次是HTTP/HTTPS 反向代理
配合 OpenBSD httpd 实现完整的 Web 前端架构,并可对 Web 服务做转发、加密终止
第三是负载均衡
可实现用户会话黏连:比如同一个 IP 总是打到同一台后端服务器
第四是健康检查与监控
relayd 自带 HTTP/TCP 检测机制,支持后端状态探测,如果后端失联,自动从轮询中剔除!
第五是会话控制与 NAT 支持
可与 PF 联动,追踪每一条状态流,实现基于连接状态的高级策略控制
relayd 是“只做你需要的那一部分”,而且做得非常稳
---
上一讲我们讲了relayd的基本介绍这期我们来重点聊聊relayd在第七层的应用web服务的反向代理和负载均衡
先看下relayd最基础的http中继配置
首先是定义名为http_proxy的HTTP协议规则
pass 指令表示对HTTP流量不做额外处理比如过滤或者修改直接穿透
然后定义relay规则监听指定IP的http端口绑定上述自定义的http协议规则转发到目标地址的http端口上。
这样一个最简单最基础的web反向代理就构建成功了。但这个配置只是最简单功能的实现接下来我们配置一个完整的可用于生产环境的反向代理
我们先看下反向代理的架构拓扑图有三台Linux主机分别安装了Ubuntu143,OpenSuse148,Rocky149,都通过docker统一部署了相同的网站这三台Web服务器处于192.168.10的内网网段中外部无法直接访问。我们的目标是在外网https通过配有relayd的OpenBSD的代理服务器网关能这访问到三台内网的web的服务器并通过relayd来管理监控这三台Linux主机。
看下三台Linux Web服务器
我们按照relayd完整的配置格式来进行配置
首先定义变量集也就是Macros宏作用是让配置更清晰、可维护、容易复用当我们的服务器集群变大、变小添加修改时只需要修改这里改变变量的值就可以。
定义公网入口IP也是反向代理监听地址。定义三台内网服务器名字
接下来是全局设置interval (int v)5是设定网关对后端服务器健康度的检查频率每5秒检测一次服务状态。我们同时打开日志的记录代理状态变更比如服务器的上线或下线以及记录所有客户端连接信息的功能
全局设置完成后是设置表table是用来定义一组相同功能服务器的集合作用是配合负载均衡、转发和健康检查等机制的集中管理。我们把148和149服务器定义为主服务器组把143服务器定义为容灾备用组。
宏、全局设置、表设置完成后就是relay规则的设置
就是先定义http_proxy的协议规则然后是定义relay规则这里我们就用定义过的宏和表。mode roundrobin是负载均衡策略采用轮询调度特点是均等分配请求适用于相同配置的服务器集群。如果后端服务器集群需要权重可以设置为loadbalanceload 班纳斯模式两者的工作模式如下。此外relayd还支持random随机、通用哈希、源地址哈希等其他负载均衡算法。
check http code 200,是健康检查方法使用http get请求后端Web服务器的/目录收到200状态码后就认为Web服务器是健康的如果回返的是404或者500状态码就把服务器标记为故障节点。200是Web服务器集群负载均衡中主要使用的状态码。此外relayd还能设置icmp、host主机名解析、path请求路径、script脚本、TCP连接、TIS握手等多种健康检查方法。
设置完http relay规则后再设置https 。看这张图https方向代理的机制
tls keypair test是relayd的TLS设置正式部署中要用实际域名代替同时证书要存放在/etc/ssl目录下私钥要存放在/etc/ssl/private目录这个目录一定要切记如果证书和私钥放错目录relayd是无法启动TLS的。其他设置和http一样。我们来测试下。
relayd的基本Web反向代理设置完成但是没有SSL终结也就是把80端口重定向到443端口去relayd本身只是个中继器不具备SSL终结功能要实现此功能需要和httpd联动。我们先把relayd中的http中继规则注释掉打开httpd.conf文件打开外网IP的443重定向配置启动httpd服务。我们来测试下这样完整的web反向代理功能就完成了。
接下来我们通过relayctl命令来监控后端服务器集群的情况relayctl show summary命令是用来查看当前relayd状态的
下面说下SSH网关的配置
OK这一讲讲了relayd在第七层作为反向代理的完整配置后面继续relayd在反向代理方面的高级应用。
如果你觉得这条视频有帮助或者喜欢请点赞、转发关注我继续带你进入OpenBSD之旅。
---
上一讲讲了relayd做Web反向代理的基本功能这讲来讲下relayd在反向代理上的高阶应用
我们来看下Relayd 进行多域名路由的实例
假设我们的Web集群上跑了cloud云服务和门户网站先为每个服务器池定义表云服务服务器池2台后端门户网站服务器池1台后端
接着自定义https_proxy的协议处理规则绑定云服务域名和门户网站域名证书。定义流量分发逻辑首先作为安全基线先block 也就是默认拒绝所有流量。之后是基于SNI的路由规则如果 HTTP 请求头 Host字段中包含 cloud.website指向到 <cloud> 组。如果是 blog.website则指向到 <www> 组。加入安全代理协议头match request header set "X-Forwarded-Proto" value "https",这在反向代理中非常重要,作用是告诉后端服务器客户端原本使用的是 HTTPS 协议,即使后端收到的是 HTTP 请求。如果不设置安全代理协议头,后端就会出现严重误判,比如生成错误的 http 链接301重定向死循环误关闭安全特性混合内容错误。这条配置是代理架构中连接前后端协议信息的关键通信桥梁能有效解决因协议不一致导致的功能和安全问题。
之后是relay规则监听公网IP的443请求应用上述自定义的https_proxy协议规则建立后端转发规则<cloud> 组采用roundrobin轮询负载均衡算法通过 get 后端<cloud>组的http 200状态码来进行健康度检查。<www>组直接转发到80端口单服务器不用负载均衡和健康度检查。
这个实例的安全设计亮点一是风险隔离公网只暴露relayd后端服务隐藏在内网防御攻击默认block策略阻止端口扫描。用于企业级SAAS平台用多台服务器通过cloud.website承载高可用云服务同时通过www.website提供企业门户展示最大化硬件利用率。
我们再来看relayd通过另一种多路径路由实现转发的功能
设定统一的TLS证书。制定安全规则禁止CGI脚本执行但凡要访问cgi-bin目录立即拒绝封禁管理后台访问假设后台管理页面在admin目录中按实际情况修改要访问admin目录也立即拒绝。云服务路径允许访问这里假设为cloud目录其他未声明的任意路径默认转发到门户主网站上。这里block和pass指令后加了quick关键词作用是匹配到后马上停止后续规则处理以提升性能和安全响应速度。
relay规则和域名路由一样。relayd多路径路由完整流程如图。

View file

@ -1,164 +0,0 @@
# OpenBSD httpd小巧、安全、高效的 Web 服务器
说起Web服务器Apache 是老大哥Nginx 是后起之秀,这俩呢,基本算是两大巨头了。不过,要是特别注重安全、追求简单高效、还希望跟操作系统配合得严丝合缝,那 OpenBSD 自带的 httpd提供了另一个引人注目的选择
那么OpenBSD httpd 有哪些特点呢:
+ 首先是极致轻量和高效
+ httpd的代码量只有约一万行远低于其他的Web服务器这样就大大减少了潜在的漏洞面。
+ 它原生集成在OpenBSD操作系统中无需安装和繁琐的依赖资源消耗极低老旧机器也能运行。
+ 其次是以安全为设计根基
+ 默认启用libreSSL替代OpenSSL避免了常见加密库漏洞。
+ 没有动态模块加载机制,杜绝第三方模块引入的安全风险。
+ 严格遵循 pledge() 和 unveil()机制,基于 chroot 和权限分离的沙盒最大程度上限定了Web守护进程的活动范围。
+ 强大的隔离机制和限制进程权限使得即便Web服务被攻破也能最大限度的减少损害。
+ 第三简洁配置和管理
+ 单一的配置文件就是etc目录下的httpd.conf文件语法简单清晰直观和OpenBSD生态一致拥有统一配置的体验。
+ 内置有ACME艾克me客户端有个acme-client的工具能够进行自动化Lets Encrypt英快丕特证书的部署。
+ 第四关键功能完备
+ 支持静态内容分发、通过FastCGI可运行PHP、Python应用TLS加密及日志管理。
+ 支持虚拟主机、目录索引等基本的Web功能与relayd结合能实现反向代理。
httpd和Apache、Nginx区别在哪里我们来看下三者的比较
| | **OpenBSD httpd(8)** | **Apache HTTP Server** | **Nginx** |
|----------------------|--------------------------------|--------------------------------|--------------------------------|
| **架构设计** | 单进程事件驱动,无动态模块 | 多进程 / 多线程MPM模块 | 事件驱动+异步非阻塞 |
| **代码量** | 约1万行极简 | 数百万行,模块化庞大 | 约10万行轻量化 |
| **安全特性** | ✅ 严格安全审计与系统隔离 | ⚠️ 依赖模块安全,需手动加固 | ⚠️ 事件模型,相对减少漏洞风险 |
| **并发处理** | 低并发优化 | 中低并发依赖MPM模式 | 高并发支持5万+连接) |
| **配置复杂度** | 单文件配置,简单 | 多级目录配置,复杂 | 单文件+模块化配置,中等 |
| **动态内容支持** | 仅FastCGI如PHP需搭配PHP-FPM | 内置模块支持mod_php等 | 反向代理至后端服务如PHP-FPM|
| **操作系统依赖** | ❗️ 仅 OpenBSD操作系统集成 | ✅ 跨平台Linux / BSD / Windows| ✅ 跨平台Linux / BSD / Windows |
| **应用场景** | WordPress 站点、高安全 Web 站点 | 传统动态网站、企业级 CMS | 淘宝 / Netflix 高并发服务、K8s 入口|
我们看到在简洁、安全、配置度方面httpd优于apache和nginx但在并发处理、动态内容支持、跨平台方面httpd就不及Nginx和Apache还是那句话它们有不同的侧重点适用于不同的场景。httpd适合做比如wordPress的个人博客中小型的企业Web服务还有就是对安全性要求很高的网站比如欧洲一些国家的政府机构网站都是跑在OpenBSD的httpd上。但是像电商、视频点播等需要高并发的网站或者功能复杂的Web服务httpd显然是无法胜任的Nginx和Apache更合适。
说下OpenBSD和apahce、Nginx的渊源OpenBSD早期是采用Apache作为自带的web服务器Nginx崛起后OpenBSD就采用了Nginx2011年9月的5.1版本中首次采用Nginx作为自带的Web服务器当然不管是Apache还是Nginx都是经过OpenBSD审计和修改后的版本。后来由于OpenBSD和Nginx两个团队在理念上的严重分歧而分道扬镳。OpenBSD也是从此下定决心自己开发Web服务器这就有了httpd的诞生。2015年11月httpd正式纳入5.6版本中Nginx从此被移除不过Apache和Nginx还是能通过OpenBSD官方的二进制包和ports源码进行安装。而且都能在OpenBSD系统上稳定的运行。有很多的Web站点就是OpenBSD+Apache或者Nginx。
以下使用httpd过程中所涉及到的配置文件、控制命令、日志管理和文档。
---
我们来进行httpd的配置我们已经打开了/etc/httpd.conf文件
首先是加载MIME类型MIME 类型是互联网上用来标识文档、文件或字节流性质和格式的标准标识符。这段代码确保当客户端请求一个文件(比如 pdf 或 jpgWeb服务器知道这是什么类型的文件并能告诉客户端浏览器如何处理它从而实现内容流畅和正确的显示。
+ types { include "/usr/share/misc/mime.types" }
+ types { ... }: 这段代码是一个配置块。在OpenBSD生态配置语法中大括号 {}是用于定义代码块或配置块的作用域范围。这个types配置块是表明关于Web服务器如何处理不同文件类型的。
+ include 指令就是加载系统预定义的 MIME 类型文件
+ /usr/share/misc/目录是类 Unix 和 Linux 操作系统中一个标准的目录主要用来存放一些杂项和不依赖于具体架构的共享数据文件。mime.types就是存放在这个目录中。
接下我们来看主配置模块
server "192.168.118.145" {
listen on * port 80 // 块内指令
root "/test"
directory index index.html
} // 结束 server 块
server 配置块就是定义了一个Web站点
+ 192.168.118.145这个IP是web站点的名字也同时表示服务器监听 这个IP 的Web请求。因为这里是内部网络测试所以用IP地址实际部署要换成网站域名。
+ listen 指令是监听、接受来自任意客户端的 HTTP 请求
+ root 指令是设置网站根目录。就是所有请求的文件都将从此目录中查找。例如请求 index.html 对应文件就是根目录下的/index.html。接下来重点来了之前我们讲过httpd的chroot目录是/var/www/Web守护进程只能在/var/www/目录下有控制权限test目录也就是实际系统中的/var/www/test目录。如果设置为/,就是实际系统的/var/www/。chroot是change root的简称是Unix/Linux系统中非常古老的进程文件系统隔离机制是很多现代容器比如Docker的鼻祖。
+ directory 指令指定目录的默认索引文件为 index.html。也就是当我们打开网址后默认读取index.html 文件这里也能换成index.php或者其他
OK这五行代码就实现了一个最基本的静态Http服务我们打开浏览器就能访问非常简单简洁。
如果网站要实现动态内容支持比如支持PHPhttpd要通过fastCGI来实现因为 httpd 本身不解释 PHP而是代理给 比如 PHP-FPM 这样的FastCGI进程管理器来处理自己再把处理结果返回给客户端。这和Apache通过内置模块实现不一样。
首先我们要安装PHP然后先要启动php-fpm。PHP-FPM就是PHP FastCGI Process Manager的简称这是一个由 PHP 官方维护的高性能 FastCGI 进程管理器,专门用于处理 PHP 脚本请求。他的工作流程是这样的Web服务器 收到 PHP 请求后,通过 Socket 转发给 PHP-FPM。PHP-FPM 通过内部的 master-worker 进程架构,执行到 PHP 脚本后返回给Web服务器结果。
PHP-FPM启动完成后我们在这个server配置块就要加入两个location子模块
+ 第一个location子模块就是PHP-FPM与 Web 服务器之间通过 Unix Socket 进行通信,然后来匹配所有 .php 结尾的请求路径。/run/php-fpm.sock是本地PHP-fpm的Unix Socket接口文件
+ 第二个location子模块是处理带查询参数的 PHP 请求。使得匹配规则更宽泛,确保所有类型的 PHP 请求也能被正确处理
这样配置后就实现了对php的支持我们在/test目录下写个info.php来跑下phpinfo函数
```php
<?php
phpinfo();
?>
```
然后重启或者重新加载httpd服务就可以看到php跑起来了。
下面我们来讲下https的配置再开一个 server 主模块来负责监听443端口的请求
server "192.168.118.145" {
listen on * tls port 443
root "/wordpress"
directory index index.php
tls {
certificate "/etc/ssl/testcert/test.crt"
key "/etc/ssl/testcert/test.key"
}
location "*.php" {
fastcgi socket "/run/php-fpm.sock"
}
location ".php[/?]*" {
fastcgi socket "/run/php-fpm.sock"
}
}
listen on 指令指定 httpd 监听的网站的443端口。tls 关键字表示启用 HTTPS。
网站根目录和指定目录的默认索引文件都一样我在这台机器上装了wordpress网站根目录设为/wordpress也就是实际系统的/var/www/wordpress目录index改成index.php。
tls子模块指定了SSL证书和私钥位置因为是内网测试本配置中的证书和私钥是由libreSSL本地生成的实际部署时需要加入正式授权的证书和私钥。
fastcgi 打开支持php。
OK 配置完成后重载或者重启httpd那就能https访问了。
因为这里80和443端口的根目录不一样所以我们看到http和https打开的页面是不同的。
现代如果还用用http 80端口访问web等于邮寄一张写满明文信息的明信片寄信途中任何人都能看到因此经过传输加密的https 成为主流当今几乎所有的web站点都实现了443终结也就是客户端访问80端口也会无感的重定向到443端口httpd支持80到443的重定向。
我们把之前htpp配置注释掉重新修改为以下这配置块
server "192.168.118.145" {
listen on * port 80
location * {
block return 301 "https://$HTTP_HOST$REQUEST_URI" # 永久重定向
}
}
location 后的*是通配符指的是来自80端口的全部请求
block return 301 "https://$HTTP_HOST$REQUEST_URI" 这句代码表示强制返回 HTTP 301 永久重定向响应无论HTTP请求内容是什么都会跳转到 HTTPS 协议。
block: 这个关键词非常重要。它告诉Web服务器对于任何匹配到这个 listen 规则的请求后续的任何其他处理都将被阻止。它的作用就像一个交通警察拦下所有想通过端口80的请求。
301 指的是HTTP 永久重定向状态码
302 指的是 临时重定向状态码
两者区别是前者告知浏览器资源已经永久迁移。后者表示请求的资源暂时性的迁移到新的 URL浏览器不会缓存这个重定向。每次访问旧 URL 时,浏览器仍然会先请求旧 URL然后再被重定向到新 URL302 的开销大、反应慢,不适合实际部署。
$HTTP_HOST 是Web服务器的内置变量指的是客户端请求的原始域名比如这里就是http://192.168.118.145
$REQUEST_URI 也是Web服务器的内置变量指的是原始请求的完整 URI包括全部的路径和查询字符串
完整拼接就是 http://192.168.118.145/ → 重定向到 https://192.168.118.145
我们再次重载或者重启httpd在浏览器打开http时就会发现已经重定向到https。
接下来我们看下虚拟主机的配置由于是内部测试还是通过IP地址我在em0网卡上绑了两个IP地址145和144httpd的虚拟主机很简单就是再开一个144的server主模块内容和145一样网站根目录修改为144目录也就是实际系统的/var/www/144目录同时把虚拟主机的log分离出来指定144的log文件。如果不分离log那全部都集中在/var/www/logs/下默认log文件不好管理。其他配置和145一样。
重载或者重启httpd在浏览器打开192.168.118.144就能看到虚拟主机的页面
如果在一台服务器上部署了很多虚拟主机那是不是都要每个虚拟主机都要配置80重定向443吗显然不需要
我们加入这么一个全局配置块
server "http-https" {
listen on egress port 80 block return 301 "https://$HTTP_HOST$REQUEST_URI"
}
自定义一个名叫http-https的主模块这个主模块类似于交通管制中心让本机所有的80端口请求全部进行301重定向到各自的443端口去
我们重载或重启下httpd再测试下。
我们看到httpd的配置语法简洁清晰容易理解即便是新手也能很快的部署一台功能强大的Web服务器。

View file

@ -1,103 +0,0 @@
# OpenBSD能做什么
前面我们讲了OpenBSD的安装和基本使用那OpenBSD到底是什么能做什么我们这讲来简单介绍下
### OpenBSD 是什么?
OpenBSD 是一个类 Unix 的操作系统,源自加州大学伯克利分校的 BSD 软件套件家族 。简单来说,它就像 Linux 的一个远房亲戚。这个系统是在 1995 年,由荷兰裔加拿大籍程序员西奥·德·若特从 NetBSD 分支出来的 。
它是一个免费、自由的开源操作系统,完全遵循 BSD 许可证协议 。BSD 许可协议是一种非常宽松的开源许可证,它的主要特点是:极度自由: 是非“传染性”的non-copyleft。而Linux遵循的GPL协议是“传染性”的“非传染性”就意味着用户可以在很大程度上自由的使用、修改和分发软件甚至将它集成到闭源商业产品中也不需要公开所修改部分或整个产品的源代码。
OpenBSD 以它对开源软件的坚持、高质量的文档、宽松的软件许可证,以及最重要的——专注于系统安全和代码质量而闻名于世 。虽然不像其他操作系统那样广为人知,但它的力量非常强大,远超你的想象。
### OpenBSD 能做什么?
一个“小众”的操作系统,能干啥呢?
首先,它能成为坚如磐石的服务器,无论是 Web 服务、DNS、邮件、反向代理、数据库还是负载均衡、应用层网关都能胜任 。
其次它是一个强大的网络安全设备可以作为核心防火墙、路由器、VPN以及入侵检测系统 。
如果你是开发者,它能提供一个精简而高效的开发环境,是 C/C++、Python、Perl、Ruby 等语言理想的编程平台 。
它还可以复活旧硬件。我的一台二十年前的 ThinkPad T60 笔记本,也能流畅运行最新的 7.7 版本 OpenBSD 。
OpenBSD 和它功能强大的组件和技术,被世界各大科技厂商所采用 因为BSD许可协议以及各大公司对安全系统严格保密的原因我们不知道到底具体有多少科技公司在使用它但通过给OpenBSD社区捐助的科技公司名单大概能猜出以下是历年来给社区捐助的公司和明确表示使用OpenBSD技术的公司名单可以看到苹果、微软、谷歌、meta都在列 。罗永浩的锤子科技在2019年给OpenBSD社区也进行了一笔比较大的捐助。这是已知的来自中国公司的捐助
### 下面说下OpenBSD 的几个核心组件
##### OpenSSH这个名字大家肯定听过它是open BSD三大核心组件之一
它是全球服务器管理的首选工具 。
集成在 macOS、Linux、Windows 等主流操作系统中 。
还是 Git 代码管理和安全文件传输的核心 。
可以说OpenSSH 支撑着全球数亿甚至数十亿用户的网络基础设施 。是无处不在的安全连接基石
##### LibreSSL它是代码纯粹和安全理念的倡导者 。
LibreSSL 是2014年OpenSSL爆出心脏出血的重大安全漏洞后重构的分支删除了open SSL大量冗余和陈旧的代码 。
广泛应用于web、邮件、开发工具和操作系统的加密通信中。比如macOS 和一部分Linux发行版的默认加密库
它目前是 SSL/TLS 加密库事实上的行业标准,大大的推动了行业进步 。
也是 OpenBSD 生态的核心基石 。
###### Packet Filter 防火墙PF网络边界的坚强盾牌 。
PF packet filter是openbsd最最核心的组件它是一个强大且灵活的状态包过滤器 。
像macOS、iOS、freeBSD 、netBSd 、silaris、黑莓这些操作系统都内置了 PF 作为防火墙的核心 。
同时,流行的开源防火墙 pfSense® 和 OPNsense® 也是基于 PF 的 。
它为全球无数的网络连接提供了安全保障 。是名副其实的网络边界的坚强盾牌。
### 除了这三大王牌组件OpenBSD 还内置了许多高质量的组件和服务:
httpd一款超轻量级、高性能且安全的 Web 服务器 。
relayd功能非常强大、安全而且高效的反向代理、负载均衡器和应用层网关 。
opensmtpd一款高安全性、极其简单的邮件传输代理 。
openntpd轻量级并且高度安全的网络时间协议服务 。
openiked一款用于安全 VPN 连接的 IPSec 密钥交换服务 。
openbgpd一款免费开源而且符合标准的边界网关路由服务。
这些组件和服务都是集成到操作系统中不需要额外安装可以说openbsd为我们提供了一个开箱即用的功能后续我们会讲到这些服务和组件。
### OpenBSD 在安全方面做得非常极致,这得益于它严格的安全措施:
首先是代码审计:他们的核心开发者会持续、手动且深入地对每一行代码进行同行评审!
W^X (Write XOR Execute):这是一项重要的内存安全机制,内存页要么可写,要么可执行,但不能同时可写又可执行 。从而大大降低了恶意代码利用内存漏洞的风险。现在windows和Linux都鉴戒这个机制
权限分离:守护进程被设计成多个小进程,每个进程只拥有完成其任务所需的最小权限 。即使一个进程被攻破,攻击者也无法获得整个系统的控制权。
pledge():规定程序先声明所需要使用的系统调用集,然后程序就只能使用这些声明过的系统调用集 。
unveil():规定程序只能访问其声明的特定目录,这样就形成文件系统的沙箱 。进一步限制了程序的访问权限。
这两个机制就像孙悟空用金箍棒画了个圈,给程序限定了一个行动范围
安全默认值:默认情况下,所有不必要的服务都处于禁用状态 。这避免了因为默认开启不安全服务而带来的风险。
### 这些安全措施都源于 OpenBSD 的设计哲学:
第一个就是极简主义:他们坚信代码越少,漏洞就越少,被攻击面就越小,也越容易进行彻底的审计 。
主动安全:在代码开发阶段就主动预防漏洞的产生 。
默认安全:不必要的服务默认关闭,所有关键配置都设置为最安全的状态 。
悲观主义和偏执:开发者认为互联网是一个“充满敌意”,满地都是坏人的地方,就是这种“悲观偏执”促使他们在设计和实现时考虑最坏的情况,从而构建更健壮的系统 。
开发者责任:开发者对他们所编写的每一行代码的安全性负有高度责任感,甚至不惜重构整个系统来消除潜在的安全隐患 。
### OpenBSD VS. Linux如何选择
OpenBSD 和 Linux 都是优秀的操作系统,不存在谁取代谁,它们有着不同的侧重点,适用于不同的场景:
OpenBSD专注安全与稳定
核心理念:极致安全、严格审计、代码纯粹、安全默认 。
最佳应用场景网络安全设备防火墙、路由器、VPN、高安全服务器DNS、邮件、轻量Web、反向代理、负载均衡、应用网关、审计节点、安全研究平台、旧硬件复活 。
代码特性:代码量小,深度审计,没有二进制大对象 。
资源占用:极低,高效利用资源 。
硬件支持:注重兼容性而非广泛性 。
社区特点:小众但精英化,注重质量和安全 。
Linux通用与灵活的王者
核心理念:通用性、多样性、快速迭代、功能优先 。
最佳应用场景服务器主流大型Web、高并发数据库、大数据、云计算、机器学习、人工智能应用、桌面系统用户友好应用丰富、嵌入式系统、超算中心 。
代码特性:代码库庞大,多厂商贡献,生态多样 。
资源占用:范围广,从极低到高 。
硬件支持:极其广泛,支持几乎所有硬件 。
社区特点:全球最大、最活跃,资源丰富 。
世上没有最完美的操作系统,只有最合适的操作系统。
### AI 时代 OpenBSD 会淘汰吗?
我认为不会 。
AI 越强大,我们对安全基础设施的需求就越重要 。
AI 系统需要稳定的网络设施和安全的中间件 ,比如网络安全设备、安全关键设施、代码审计平台等等 。
在 AI 时代,恶意 AI 可能会被用于更高级的攻击,而 OpenBSD 这种“少即是多”的最小化、高安全性设计可能会变得更有价值 。
AI不是“谁替代谁”的零和游戏而是“谁更适合干什么”
OpenBSD 就是一个“数字世界的防火墙和哨兵” 。
它能提供无法从大模型中获得的“可信最小计算单元” 。
可以作为 AI 驱动系统中的“可信执行环境” 。
所以OpenBSD 在 AI 时代仍然有其独特的、不可替代的价值。
如果你喜欢Linux那一定会更喜欢OpenBSD。

Binary file not shown.

View file

@ -1,128 +0,0 @@
## 我们讲解了OpenBSD的安装接下来就是正式进入系统
### 新用户邮件
以alex用户登录先看下邮件有4封邮件
第一封是Welcome邮件这是由OpenBSD创始人希欧·德若特发来的德若特是NetBSD和FreeBSD的创始团队成员也是OpenBSD和OpenSSH的创始人。邮件旨在解答OpenBSD新用户最基础的初始疑问。比如新用户想了解如何设置OpenBSD系统可以使用man afterboot来快速了解。通过man man来了解使用man系统手册。OpenBSD的man手册在整个开源软件圈内质量是非常高的简洁、清晰、准确口碑极佳。它花费了开发人员大量的时间不管是高阶系统管理员还是初学者都需要花时间仔细阅读。
再次强调请务必阅读使用手册。除了man之外也可以通过GNU的info来查阅手册info系统类似于Emacs用man还是info就看个人的爱好了。
整个OpenBSD系统配置文件都集中在/etc目录中
邮件后半段就是给root的welcome邮件的内容。
第二封是系统rc首次运行的输出OpenBSD的rc系统是其用于管理系统启动、服务配置和维护的核心组件我们看到这个版本有13个补丁可以打。
第三封是系统安装的response文件其实只要把整个response文件复制出来拷贝到install.conf文件中就能实现autoinstall功能。
第四封是系统安装的安装log完整记录了整个安装过程。
我们退出邮件。
### doas
大家都知道Linux下提升权限的工具是sudoOpenBSD则有一个特有的利器doas。doas相比sudo设计简单逻辑透明语法简洁超轻量化代码量仅约 3000 行安全漏洞很少。sudo虽然功能丰富但结构庞大且复杂度高代码量超过17万行历史上多次曝出高危漏洞。
OpenBSD系统默认已经安装好doas我们要以root身份登录只要将/etc/examples/文件夹中的doas.conf文件拷贝到/etc/目录就开启doas功能。这里说下在etc的examples文件夹中存放了大量系统服务、应用程序、安全策略等各种配置文件的模板是我们探索系统功能与配置实践的入口在大大降低了新用户的学习门槛的同时也为开发者提供了标准化参考。
默认情况下每次doas都要输入密码很麻烦我们可以修改doas.conf文件
这里说下OpenBSD下默认的编辑器是vi和mgvi是BSD版vi对传统vi进行了改良非常接近vim的操作并不难用。mg是OpenBSD自己开发的一款类emacs的编辑器使用操作和emacs一样但非常轻量和快速。大家可以根据自己的喜爱和使用习惯来选择编辑器我是vi/VIM的重度使用者用了快30年基本生活在发电报式的编辑器中。
vi /etc/doas.conf
permit 选项是用户的许可证状态允许某个用户或组执行高等级的指令keepenv 选项表示在执行高等级命令时,保留当前用户的环境变量 :wheel是代表整个wheel用户组Alex用户属于wheel用户组。默认情况下Alex用户已经可以通过doas获得最高管理员权限。
我们在permit选项后面加上persist这个选项的功能就是为用户打开一个不需要密码的缓存期和sudo默认的功能很像。
```apache
permit persist keepenv :wheel
permit nopass keepenv :wheel
```
如果想更爽点再修改doas.conf把persist换成nopass这样doas提升权限时就永远不需要密码了。
我们为了方便演示选择nopass。
### 系统打补丁和升级
OpenBSD的更新非常重要因为这关乎系统的安全和稳定。OpenBSD下打补丁非常简单无需重新编译内核。
```shell
doas syspatch -c # 检查可用的补丁
doas syspatch -l # 列出已经打过的补丁
doas syspatch # 直接打补丁
```
OpenBSD 严格遵循每 6 个月发布一个 release 新版本的周期,每次新版本发布后,开发团队会为最新版本提供安全更新与漏洞修复,维护期通常持续 12 个月(也就是覆盖两个版本周期)。旧版本在 后续新版本发布后 6个月后停止维护用户需升级至受支持的最新版本以获取安全补丁。7.6是24年10月底发布的今年4月底最新的7.7已经发布7.6版本还是处在维护周期内,如果出了版本维护周期,就需要把系统升级到最新版本,后面我们会讲到系统升级。
然后系统升级也非常简单。
```shell
doas sysupgrade # 一个命令搞定
```
从OpenBSD6.6起sysupgrade就成为系统的升级的默认工具整个过程是无人值守全自动化的。OpenBSD系统升级的工作原理是先将必要文件下载到/home/_sysupgrade目录。接着验证这些文件的完整性验证完成后将bsd.rd内存盘内核复制到/bsd.upgrade。文件就位后系统重启引导加载程序会自动启动升级内核bsd.upgrade。系统随后会尝试使用/home/_sysupgrade中的文件进行升级。若升级失败下次系统启动时将回退至旧内核以保证不会因为系统升级而破坏原有系统。
系统升级当然也可以进入bsd.rd回到安装程序中通过upgrade升级
OpenBSD是完全有开源软件社区来维护所以不可能拥有长时间的维护周期当我们的系统版本已经过了开源社区的维护周期时就需要升级到最新的系统以保证系统的安全与稳定性。
### 软件包管理
在OpenBSD里安装软件有两种方式一种是安装已经编译好的二进制软件包另一种是通过ports源码编译安装。OpenBSD官方提供的二进制软件包不仅通过严格的安全审计同时还确保了移植的稳定性。而ports源码软件集没有经过官方的安全审计和移植测试因此建议安装经过官方软件仓库的二进制包除非有特别需要才去编译ports源码。本身安装二进制包省时省力还安全可靠。
在安装软件包之前,我们先要使用就近的网络安装源,这样可以获得更快的网速,更好的操作。/etc/installurl是OpenBSD网络安装源的配置文件因为之前我们autoinstall用的国内镜像网络安装所以不需要修改如果在安装过程中安装介质选择是cd的话要修改这个文件换成阿里或者清华镜像源。
OpenBSD通过pkg_add命令来安装、升级软件比如安装pkg_add sudo安装sudo再安装个vimdoas pkg_add vim。我们看到OpenBSD的网络安装软件和Linux基本一样安装主软件的同时也将主软件的依赖和相关软件一并安装。还有OpenBSD默认的是Ksh习惯于Bash或者zsh的可以通过doas pkg_add bash zsh来安装。和Linux一样也可以一次安装多个软件。-u参数是升级软件包doas pkg_add -u vim 就是升级VIM如果命令中不带有软件名称就是升级全部软件。doas pkg_add -Uu 就是在将当前版本的全部软件升级到最新系统的软件比如从7.6版本的软件仓库升级到7.7版本的软件仓库。
有时我们会碰到这种情况比如要安装pipdoas pkg_add pip 系统提示找不到这个软件包这时就需要用到pkg_info指令直接执行pkg_info会列出本地安装的全部软件包pkg_info -Q 会到线上软件仓库中搜索相关的软件包doas pkg_info -Q pip这样就会搜索出带有pip的所有软件包这样我们就知道应该安装py3-pip。当我们想装一个软件但不知道OpenBSD官方软件仓库中的具体名字时就能用pkg_info -Q 来搜索。
当我们需要在另一台电脑上安装OpenBSD想把原来电脑上的软件不无遗漏的全部搬过去或者更换电脑进行无缝迁移再或者重装系统后要恢复到之前的系统。那就需要pkg_info和pkg_add组合应用。首先pkg_info -mz | tee list 列出并保存所有已安装的软件,-m参数会让输出变得非常简洁只有软件的名字和版本号方便机器处理。-z 参数: 这个参数很关键,它会让 pkg_info 只列出那些“不是依赖”的软件包。什么意思呢?就是只列出你主动安装的软件,而不是那些因为安装某个软件而被自动拉进来作为依赖的软件。这样我们得到的列表就更干净,更容易管理。| 是管道符号熟悉Linux的都知道把左边命令的输出作为右边命令的输入。tee list tee 命令会把从管道传过来的内容同时输出到屏幕上,并且保存到一个文件里。我们这里保存到 list 这个文件里。执行完这个指令后,屏幕上会显示一个简洁的软件列表,同时,在当前目录下,会多出一个叫做 list 的文件。然后我们把这个list文件拷贝到新安装的系统上执行pkg_add -l listOK这套组合指令能让我们安全快速的迁移系统非常实用。
删除软件是pkg_delete指令比如删除sudo ,doas pkg_delete sudo 删除bashdoas pkg_delete bash就行了。如果我们想删除主软件后将主软件所依赖和关联的软件一并删除那主要在删除主软件后再执行一个doas pkg_delete -a命令。比如我们要删除vim以及相关联的所有软件先执行doas pkg_delete vim再执行doas pkg_delete -a。不过在软件依赖关系复杂的场景中要谨慎执行这项操作避免破坏整个应用软件环境。
当我们的系统中装了很多软件并且用了很长时间同时又删除过一些软件我们可能会想我的系统里这些软件都“健康”吗文件是不是都还在有没有被意外修改过有没有少什么依赖这时候OpenBSD 给我们准备了一个“体检医生”——那就是 pkg_check 命令!
pkg_check 的作用,就是帮你检查系统上已安装的软件包。它主要会做几件事:
文件完整性检查: 它会检查每个软件包安装的文件,看看它们是不是都还在,有没有被删除。
文件校验和检查: 还会比对文件的校验和。简单来说就是看文件内容有没有被修改过。如果文件内容和它最初安装时的记录不一致pkg_check 就会报告出来。这对于发现文件损坏或者被恶意篡改非常有用!
依赖关系检查: 还会检查软件包的依赖关系是否满足。比如A软件需要B软件才能运行pkg_check 会确认B软件是否已经安装。
我们执行pkg_check等它跑完
打包清单完整性:正常
直接依赖项:正常
反向依赖项:正常
来自软件包的文件:正常
系统非常健康。如果有问题比如某个文件不见了或者校验和不匹配它就会列出这些问题。pkg_check是系统管理员和我们使用OpenBSD过程定期要执行的命令。
通过上述的4个命令(pkg_add,pkg_info,pkg_delete,pkg_check)我们就能对OpenBSD进行软件包的基本管理。
### OpenBSD的网络配置命令是ifconfig
ifconfig是 OpenBSD 下是一个非常核心的网络命令,用于配置、显示和管理网络接口。虽然它在 Linux 下也常用,但 OpenBSD 的 ifconfig 有自己的一些特性和用法。
Lo0是本地回环接口
em0是本机物理网卡接口
enc0是加密通信接口主要用于VPN和Ipsec
pflog0是of防火墙的日志接口后面讲到Pf防火墙时会重点介绍
在autoinstall的视频中我们演示了ifconfig临时配置网络。
除了配置网络外,还可以对网络接口进行手动操作
Doas ifconfig em0 down 关闭em0网卡Doas ifconfig em0 up开启em0网卡。这在排查网络问题或者暂时禁用某个接口时非常有用。
ifconfig 就像是网络接口的“控制面板”。它能查看网卡的状态和配置,也能进行一些临时的网络设置和启用/禁用操作。但要记住ifconfig配置网络只能临时生效系统重启后就会消失。要永久生效必须修改网络相关的配置文件。
修改完文件后执行doas sh /etc/netstart重启网络配置重启系统也可以
### 系统守护进程
守护进程daemon是类Unix 系统中特有的后台服务是为系统或者用户提供长期稳定的后台支持。通常以字母“d”结尾例如sshd和httpd。在OpenBSD系统中守护进程配置文件是/etc/rc.conf。我们看下这个文件可以看到默认情况下大多数服务是NO,也就是关闭状态。OpenBSD不建议我们通过修改rc.conf文件来管理守护守护进程。
要想开启所需要的服务有两种方法,一种是配置/etc/rc.conf.local文件另一种是通过rcctl指令rcctl指令是OpenBSD中非常重要的指令之一。堪称系统服务的瑞士军刀和Linux 系统中的 systemctl 和FreeBSD的 service 指令相似。rcctl 的主要作用是启动、停止、重启、检查服务状态,以及管理服务的开机自启动设置。
我们先通过rcctl ls started 来查看当前“已启动”或“应该运行”的服务
然后可以通过rcctl stop 关闭某项服务比如doas rcctl stop ntpd 关闭ntpd时间同步服务rcctl stop smtpd 关闭邮件传输服务
rcctl start 开启某项服务比如doas rcctl start ntpd
rcctl restart 重新启动某项服务比如doas rcctl restart sshd
还能通过rcctl ls on 来查看设置为开机自启动的服务
可以看到rcctl ls started 输出中没有smtpd服务但rcctl ls on 输出中有smtpd服务因为smtpd处于开机自启动状态
可以用rcctl disable 来关闭某项开机自启动服务比如doas rcctl disable smtpd
rcctl enable 开启某项开机自启动服务比如doas rcctl enable httpd。这时候/etc/rc.conf.local文件中会自动写入开启httpdcat /etc/rc.conf.local所以不需要手动配置rc.conf.local。rcctl enable 除了设定开机自启动外还是start开启服务的前置也就是要开启某个新服务必须先enable 这个服务后在start开启。
rcctl ls failed 列出那些启动失败的服务
我们还能通过rcctl get 来查看某项服务的启动参数比如doas rcctl get ntpd
rcctl set 设置某项服务的启动参数比如doas rcctl set sshd flags "-4"sshd服务只侦听来自IPV4网络的请求,flags是指定服务运行时的参数-4是传递给sshd,强制只监听IPV4网络地址。我们重启下sshd,doas rcctl restart sshd,可以看到netstat -an |grep 22。
rcctl 是 OpenBSD 中管理后台服务的核心工具。掌握它,就能更好地控制和维护整个系统
### OpenBSD添加硬盘
查看已经识别到的硬盘
```shell
dmesg | grep sd # 查看系统启动日志中的磁盘信息
sysctl hw.disknames # 列出所有已识别的磁盘
```
+ OpenBSD 中 SCSI/SATA 硬盘以 sd 开头IDE 硬盘以 wd 开头,例如 sd1 表示第二块 SCSI 硬盘
通过 disklabel 进行分区
```shell
disklabel -e sd1 # 进入交互编辑模式
```
格式化与挂载
```shell
newfs /dev/rsd1a # 格式化 sd1a注意 `r` 表示原始设备)
mkdir /opt
mount /dev/sd1a /opt
vi /etc/fstab
/dev/sd1a /opt ffs rw,nodev,nosuid 1 2
```
+ **rw**:以读写模式挂载(默认值),允许文件修改
+ **nodev**:禁止解析设备文件(如 /dev/*),提升安全性
+ **nosuid**:禁用 SUID/SGID 权限位,防止提权攻击
+ **1**:需要备份
+ **2**: 定义启动时 fsck 检查文件系统为次要优先级
+ 将第二块 SCSI 磁盘的第一个分区sd1a以 ffs 文件系统挂载到 /opt允许读写但禁用设备解析和特权程序启用定期备份并在启动时以次级优先级检查文件系统完整性。

View file

@ -1,3 +0,0 @@
**doas** **pkg_add** fcitx fcitx-chinese-addons fcitx-configtool fcitx-gtk fcitx-qt zh-libpinyin
zh-fonts-arphicttf zh-fonts-kc zh-wqy-bitmapfont zh-wqy-zenhei-ttf

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

View file

@ -1,30 +0,0 @@
# 录屏
ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 -f sndio -i snd/0 -c:v libx264 -preset veryfast -crf 23 -c:a aac -b:a 128k ~/mp4/screen_mic_$(date +%F_%T).mp4
# cwm设置壁纸
加入.xsession
feh --bg-scale /home/alex/backgrounds/03.jpg &
# urxvt下让bat正常显示
mkdir -p ~/.config/bat
echo '--theme=ansi' >> ~/.config/bat/config
# cwm开机启动polybar
polybar main &
exec cwm
# copy ssh 密钥
cat ~/.ssh/id_ed25519.pub | ssh root@100.64.1.3 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'
# push gitee
git add .
git commit -m "feat: 更新说明"
git push origin master
# 挂载exfat格式移动硬盘
doas pkg_add exfat-fuse
doas mount.exfat-fuse /dev/sd2j /mnt
江苏省吴中区长桥街道美成坊39幢135室8层806室
苏州森德瑞克信息科技有限公司
91320506MAER221E49

View file

@ -1,72 +0,0 @@
# openBSD 下使用Lets Encrypt客户端acme-client获得免费SSL证书
OpenBSD 自带一个名为 acme-client 的工具,它可以与 Lets Encrypt 的 ACME 协议交互来获取免费的 SSL 证书。
Let's Encrypt 是一个由非营利组织提供的免费证书颁发机构CA它的目标是让全世界的网站都能使用 HTTPS变得更安全。相比手动申请 SSL 证书的复杂流程Let's Encrypt 提供了一套ACME的自动化协议让Web服务器能自己发起、验证、获取证书。
OpenBSD 的 acme-client工具 会和 Lets Encrypt 通信,帮我们自动申请证书、验证域名所有权、安装证书。
整个过程涉及一个核心环节 —— 就是 Lets Encrypt 验证我们是否真的控制这个域名
acme-client 使用的是 HTTP-O1 Challenge 方式:
具体来说就是我们通过 acme-client 向 Lets Encrypt说我要申请 网站 的证书。
Lets Encrypt 就会给我们一个 token比如 abc123xyz和预期响应值通常是 token+签名组成的Challenge 文件。
然后我们就要把这个 Challenge恰了G 文件放到要申请证书的网站上让Lets Encrypt来访问如果它能在我们的Web服务器上访问到这个文件并且文件内容正确验证就通过证书就签发了。
接下来我们就来实际使用acme-client
首先我们建立几个必要的目录
doas mkdir -p -m 700 /etc/acme 用于存放 acme-client 的账户密钥account key与元数据权限 700仅允许 root 读写访问,防止敏感密钥泄露
doas mkdir -p -m 700 /etc/ssl/private 用于存放 生成的域名私钥domain private key这是 TLS 证书中最敏感的文件 —— 网站私钥,必须保密!
doas mkdir -p -m 755 /var/www/acme 用于配合 httpd Web服务器 提供 ACME HTTP-O1 Challenge 验证文件 的存放路径。acme-client 在申请证书时,需要在这个目录中写入一个 token 文件,以供 Let's Encrypt 来访问验证你确实控制了该域名。权限 755让 www 用户(也就是 httpd 的 chroot 用户)能够读取这些文件。不包含敏感信息,因此可以开放读权限。
然后我们将/etc/examples/目录下的acme-client.conf配置模板文件拷贝到/etc/下配置下acme-client客户端
配置文件的前四段不用修改
第一段是表明 我们使用 Let's Encrypt 的正式 ACME 服务来申请证书, 对应的账户私钥存在 /etc/acme/目录下
第二段是表明 Let's Encrypt 的测试 staging 环境的 API, 我们可以在正式申请证书前使用这个环境进行测试
第三段是使用 Buypass CA 的 ACME 服务来申请证书, Buypass CA是另一个免费证书服务商, 提供有效期最长 180 天的 自动签发免费证书
第四段是声明 Buypass CA 的测试环境
Let's Encrypt 和 Buypass我们选择一个就可以了
配置文件的第五段需要我们来自定义
我们定义一个需要申请证书的主域名(比如mydomain.com实际用真实域名代替)的配置块之前讲httpd的配置时讲过这是OpenBSD配置生态的基本语法
alternativeO太呢提付 names 是配置一个或多个备用域名一起包含在该证书中
domain key 指定域名私钥路径,用于生成 CSR证书签名请求并配合服务器部署
domain certificate色 提 fi kei t 指定证书签发成功后,证书的输出位置
domain full chain certificate 指定证书签发成功后完整链full chain的输出位置
这两者区别是domain certificate只包含网站自己的证书不包含中间 CA 或根证书而domain full chain certificate 包含网站的证书 + 中间 CA 证书链是一个完整的网站证书链实际部署时要用full chain因为如果只用 .crt 文件,浏览器可能提示“不受信任”或“证书链不完整”,而 full chain 可以正确传递整条信任链,确保万无一失
sign with letsencrypt-staging 使用staging来测试演练获得证书
sign with letsencrypt 正式申请证书
这里强烈建议第一次使用acme-client和网站正式部署前用 staging 多演练几次没问题后再正式letsencrypt。
配置完acme-client.conf后我们接着配置httpd.conf文件以便让 Lets Encrypt 能够成功访问到我们这台Web服务器并读取到签名文件
先定义一个虚拟主机块,匹配为 www.mydomain.com 的 HTTP 请求。网站根目录htdocs/www.mydomain.com 也就是 /var/www/htdocs/www.mydomain.com
这是一个特殊的 location 块,用于处理 acme-client 进行域名所有权验证的请求。
/.well-known/acme-challenge/*: 这是一个由 ACME 协议定义的标准路径证书颁发机构CA会通过访问这个路径来验证你是否拥有该域名。
root "/acme",当请求路径匹配到 /.well-known/acme-challenge/ 时httpd 会将文档根目录暂时切换到 /acme也就是实际系统的/var/www/acme目录。ACME 客户端会在 /acme 目录下放置一个challenge file文件以便 CA 可以访问它。
例如,如果 CA 请求 http://www.example.com/.well-known/acme-challenge/some_tokenhttpd 会在 /acme/some_token 查找该文件。
request strip 2
这是一个重要的指令,它会从请求的 URL 路径中剥离前两层目录。
就是当 CA 请求 /.well-known/acme-challenge/some_token 时request strip 2 会将 URL 路径变成 some_token然后 httpd 会在 /acme/some_token 查找文件。如果没有这个指令httpd 会尝试查找 /acme/.well-known/acme-challenge/some_token而这并不是 ACME 客户端放置文件的地方。
接下来是个重定向就是把一并申请证书的mydomain.com通过301重定向到www.mydomain.com重定向在httpd配置视频中讲过这里不再重复。
配置完httpd后检查下有没有语法错误然后重启httpd, httpd -n && rcctl restart httpd
这时候我们就能通过acme-client -v mydomain.com命令来申请证书了由于我这台是内网机器 Lets Encrypt 无法访问到,所以拿不到证书,在公网上就没问题。再次强调下先用 staging 多演练几次,确保各项配置没问题后再正式申请证书。
申请成功后在相关目录下就有mydomain.com.crt、mydomain.com.fullchain.pem、mydomain.com.key这些文件在httpd配置文件加入虚拟主机的配置模块中即可。
Lets Encrypt 的证书有效期只有90天那每三个月操作一下也是比较麻烦的尤其时间长了会忘记。我们可以通过crontab 计划任务来自动执行
crontab -e
30 3 * * * acme-client mydomain.com && rcctl reload httpd
每天凌晨 3 点 半 自动执行
虽然每天都会运行这个任务,但实际上只有当证书有效期临近时,它们才会被真正续订
我们看到OpenBSD下的acme-client是一种原生、安全、纯文本配置的方式不需要安装任何第三方工具也没有脚本依赖配置一次就能自动续签非常适合服务器玩家和运维人员。

View file

@ -1,18 +0,0 @@
# 激活sshd
doas rcctl enable sshd
# 启动sshd
doas rcctl start sshd
# 重启sshd
doas rcctl restart sshd
---
# 密钥认证的核心优势
+ 非对称加密保障安全
+ 抗暴力破解
+ 自动化运维支持
+ 权限精细化管理
+ 免密登陆体验

View file

@ -1,72 +0,0 @@
# OpenBSD 虚拟化 (Virtual Machine Monitor)
# Hypervisor
+ 硬件虚拟化支持
+ 高效的资源隔离
+ 虚拟化透明性
+ 多虚拟机并行运行
+ 高可用性和恢复故障
+ 硬件抽象
+ 安全性和隔离性
## Type 1 Hypervisor
+ 与物理硬件直接交互,不依赖宿主机操作系统
+ 高性能
+ 高安全性
+ 专业管理
## Type 2 Hypervisor
+ 在宿主机上运行
+ 性能受限
+ 较低安全性
+ 易用性,简单操作
---
# OpenBSD vmm(4) 优点
+ 基于 Typ 1 Hypervisor 模式
+ 高安全性
+ 简洁高效
+ 支持现代硬件的虚拟扩展如intel VT-x 和AMD-VT
+ 操作系统自带无需额外安装
+ 与OpenBSD生态紧密集成
# OpenBSD vmm(4) 缺点
+ 功能较弱,仅有基础功能
+ 操作系统兼容性差不支持VGA客户机操作系统要支持串口控制台安装
+ 管理工具匮乏
+ 不支持SMP
+ 硬件支持和兼容性有限
+ 文档和社区支持相对较少
---
# 使用和管理 vmm(4)
+ vmm(4)
+ vmd(8)
+ vmctl(8)
# 虚拟机管理和配置文件
+ vm.conf(5)
# 日志
+ less /var/log/messages |grep vmd
+ less /var/log/daemon |grep vmd
# 文档
+ man vmm
+ man vmd
+ man vmctl
+ man vm.conf
---
# vmm(4)四种网络模式
+ 虚拟机仅和宿主机之间通讯
+ 虚拟机通过虚拟网络NAT访问外网
+ 虚拟机桥接到宿主机的物理网络
+ 虚拟机直接连接到真实网络