玩转系统|利用HestiaCP自建NS解析及邮局并利用MailGun进行发信

前述

HestiaCP是一个VestaCP分叉来的产物,而同样作为VestaCP分叉来的myVesta也具有类似的功能。VestaCP本身作为一个社区的产区,其仅仅有一个商业插件需要每月付费5USD进行使用,因此为了达到完全开放使用的目的,这里选择使用HestiaCP进行构建。

准备

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

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

安装

由于HestiaCP在安装时会默认占用admin用户,而EC2默认的登录用户即为此用户,因此会出现冲突的情况。我们需要先开启使用root用户进行登录,否则在安装完毕后这台机器便听天由命了。
EC2限制使用root用户登录的方式是在key文件中使用了自定义配置,因此只需要首先去前往该文件删除对应的字符即可。
打开/root/.ssh/authorized_keys,删除ssh-rsa开头前面的所有内容(清楚删除ssh-rsa及后面的任何内容)。
保存后重启sshd服务systemctl restart sshd,同时注意不要关闭现存的SSH连接,避免万一配置出错导致无法连接上的情况。新建一个SSH连接,尝试使用root账户替代原先的admin账户进行连接,此时一般就可以正常连接上了。
接下来开始HestiaCP面板的安装工作,此面板同时支持安装Nginx,Httpd,PHP(MutiVersion),MariaDB,PostgreSQL等组件的安装,因此实际使用下来方便,同时它自动集成了Let's Encrypt,可以快速且自动化地配置SSL证书。
前往官方文档页面查看对应的安装说明,或前往安装配置生成界面自行生成安装命令。
需要注意的是,由于本机已经具有admin用户,因此需要使用--force执行强制安装以继续,同时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

在提示是否开始安装时选择Y执行安装操作,然后等待大约十分钟以至安装完成,同时按照提示执行重启操作。

邮局

面板会自动为管理页面配置好SSL证书,打开https://hostname.ltd:8083,输入用户名admin和刚刚设置的密码password,登录后台管理界面。
由于生效时间的关系,我们首先来配置邮局。
HestiaCP限制使用管理员账户进行除全局管理外的操作,因此需要先建立一个具有用户权限的账号来进行后续的配置操作。
在“用户账户”中可以对账户做详细配置,直接新建一个User权限的账户即可,此处过程略去。
使用该账户登录管理后台,如果需要同时创建Web,NS和邮箱,可以直接在“Web服务中直接完成”,否则需要单独前往“邮箱服务”页面进行单独的配置操作。
在配置邮箱时,勾选“DKIM支持”,同时不要勾选“SMTP中继”。
 


待添加完成后,再进入编辑页面,完成SSL的配置操作,需要注意的是,在第一次保存完成后,还需要再次进入保存一次,SSL证书才会生效,具体原因不明。
然后点击"DNS配置"按钮,按照图示的对应值前往目前域名所使用的NS提供商处进行对应的配置操作。
在一切配置完成后,我们便可以正常进行收信操作了。但是由于AWS等公有云提供商一般都限制了发信操作,因此我们需要向他们发起申请,以便允许本地的发信操作,可以前往亚马逊申请界面进行对应操作。但是很遗憾的是亚马逊无情地拒绝了博主的申请,而正好Github学生包中提供了每月20K次的免费发信配额,因此这里使用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

如果在配置Web时同时勾选了域名解析,那么不需要进行配置操作,否则需要在“DNS服务”中进行对应的配置操作,此处略去。
首先将刚刚在域名所使用的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无法正常工作! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/231256.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

yolov8添加cbam注意力机制

(如果添加的是CBAM,已存在,忽略步骤 1 2 3) 步骤1.创建注意力机制-类 ultralytics/nn/modules/conv.py 步骤2.添加到conv.py文件的头文件里 ultralytics/nn/modules/conv.py 步骤3.添加到 init.py文件的头文件里 ultralytics/nn/modules/init.py…

SD之lora训练

目录 为什么要训练自己的模型 SD模型微调方法 准备素材 1 确定要训练的LoRA类型 2 图片收集 3 图片预处理 4 图片标注 安装Koyha_ss 训练lora 1.准备参数和环境 2.启动训练 使用模型 1 拷贝训练过的lora模型 2 启动SD WebUI进行图像生成 为什么要训练自己的模型 …

redis集群(cluster)笔记

1. 定义: 由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序…

基于Swin_Transformer的图像超分辨率系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着科技的不断发展,图像超分辨率技术在计算机视觉领域中变得越来越重要。图像超分辨率是指通过使用计算机算法将低分辨率图像转换为高分辨率图像的过…

111.am40刷机折腾记4-firefly镜像-dp正常显示

1. 平台: rk3399 am40 4g32g 2. 内核:firefly的内核(整体镜像) 版本: linux4.4.194 3. 交叉编译工具 :暂时不编译 4. 宿主机:ubuntu18.04 5. 需要的素材和资料:boot-am40-202…

