diff --git a/md/OpenBSD relayd.md b/md/OpenBSD relayd.md deleted file mode 100644 index 23f9e7f..0000000 --- a/md/OpenBSD relayd.md +++ /dev/null @@ -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主机,分别安装了Ubuntu(143),OpenSuse(148),Rocky(149),都通过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是负载均衡策略,采用轮询调度,特点是均等分配请求,适用于相同配置的服务器集群。如果后端服务器集群需要权重,可以设置为loadbalance(load 班纳斯)模式,两者的工作模式如下。此外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,指向到 组。如果是 blog.website,则指向到 组。加入安全代理协议头match request header set "X-Forwarded-Proto" value "https",这在反向代理中非常重要,作用是告诉后端服务器客户端原本使用的是 HTTPS 协议,即使后端收到的是 HTTP 请求。如果不设置安全代理协议头,后端就会出现严重误判,比如生成错误的 http 链接,301重定向死循环,误关闭安全特性,混合内容错误。这条配置是代理架构中连接前后端协议信息的关键通信桥梁,能有效解决因协议不一致导致的功能和安全问题。 - -之后是relay规则,监听公网IP的443请求,应用上述自定义的https_proxy协议规则,建立后端转发规则, 组采用roundrobin轮询负载均衡算法,通过 get 后端组的http 200状态码来进行健康度检查。组直接转发到80端口,单服务器不用负载均衡和健康度检查。 - -这个实例的安全设计亮点一是风险隔离:公网只暴露relayd,后端服务隐藏在内网;防御攻击:默认block策略阻止端口扫描。用于企业级SAAS平台,用多台服务器通过cloud.website承载高可用云服务,同时通过www.website提供企业门户展示,最大化硬件利用率。 - -我们再来看relayd通过另一种多路径路由实现转发的功能 - -设定统一的TLS证书。制定安全规则,禁止CGI脚本执行,但凡要访问cgi-bin目录,立即拒绝;封禁管理后台访问,假设后台管理页面在admin目录中(按实际情况修改),要访问admin目录,也立即拒绝。云服务路径允许访问,这里假设为cloud目录,其他未声明的任意路径,默认转发到门户主网站上。这里block和pass指令后加了quick关键词,作用是匹配到后马上停止后续规则处理,以提升性能和安全响应速度。 - -relay规则和域名路由一样。relayd多路径路由完整流程如图。 - - - diff --git a/md/OpenBSDhttpd:小巧、安全、高效的 Web 服务器.md b/md/OpenBSDhttpd:小巧、安全、高效的 Web 服务器.md deleted file mode 100644 index 1dc955a..0000000 --- a/md/OpenBSDhttpd:小巧、安全、高效的 Web 服务器.md +++ /dev/null @@ -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的工具),能够进行自动化Let’s 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就采用了Nginx,2011年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 或 jpg)时,Web服务器知道这是什么类型的文件,并能告诉客户端浏览器如何处理它,从而实现内容流畅和正确的显示。 - -+ 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服务,我们打开浏览器就能访问,非常简单简洁。 - -如果网站要实现动态内容支持,比如支持PHP,httpd要通过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 - -``` -然后重启或者重新加载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,然后再被重定向到新 URL,302 的开销大、反应慢,不适合实际部署。 -$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和144,httpd的虚拟主机很简单,就是再开一个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服务器。 - - - - - - - - - - - - - - - - - - - -​ - - - diff --git a/md/OpenBSD能做什么.md b/md/OpenBSD能做什么.md deleted file mode 100644 index bd76d97..0000000 --- a/md/OpenBSD能做什么.md +++ /dev/null @@ -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。 diff --git a/md/OpenBSD讲解.pptx b/md/OpenBSD讲解.pptx deleted file mode 100644 index 21dd3d4..0000000 Binary files a/md/OpenBSD讲解.pptx and /dev/null differ diff --git a/md/OpenBSD进入系统和基本操作.md b/md/OpenBSD进入系统和基本操作.md deleted file mode 100644 index b8832ac..0000000 --- a/md/OpenBSD进入系统和基本操作.md +++ /dev/null @@ -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下提升权限的工具是sudo,OpenBSD则有一个特有的利器:doas。doas相比sudo设计简单,逻辑透明,语法简洁,超轻量化,代码量仅约 3000 行,安全漏洞很少。sudo虽然功能丰富但结构庞大且复杂度高,代码量超过17万行,历史上多次曝出高危漏洞。 -OpenBSD系统默认已经安装好doas,我们要以root身份登录,只要将/etc/examples/文件夹中的doas.conf文件拷贝到/etc/目录就开启doas功能。这里说下在etc的examples文件夹中存放了大量系统服务、应用程序、安全策略等各种配置文件的模板,是我们探索系统功能与配置实践的入口,在大大降低了新用户的学习门槛的同时也为开发者提供了标准化参考。 -默认情况下每次doas都要输入密码很麻烦,我们可以修改doas.conf文件 -这里说下OpenBSD下默认的编辑器是vi和mg,vi是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,再安装个vim,doas 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版本的软件仓库。 - -有时我们会碰到这种情况,比如要安装pip,doas 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 list,OK,这套组合指令,能让我们安全快速的迁移系统,非常实用。 - -删除软件是pkg_delete指令,比如删除sudo ,doas pkg_delete sudo ,删除bash,doas 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文件中会自动写入开启httpd,cat /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,允许读写但禁用设备解析和特权程序,启用定期备份,并在启动时以次级优先级检查文件系统完整性。 - diff --git a/md/current.md b/md/current.md deleted file mode 100644 index 72a179f..0000000 --- a/md/current.md +++ /dev/null @@ -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 - diff --git a/md/hypervisor.png b/md/hypervisor.png deleted file mode 100644 index 0cab73e..0000000 Binary files a/md/hypervisor.png and /dev/null differ diff --git a/md/note.md b/md/note.md deleted file mode 100644 index 621a32c..0000000 --- a/md/note.md +++ /dev/null @@ -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 diff --git a/md/openBSD 下使用Let’s Encrypt客户端acme-client获得免费SSL证书.md b/md/openBSD 下使用Let’s Encrypt客户端acme-client获得免费SSL证书.md deleted file mode 100644 index bbaf2d9..0000000 --- a/md/openBSD 下使用Let’s Encrypt客户端acme-client获得免费SSL证书.md +++ /dev/null @@ -1,72 +0,0 @@ -# openBSD 下使用Let’s Encrypt客户端acme-client获得免费SSL证书 -OpenBSD 自带一个名为 acme-client 的工具,它可以与 Let’s Encrypt 的 ACME 协议交互来获取免费的 SSL 证书。 - -Let's Encrypt 是一个由非营利组织提供的免费证书颁发机构(CA),它的目标是让全世界的网站都能使用 HTTPS,变得更安全。相比手动申请 SSL 证书的复杂流程,Let's Encrypt 提供了一套ACME的自动化协议,让Web服务器能自己发起、验证、获取证书。 - -OpenBSD 的 acme-client工具 会和 Let’s Encrypt 通信,帮我们自动申请证书、验证域名所有权、安装证书。 - -整个过程涉及一个核心环节 —— 就是 Let’s Encrypt 验证我们是否真的控制这个域名 -acme-client 使用的是 HTTP-O1 Challenge 方式: - -具体来说就是我们通过 acme-client 向 Let’s Encrypt说:我要申请 网站 的证书。 - -Let’s Encrypt 就会给我们一个 token(比如 abc123xyz)和预期响应值(通常是 token+签名)组成的Challenge 文件。 -然后我们就要把这个 Challenge(恰了G) 文件放到要申请证书的网站上,让Let’s 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配置生态的基本语法 -alternative(O太呢提付) 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文件,以便让 Let’s 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_token,httpd 会在 /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命令来申请证书了,由于我这台是内网机器, Let’s Encrypt 无法访问到,所以拿不到证书,在公网上就没问题。再次强调下先用 staging 多演练几次,确保各项配置没问题后再正式申请证书。 - -申请成功后,在相关目录下就有mydomain.com.crt、mydomain.com.fullchain.pem、mydomain.com.key这些文件,在httpd配置文件,加入虚拟主机的配置模块中即可。 - -Let’s Encrypt 的证书有效期只有90天,那每三个月操作一下也是比较麻烦的,尤其时间长了会忘记。我们可以通过crontab 计划任务来自动执行 -crontab -e -30 3 * * * acme-client mydomain.com && rcctl reload httpd -每天凌晨 3 点 半 自动执行 -虽然每天都会运行这个任务,但实际上只有当证书有效期临近时,它们才会被真正续订 - -我们看到OpenBSD下的acme-client是一种原生、安全、纯文本配置的方式,不需要安装任何第三方工具,也没有脚本依赖,配置一次,就能自动续签,非常适合服务器玩家和运维人员。 - diff --git a/md/ssh.md b/md/ssh.md deleted file mode 100644 index 538ff75..0000000 --- a/md/ssh.md +++ /dev/null @@ -1,18 +0,0 @@ -# 激活sshd -doas rcctl enable sshd - -# 启动sshd -doas rcctl start sshd - -# 重启sshd -doas rcctl restart sshd - ---- - -# 密钥认证的核心优势 - -+ 非对称加密保障安全 -+ 抗暴力破解 -+ 自动化运维支持 -+ 权限精细化管理 -+ 免密登陆体验 diff --git a/md/vmm.md b/md/vmm.md deleted file mode 100644 index ed4c6d0..0000000 --- a/md/vmm.md +++ /dev/null @@ -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访问外网 - -+ 虚拟机桥接到宿主机的物理网络 - -+ 虚拟机直接连接到真实网络