利用HestiaCP自建NS解析及邮局并利用MailGun进行发信

利用HestiaCP自建NS解析及邮局并利用MailGun进行发信

前言 HestiaCP 是从 VestaCP 分叉而来的一个控制面板项目,与 myVesta 类似,它们都继承并扩展了 VestaCP 的功能。考虑到 VestaCP 自身虽然是社区产物,但仍包含一个每月 $5 USD 的商业付费插件。为了彻底消除所有商业限制,并确保构建基于一个**完全开放(Ful

前言

HestiaCP 是从 VestaCP 分叉而来的一个控制面板项目,与 myVesta 类似,它们都继承并扩展了 VestaCP 的功能。考虑到 VestaCP 自身虽然是社区产物,但仍包含一个每月 $5 USD 的商业付费插件。为了彻底消除所有商业限制,并确保构建基于一个**完全开放(Fully Open-Source)**的平台,我们决定采用 HestiaCP

首先要准备的当然是一台公有云服务器,这里为了方便使用选择VMRack提供的L3 VPS2 C4G4 三网精品的服务器作为实现。
然后就是系统及硬件配置方面的选择了,与原版VestaCP不同,HestiaCP仅支持Deb系操作系统,因此无法使用RHEL系的操作系统进行安装。在硬件配置方面,建议使用1C1G以上配置的服务器进行构建,避免出现可用性方面的问题(如内存过低,建议启用SWAP)。
需要注意的是,由于我们会搭建NS解析和邮局,所以相关端口必须进行开放,具体端口及协议如图所示:

在网络安全组对应进行操作后,就可以开始来进行安装操作了。

安装应用

我已经为您提供了美化和优化后的版本,将其组织成了一份清晰、专业的安装指导

以下是您原文的美化和结构化版本,着重于流程的清晰度风险提示


🛠️ HestiaCP 在 EC2 上的安装预处理

1. 解决用户冲突:启用 Root 登录

由于 HestiaCP 默认会在安装过程中接管或覆盖 admin 用户,而 EC2 默认登录用户恰好是此用户,这将导致安装完成后您的 SSH 登录权限失效(即“机器失控”)。因此,我们必须在安装前启用 root 账户登录,以确保安装后仍能访问服务器。

  • 问题所在: EC2 通过在 /root/.ssh/authorized_keys 文件中添加限制性配置,默认阻止 root 用户直接登录。

  • 操作步骤:

    1. 打开密钥文件:/root/.ssh/authorized_keys

    2. 核心修改: 删除文件中位于 ssh-rsa(或其他公钥类型)开头之前的所有内容(请确保不要删除 ssh-rsa 本身及之后的内容)。

保存文件后,重启 SSH 服务

systemctl restart sshd
  1. 风险控制: 请勿关闭当前的 SSH 连接! 立即新建一个 SSH 终端,尝试使用 root 账户替代原先的 admin 账户进行连接测试。连接成功后,方可继续操作。

2. HestiaCP 面板安装准备与执行

HestiaCP 面板功能强大,支持一键安装 NginxHttpd多版本 PHP (MutiVersion)MariaDBPostgreSQL 等核心组件,极大地简化了运维工作。它还自动集成了 Let's Encrypt,可实现 SSL 证书的快速自动化配置。

  • 安装命令获取: 请访问官方文档页面查看安装说明,或前往安装配置生成界面自行定制并生成安装命令。

  • 安装注意事项:

    1. 强制安装: 由于本机已经存在 admin 用户,为避免冲突并顺利执行安装,您需要在安装命令中使用 --force 参数进行强制安装

    2. 域名要求: HestiaCP 自身需要一个可解析的**二级域名(HostName)**才能正常工作,请确保在安装前已完成域名解析配置。

wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
sudo bash hst-install.sh --apache yes --phpfpm yes --multiphp yes --vsftpd yes --proftpd yes --named yes --mysql yes --postgresql yes --exim yes --dovecot yes --sieve yes --clamav yes --spamassassin yes --iptables yes --fail2ban yes --quota yes --api yes --interactive yes --with-debs yes  --port 8083 --hostname hostname.ltd --email i@54yt.net --password password --lang zh-cn  --force

安装邮局

首次登录与初始配置

1. 登录管理面板

面板安装完成后,系统会自动为管理页面配置好 SSL 证书。

  • 访问地址: 访问 https://hostname.ltd:8083

  • 登录凭证:

    • 用户名: admin

    • 密码: 之前安装时设置的 password

2. 创建用户账户(为配置做准备)

出于安全和权限隔离的考虑,HestiaCP 限制使用 admin 管理员账户执行除全局管理以外的日常配置操作。因此,我们需要先创建一个具有用户(User)权限的新账户来执行后续的配置。

  • 操作:

    1. 登录 admin 后台。

    2. 导航至“用户账户”界面。

    3. 新建一个权限为 User 的账户,并完成详细配置。(具体过程从略)

3. 配置 Web 服务与邮件服务

请使用新创建的 User 权限账户登录管理后台,开始配置您的服务。

  • 集成配置: 如果您需要同时创建 Web 站点NS 记录邮箱服务,可以直接在“Web 服务”界面一次性完成配置。

  • 独立配置: 否则,您可以单独前往“邮箱服务”页面进行配置。

邮箱配置关键设置

在配置邮箱时,请务必注意以下设置:

设置项

操作

说明

DKIM 支持

勾选

启用此项以增强邮件可信度,防止邮件被识别为垃圾邮件。

SMTP 中继

不要勾选

禁用中继,除非您明确需要使用外部 SMTP 服务发送邮件。

待添加完成后,再进入编辑页面,完成SSL的配置操作,需要注意的是,在第一次保存完成后,还需要再次进入保存一次,SSL证书才会生效,具体原因不明。
然后点击"DNS配置"按钮,按照图示的对应值前往目前域名所使用的NS提供商处进行对应的配置操作。
在一切配置完成后,我们便可以正常进行收信操作了。但是由于VMRack等云提供商一般都限制了发信操作,因此我们需要向他们发起申请,以便允许本地的发信操作,可以前往Cloudflare进行对应操作。因此这里使用MailGun配置Smarthost的方式进行配置。当然理论上你用SendGrid和Amazon SES之类的服务也同样可以。
打开Github Student Benefits页面,找到MailGun并且关联登录领取对应的权益,同时根据所需要用到的邮箱域名对应配置DNS信息并完成验证操作。
博主自己使用默认的postmaster用户发送信件,结果发现似乎无法使用自定义邮箱名称的方式进行发信,因此这里新增一个SMTP发信用户,名称为
*
在“Domain Settings”中选择对应的域名,切换到“SMTP credentials”界面,选择右上角新建账户即可,待配置完成后及时复制生成的连接密码,以便后续使用。

前往SSH编辑exim4.conf.template文件,
begin authenticators后添加以下内容

# Smart Host Sending
sendbysmarthosts:
  driver = plaintext
  public_name = LOGIN
  hide client_send = : ${extract{user}{${lookup{$sender_address_domain}lsearch{/etc/exim4/exim_smarthosts}}}} : ${extract{pass}{${lookup{$sender_address_domain}lsearch{/etc/exim4/exim_smarthosts}}}}

同时注释下面的一块public_name同样为LOGIN的内容,注意注释4-5行的代码块即可,后面的部分不用删除。
begin routers后添加以下内容:

# Smart Host Sending
sendbysmarthostsrouter:
  driver = manualroute
  domains = ! +local_domains
# senders can be used to limit email addresses, for example: senders = user@domain1.com : *@domain2.com
# senders = user@domain1.com
  condition =  "${if eq{${lookup{$sender_address_domain}partial-lsearch{/etc/exim4/exim_smarthosts}{$value}}}{}{false}{true}}"
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
# headers_add = "${perl{mailtrapheaders}}"
  transport = sendbysmarthoststransport
  route_list = "* ${extract{smtp}{${lookup{$sender_address_domain}lsearch{/etc/exim4/exim_smarthosts}}}}::${extract{port}{${lookup{$sender_address_domain}lsearch{/etc/exim4/exim_smarthosts}}}} byname"
# host_find_failed = defer
# no_more

begin transports后添加以下内容:

# Smart Host Sending
sendbysmarthoststransport:
  driver = smtp
  port = ${extract{port}{${lookup{$sender_address_domain}lsearch{/etc/exim4/exim_smarthosts}}}}
  hosts_require_auth = $host_address
  hosts_require_tls = $host_address

同时以Root用户创建/etc/exim4/exim_smarthost文件,写入以下内容

# "domain" - domain name used in index of the line
# "user" - user (or ID) used in smarthost's SMTP
# "pass" - password (or API secret, or API key, etc.) used for the SMTP user in smarthost
# "smtp" - SMTP server address of smarthost
# "port" - port used in Smarthost (586,25 or another)

# sending by MailJet
# $domain: domain=$domain user=$MAILJET_smtp_user pass=$MAILJET_api_password smtp=in-v3.mailjet.com port=587
#domain1.com: domain=domain1.com user=xxxxxx pass=xxxxxx smtp=in-v3.mailjet.com port=2525

# sending by MailGun
# $domain: domain=$domain user=postmaster@$domain pass=$MailGun_default_password smtp=smtp.eu.mailgun.org port=587
leter.dev: domain=leter.dev user=*@leter.dev pass=xxxxxx smtp=smtp.mailgun.org port=587
#domain2.com: domain=domain2.com user=postmaster@domain2.com pass=xxxxxx smtp=smtp.eu.mailgun.org port=587

# sending by SendPulse
# $domain: domain=$domain user=$SENDPULSE_smtp_user pass=$SENDPULSE_api_password smtp=smtp-pulse.com port=587

# sending by SendGrid
# $domain: domain=$domain user=$SENDGRID_smtp_user pass=$SENDGRID_api_password smtp=smtp.sendgrid.net port=587

对应的域名和用户名密码对应做修改即可,然后重启EXIM服务:

systemctl restart exim4

待重启完成后,便可以正常使用搭建好的邮局来进行收发信操作,同时也可以避免自建发信带来的黑名单问题.

部署NS

首先将刚刚在域名所使用的NS提供商处的所有解析添加入此处,然后添加对应的ns1和ns2记录A解析到目前服务器所对应的IP地址。
为了提高可靠性,建议使用多台服务器作为NS承载,同时需要记得先行进行配置。
待配置完成后,前往域名注册商处,添加“Glue record”或“胶水记录”,不同域名注册商名称使用可能有所不同。
添加ns1和ns2胶水解析到服务器对应的域名,同时在NS配置处将原先的记录修改为我们自己的NS,例如:

ns1.leter.dev
ns2.leter.dev

等待NS记录生效(大约2-12h)后,便可以正常使用。如果出现等待过长时间依然无法解析,请检查服务器使用对ns域名进行了A解析和NS解析,或解析服务是否正常工作。
特别注意,注意采用了2048位DKIM可能造成NS无法正常工作!

总结

要想一个好的邮局体验就需要一台好的服务器,博主推荐VMRack 的云服务器。VMRack 机房在美国洛杉矶 Equinix LA4 金融级数据中心,主打配备全新 AMD EPYC 7K62 高性能处理器,CPU 核心数高达 192 个vCPU是1:1的资源配比性能稳定,采用分布式块存储和三副本机制,大大提高了磁盘读写能力,轻松应对超高IOPS需求现目前主要运营三条线路:三网精品CN2 GIA/9929/CMIN2)、三网优化163/10099/CMI)以及 美国原生Global BGP),三条线路基本满足绝大部分人群的日常使用需求以及中小企业日常的办公需求。可以说 VMRack 在线路方面是非常具有竞争优势的。三网精品直连为中国大陆用户提供了低延迟,高速度的优化网络体验,对于日常办公、娱乐、看视频以及海外电商都是非常适用的;三网优化具有非常大的带宽口子,非常满足需要大流量下载的应用场景,比如CND内容分发、影视站点播等;而美国原生则者主打极致性价比和全球连接性,作为美西落地机是非常具有性价比的。

Snipaste_2025-11-26_14-57-06.png

官网地址:https://www.vmrack.net/

TG交流群: https://t.me/vmrack_chat

评论