Uos打包工具最新

我司中标的桌面端项目(electron开发的应用)需兼容统信UOS,关键是要发布到应用商店,首先使用了debreateForUos工具进行打包,打包之后也通过了审核上架到了商店,本以为一切都是如此丝滑顺利,但后续…

10个电子工程师常用的测量仪器详解

之前我们聊了电子工程师常用的模电及数电,得到了很多粉丝朋友的追捧,所以今天主要讲讲电子工程师常用的测量仪器,希望对小伙伴们有所帮助,一起来看看吧! 1、万用表 万用表是最基本的测量仪器之一,用于测量…

【Linux】cat 命令使用

cat 命令 cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。 可以使用cat连接多个文件、创建新文件、将内容附加到现有文件、查看文件内容以及重定向终端或文件中的输出。 cat可用于在不同选项的帮助下格式化文件的输出…

志愿者小程序开发方案详解

志愿者服务小程序有三端:用户端商家端,管理员端,总管理后台。申请成为志愿者,参加志愿者活动,获得积分和服务时长,志愿者服务时长排名,积分可以兑换商品。社区管理员可以管理自己社区的志愿者和…

使用IDM批量下载NASA气象数据

写在前面:因为科研需要,所以需要批量下载NASA数据,但是nasa的文件会每天给一个url链接,手动下载起来很慢,所以特写此篇文章用以教学如何批量下载NASA气象数据 1.下载NASA数据: 首先我们先进入到官网: 官网链接 右上…

海外媒体发稿:软文发稿推广技巧解析超级实用-华媒舍

随着互联网时代的发展,软文发稿成为推广产品与服务的重要手段之一。本文将向大家介绍软文发稿推广的技巧,帮助您更好地利用软文推广商业活动。无论是拥有自己的品牌还是个人创业者,都可以从中受益。 1. 什么是软文? 软文是指以文…

Windows 系统,TortoiseSVN 无法修改 Log 信息解决方法

使用SVN提交版本信息时,注释内容写的不全。通过右键TortoiseSVN的Show log看到提交的的注释,右键看到Edit log message的选项,然而提交后却给出错误提示: Repository has not been enabled to accept revision propchanges; ask …

Python:核心知识点整理大全9-笔记

目录 ​编辑 5.2.4 比较数字 5.2.5 检查多个条件 1. 使用and检查多个条件 2. 使用or检查多个条件 5.2.6 检查特定值是否包含在列表中 5.2.7 检查特定值是否不包含在列表中 banned_users.py 5.2.8 布尔表达式 5.3 if 语句 5.3.1 简单的 if 语句 5.3.2 if-else 语句 …

AI改写文章的软件,免费AI改写原创文章的工具

在当今数字化时代,人们的工作生活已经离不开信息技术的支持。特别是在文案创作领域,如何提高效率、保持文案质量成为了许多写作者关注的焦点,本文将深入探讨AI改写文案的工具,包括其原理、应用场景。 AI改写文案的背后原理 为了更…

Android View.inflate 和 LayoutInflater.from(this).inflate 的区别

前言 两个都是布局加载器,而View.inflate是对 LayoutInflater.from(context).inflate的封装,功能相同,案例使用了dataBinding。 View.inflate(context, layoutResId, root) LayoutInflater.from(context).inflate(layoutResId, root, fals…

mmdetection测试保存到新的文件夹,无需标签

这个是用demo这个代码测试的,需要先训练一个pth文件夹,训练之后再调用pth文件夹进行测试。测试的代码文件名是:image_demo_new.py,代码如系所示: # Copyright (c) OpenMMLab. All rights reserved. import asyncio fr…

【FPGA图像处理实战】- RGB与YUV互转

RGB颜色空间和YUV颜色空间是图像处理中经常遇到的两个颜色空间,但它们的特性不一样,应用的场景有差异,所以经常会遇到有RGB转YUV、YUV转RGB的需求。 前几天更新了FPGA数学运算的几节课程,今天我们来学习一下“RGB与YUV互转”,主要分为5个部分:RGB与YUV的介绍、RGB与YUV互…

uniapp实战 —— 竖排多级分类展示

效果预览 完整范例代码 页面 src\pages\category\category.vue <script setup lang"ts"> import { getCategoryTopAPI } from /apis/category import type { CategoryTopItem } from /types/category import { onLoad } from dcloudio/uni-app import { compu…

Java网络通信-第21章

Java网络通信-第21章 1.网络程序设计基础 网络程序设计基础涵盖了许多方面&#xff0c;包括网络协议、Web开发、数据库连接、安全性等。 1.1局域网与互联网 局域网&#xff08;LAN&#xff09;与互联网&#xff08;Internet&#xff09;是两个不同的概念&#xff0c;它们分…