老电脑利用之Linux服务器

#碎碎念 #Linux #技术 #电脑 #Debian #服务器


最近尝试把老电脑(小黑)当作服务器用,其实就是给它装了个无图形界面 Debian 系统(Linux)。

因为小黑本身有 Win10 系统,且我想保留原本电脑里的文件、软件等,所以给它装了个双系统,过程中发现了一个装系统很方便的神器——Ventoy

简单来说,Ventoy 是一个制作可启动 U 盘的开源工具。有了 Ventoy 就无需反复地格式化 U 盘,只需要把文件直接拖到 U 盘里面就可以了,无需其他操作。
装系统时,Ventoy 会显示菜单,让用户浏览并启动本地硬盘中的 ISO/WIM/IMG/VHD(x)/EFI 等类型的文件。

总之,安装好系统后,我的难题才真正开始。因为我对 Linux 只有一点薄弱的基础,所以基本都是靠问 AI 和搜索引擎来解决问题。


代理

我非常需要 VPN,所以首先解决的就是这个问题,在小黑上安装了 sing-box。但是这个东西还是看个人所需吧,也不是每个人都需要的。


组网

在折腾 sing-box 的过程中坐累了,想着可不可以通过其他方式连接小黑使用命令行呢?于是搜到了一些关于 ssh 的东西。

但只有位于同一局域网下才能连通的限制很麻烦,想到以前玩联机游戏时的组网软件能把位于不同地方的朋友们拉到同一个网段中,就搜了一下,得知了 Tailscale 的存在。

Tailscale 是一款基于 WireGuard 协议的零信任组网工具,能将分布各处的设备(如 NAS、电脑、云服务器)组成一个虚拟的安全局域网。

在小黑上绑定 Tailscale,网页上设置一下,并在其他要连通小黑的设备上下载 Tailscale 软件。之后要使用的时候只要打开 Tailscale 的连接,就可以在不同的设备上连到小黑了。


防护

我家没有公网 IP,且 IPv6 也没打通,所以减少了被攻击面。不过防护还是要了解的。

防护主要是三点:

Linux 的防火墙一般就是 UFW。

UFW(Uncomplicated Firewall) 是 Linux 系统中内置的简易防火墙管理工具。通过简单指令,可以快速设置允许或拒绝特定端口、IP 地址的流量(例如 ufw allow 22 开放 SSH)。启用后默认阻止外部主动连接,能有效防御暴力破解等攻击。在与 Tailscale 配合时,常利用 UFW 设置规则,限定仅允许 Tailscale 分配的虚拟 IP 访问内网关键服务,从而在实现安全远程访问的同时,彻底关闭公网暴露面。

但是我没弄 UFW,只是把一些默认端口改了(比如 ssh 默认是 22 端口,改掉能挡住一些批量扫描脚本),关掉了 ssh 的用户名密码登录,只保留了密钥登录,还可以禁用 root 登录。

其实 UFW 设置起来很方便,每次部署完新项目后多敲一句放行端口的命令就可以了。只是我的数据没隐私也不值钱,而且我另外通过 Fail2ban 设置了一些策略。

Fail2ban 是一款 Linux 下的入侵防御软件,专门用于抵御暴力破解和恶意扫描。
它的核心机制是监控服务日志(如 SSH、Web 服务的认证日志),通过正则表达式识别高频的失败登录尝试。规定同一 IP 在指定时间内失败次数超限时,自动封禁该 IP,并在设定的时间后解封,当然也可以设置永封。

在小黑上,还有一些服务是通过 Nginx 作为反向代理 + 身份验证网关的方式进行防护的。

首先 Nginx 是什么呢?

Nginx 是一款高性能的 Web 服务器反向代理服务器

比如小黑上有个程序运行在本地 127.0.0.1:8080,外界无法直接访问。然后我给这个程序配置 Nginx ,监听在0.0.0.0:8081。这样当我访问http://IP:8081 时,Nginx 接收请求,将它转发给身后的127.0.0.1:8080

这就是所谓的反向代理——Nginx 把内网藏起来的服务,以受控的方式抛到网络边界上。

并且 Nginx 自带 auth_basic(HTTP 基本认证)功能。设置好密码后,当 Nginx 接收到访问请求后,它不会直接转发给身后的程序,而是先检查请求头里有没有携带正确的用户名和密码。只有当输入的用户名和密码匹配时,Nginx 才会把请求放行给 127.0.0.1:8080

这时候 Fail2ban 又可以上场了,在它配置文件里设置 Nginx 的部分,如果用户名密码验证在一段时间里错到设定的上限,就封禁尝试验证的 IP 一段时间。

如果遇到 HTTP 413 错误,说明 Nginx 默认的 client_max_body_size 太小(默认 1MB),备份文件超过了这个限制,因此被 Nginx 拦截了。
解决方案:修改 Nginx 的站点配置文件,在 server 块中添加 client_max_body_size 具体数值,然后重载 Nginx。


内网穿透

顾名思义,就是让服务不止内网可以访问。具体场景就是小黑在家里插着网线,用着家里的网络。而我人在外面,手机/电脑用着外面的网络,但也能访问到家里小黑上的服务。

内网穿透必须依赖“内网设备主动先向外发起连接”。因为运营商封禁了外部主动找内网设备,但不会封禁内网设备主动找外部,所以穿透工具就是利用这个规则,让家里设备先连上公网服务器,保持这条通道不断,然后服务器再把公网流量顺着这条通道导流回来。

这一部分我用的是 Cloudflared Tunnel。缺点就是流量会去 Cloudflare 服务器那里转一圈,对于大陆来说反而走了一条远路,导致速度偏慢,并且 Cloudflare 免费方案账户单次上传文件有大小限制。

还有方法是买个 VPS,用 VPS 当跳板,那样速度会快一点。


管理面板

对于个人玩家且对无图形界面系统不太熟悉的人来说,有个面板会更方便管理,比较有名的就是 1Panel宝塔。不过它们各有利弊,宝塔之前被曝出有漏洞,而 1Panel 手机端是收费的。

我考虑过后还是没弄面板,只是搓了一个简单的脚本和网页,用来监控小黑的状态(地址、内存、磁盘、运行时间、CPU 负载、程序和其监听端口)。每半个小时执行一次脚本,然后把获取 json 值传到 Cloudflare 的 KV 数据库里传递给前端。因为涉及到地址,所以需要验证密码才能打开网页。对我来说是够用了,总之,一切根据自己的实际需求来。


结语

这篇并非保姆级教程,而是一条路径,写明如果要将老电脑利用起来当个服务器,有哪些必不可少的步骤,帮人省一点从 0 开始查资料的时间。