-
MX记录和CNAME记录冲突怎么办
很多朋友在部署域名邮箱的时候都会发现,DNS服务商会提示根域名MX记录和CNAME记录有冲突,不能共存。今天,我就来介绍一下这种情况为什么会发生,且如何完美解决。 1、CNAME和MX记录冲突的成因 CNAME记录和MX记录冲突的根本原因在于CNAME (Canonical NAME)记录的特殊性。根据RFC 1034的规定,根域名不能设置CNAME记录,这是由DNS服务本身的固有限制决定的。或许你可以在一些DNS服务商那里为根域名添加CNAME记录,但这些都是不符合DNS规范的。如果要将根域名设置为另一个域名的别名,需要设置ALIAS记录。在下一节我将具体介绍ALIAS记录。 如果根域名设置了CNAME记录,会和其他所有的记录相冲突,而最常见的冲突情形就是MX记录。对于同一个根域名,CNAME记录和A记录、NS记录、SOA记录、TXT记录等都会冲突,不过这些情形并不常见,所以一般不会造成太大的问题。 我们以同时在根域名设置CNAME记录和MX记录为例。向该域名的域名邮箱发信且使用DNS寻址时,如果先寻到了CNAME记录,就无法再获取到该域名对应的MX记录。这就会导致使用该域名搭建的域名邮箱在收件时会经常丢信漏信。同时,CNAME记录不仅与MX记录冲突,也会与TXT记录冲突,这就会导致为根域名设置的SPF-TXT记录无法生效,因此发信时更容易进垃圾箱。 那么问题来了,如果我们要为网站开启CDN, 那么最常见的方式就是使用CNAME接入。如果还需要一并使用域名邮箱,那么就不得不造成CNAME记录和MX记录的冲突。有什么好办法呢?这里我们有三个办法,可以解决这个问题。 2、如何解决CNAME和MX记录冲突 解决CNAME和MX记录的冲突有三种可行的办法,分别是 (1) 使用www.域名接入CDN; (2) 使用A记录轮询接入CDN; (3) 使用ALIAS (CNAME Flattening) 记录代替CNAME记录。接下来我将具体介绍这三种方法。 (1) 使用www.域名接入CDN 大家都知道,一般来说为根域名设置CNAME记录的情况都是由于网站需要接入CDN. 如果您可以接受网站采用www.example.com这样的网址而不是example.com,那么您完全可以使用www.example.com域名接入CDN. 由于www.example.com不是根域名了,因此它的CNAME记录不会和根域名的MX记录冲突,这样就解决了网站的CDN接入与域名邮箱共存的问题。 这种方法的有点在于最为简单,但缺点是必须使用www.形式的域名。 (2) 使用A记录接入CDN 如果您无法接受网站采用www.域名,那么您也可以将根域名采用A记录的方式接入CDN. 使用A记录时,您还可以自行设定线路,或者设置轮询。根域名的A记录不会和MX记录冲突,这样就解决了网站的CDN接入与域名邮箱共存的问题。 一般来说,这种情况比较适用于网站使用自行搭建的CDN系统,因为商用CDN系统的IP地址有时会发生变动,造成A记录解析失效。 (3) 使用ALIAS (CNAME Flattening) 记录代替CNAME记录 使用ALIAS记录代替CNAME记录是目前国际上最主流的设置办法了,它能起到与CNAME记录完全一样的效果,又不会和其他记录产生冲突。 这里我们先介绍一下ALIAS记录。ALIAS记录,又称CNAME Flattening记录,中文为“别名”记录,是一种CNAME记录的替代型记录。它能够起到和CNAME记录完全一样的效果,即将一个域名设置为另一个域名的别名,而唯一的差别就是ALIAS记录不会与其他记录发生冲突。 因此,我们只需要在DNS服务商那里为根域名设置ALIAS或者CNAME Flattening记录就可以了,它的设置方法与CNAME记录完全相同。通过设置ALIAS记录,我们就能够完美解决网站根域名的CDN接入与域名邮箱共存问题。如果您的DNS服务商目前不支持ALIAS记录,您可以使用市面上很多免费的DNS服务,比如Cloudflare, he.net, dnsimple.com, Route53 (这个不免费), cloudns.net, 等等。这些DNS服务商都支持设置ALIAS记录。大部分国际域名注册商,比如Godaddy, Porkbun, Namesilo, Namecheap, Gandi, Google Domains等等,也都支持设置ALIAS记录。 综上所述,CNAME记录具有特殊性,会和同域名下的所有其他记录发生冲突,导致无法同时配置根域名的CDN和MX域名邮箱。有三种方法可以解决CNAME记录与MX记录的冲突,分别是 (1) 使用www.域名接入CDN; (2) 使用A记录轮询接入CDN; (3) 使用ALIAS (CNAME Flattening) 记录代替CNAME记录。我们推荐您使用一个支持ALIAS记录的DNS服务商,然后为您的根域名设置ALIAS记录,就可以完美解决这个问题。
-
在Ubuntu 18.04、16.04上设置绑定权威DNS服务器
本教程将向您展示如何使用广泛使用的BIND 9软件在Ubuntu18.04/16.04上设置和运行自己的权威名称服务器。 注意:本教程展示了命令行方法。如果您想从web GUI编辑DNS记录,我建议使用Webmin设置权威DNS服务器,这是一个免费的开源服务器控制面板。 什么是权威DNS服务器? 如果您拥有一个域名,并且希望您自己的DNS服务器为您的域名处理名称解析,而不是使用您的域名注册商的DNS服务器,那么您需要设置一个权威的DNS服务器。 域名所有者使用权威DNS服务器来存储DNS记录。它为DNS解析程序(如8.8.8.8或1.1.1.1)提供权威答案,这些解析程序代表终端用户在PC、智能手机或平板电脑上查询DNS记录。 关于BIND BIND(Berkeley Internet Name Domain)是一款开源、灵活、功能齐全的DNS软件,由于其稳定性和高质量,在Unix/Linux上得到了广泛应用。它最初由加州大学伯克利分校(UC Berkeley)开发,后来在1994年被转移到互联网系统联盟(Internet Systems Consortium,Inc.)进行开发。 BIND可以同时充当区域的权威DNS服务器和DNS解析程序。DNS解析程序也可以称为递归名称服务器,因为它对本地客户端执行递归查找。然而,同时扮演两个角色并不有利。在两台不同的机器上分离这两个角色是一种很好的做法。 在上一篇文章中,我解释了在Ubuntu 18.04/16.04上设置本地DNS解析器的步骤。本教程将向您展示如何在Ubuntu 18.04/16.04上将BIND9设置为仅限权威的DNS服务器,并禁用递归。 先决条件 要学习本教程,您应该已经购买了域名。我在namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 你还需要两台服务器。一台服务器用于主DNS服务器,另一台用于从DNS服务器。理想情况下,这两台服务器应该位于不同的物理位置。如果一个DNS服务器处于脱机状态,另一个DNS服务器仍然可以响应您的域名的DNS查询。 每台服务器只需要512MB内存,以下是我推荐的主机提供商。我都用过了。 Vultr:起价为每月2.5美元。需要信用卡。你可以通过我的推荐链接在Vultr创建一个账户,获得50美元的免费信用。 DigitalOcean:起价为每月5美元。不需要信用卡。你可以用贝宝。你可以通过我的推荐链接在DigitalOcean创建一个帐户,获得50美元的免费信用。 一旦你买了两台服务器,在上面安装Ubuntu,并按照下面的说明操作。 使用BIND9在Ubuntu 18.04/16.04上设置权威DNS服务器 您需要在两台服务器上运行本节中的命令。 通过SSH登录这两台服务器,并从默认存储库运行以下命令,在Ubuntu 18.04/16.04上安装BIND 9。BIND 9是当前版本,BIND 10是一个死项目。 sudo apt更新sudo apt安装bind9 bind9utils bind9 doc 检查版本号。 命名为-v 样本输出: 绑定9.11.3-1 buntu1。3-Ubuntu(扩展支持版)<;识别号:a375815>; 要检查版本号和生成选项,请运行 命名为-V 默认情况下,绑定在安装后自动启动。您可以通过以下方式检查其状态: systemctl状态绑定9 如果它没有运行,那么从以下内容开始: sudo systemctl start bind9 并在启动时启用自动启动: sudo systemctl enable bind9 BIND服务器将以BIND用户的身份运行,该用户是在安装过程中创建的,并在TCP和UDP端口53上侦听,如运行以下命令所示: sudo netstat-lnptu | grep命名 绑定守护进程被称为named。(守护进程是在后台运行的软件。)命名的二进制文件由bind9包安装,还有另一个重要的二进制文件:rndc,远程名称守护程序控制器,由bind9utils包安装。rndc二进制文件用于重新加载/停止和控制绑定守护进程的其他方面。通信通过TCP端口953完成。 例如,我们可以检查绑定名称服务器的状态。 sudo rndc状态 主绑定配置文件/etc/BIND/named。conf从其他3个文件中获取设置。 /etc/bind/named。形态选项 /etc/bind/named。conf.local /etc/bind/named。conf.default-zones Ubuntu上的BIND9服务器提供了本地主机和本地网络客户端的递归服务。由于我们正在设置权威DNS服务器,因此需要禁用递归。编辑/etc/bind/named。conf.options文件。 sudo nano/etc/bind/named。形态选项 在选项{…}中添加以下行;条款 //出于安全原因,对客户端隐藏版本号。版本“当前不可用”;//在权威DNS服务器上禁用递归。递归否;//启用查询日志querylog yes;//不允许区域转移允许转移{none;}; 从技术上讲,您只需要添加递归no;禁用递归,但最好添加其他3条指令。保存并关闭文件。然后重启BIND。 sudo systemctl重启bind9 主DNS服务器配置 从两台服务器中选择一台作为主DNS服务器。我们将把它命名为ns1。实例通用域名格式。 主DNS服务器保存区域文件的主副本。在此服务器上更改DNS记录。一个域可以有一个或多个DNS区域。每个DNS区域都有一个区域文件,其中包含该区域中的每个DNS记录。为了简单起见,本文假设您希望使用单个DNS区域来管理您的域名的所有DNS记录。 /etc/bind/named。conf.default-zones文件定义根区域和本地主机区域。要为域名添加区域,请编辑/etc/bind/named。conf.local文件。 sudo nano/etc/bind/named。conf.local 将以下行添加到此文件。替换示例。使用你自己的域名。将12.34.56.78替换为从属DNS服务器的IP地址。 区域“example.com”{type master;file”/etc/bind/db.example.com”;允许查询{any;};允许转移{12.34.56.78;};}; 在上述配置中,我们使用zone子句创建了一个新区域,并指定这是主区域。区域文件是/etc/bind/db。实例com,我们将在其中添加DNS记录。仅允许从DNS服务器进行区域传输。保存并关闭文件。 我们可以使用区域模板文件,而不是从头创建区域文件。复制数据库的内容。空到一个新文件。 sudo cp/etc/bind/db。空/etc/bind/db。实例通用域名格式 区域文件可以包含3种类型的条目: 注释:以分号(;)开头 指令:以美元符号($)开头 资源记录:又名DNS记录 区域文件通常由以下类型的DNS记录组成。 SOA(授权开始)记录:定义区域的关键特征。这是区域文件中的第一个DNS记录,是必需的。 NS(名称服务器)记录:指定用于存储DNS记录和回答域名DNS查询的服务器。区域文件中必须至少有两条NS记录。 MX(邮件交换器)记录:指定哪些主机负责域名的电子邮件传递。 (地址)记录:将DNS名称转换为IPv4地址。 AAAA(Quad A)记录:将DNS名称转换为IPv6地址。 CNAME记录(规范名称):用于为DNS名称创建别名。 TXT记录:SPF、DKIM、DMARC等。 现在,让我们编辑区域文件。 sudo nano/etc/bind/db。实例通用域名格式 默认情况下,它如下所示: 你可以改成这个。 哪里 $TTL指令定义区域的默认生存时间值,即DNS记录可以缓存在DNS解析程序上的时间。该指令是强制性的。时间以秒为单位。 $ORIGIN指令定义基本域。 域名必须以点(.)结尾,这是根域。当域名以点结尾时,它是一个完全限定的域名(FQDN)。 @符号引用基本域。 在DNS类中。它代表互联网。存在其他DNS类,但很少使用。 区域文件中的第一条记录是SOA(授权开始)记录。此记录包含以下信息: 主DNS服务器。 区域管理员的电子邮件地址。RFC 2142建议使用电子邮件地址[email ;protected]。在区域文件中,此电子邮件地址采用以下形式:hostmaster。实例com,因为@符号在区域文件中有特殊含义。 区域序列号。序列号是从DNS服务器跟踪区域变化的一种方式。按照惯例,序列号采用日期格式:yyyymmddss,其中yyyy是四位数字的年份号,mm是月份,dd是日期,ss是日期的序列号。更改区域文件时,必须更新序列号。 刷新值。当达到刷新值时,从DNS服务器将尝试从主DNS服务器读取SOA记录。如果序列号变高,则启动区域传输。 重试值。定义从DNS服务器无法连接到主DNS服务器时的重试间隔(以秒为单位)。 到期:如果从属DNS服务器在这段时间内未能与主DNS服务器联系,则从属DNS服务器将停止响应此区域的DNS查询。 负缓存TTL:为不存在的DNS名称(NXDOMAIN)定义DNS响应的生存时间值。 TXT记录通常用双引号括起来。如果添加DKIM记录,还需要用括号括起该值。 保存并关闭文件。然后运行以下命令检查主配置文件中是否存在语法错误。无声输出表示未发现错误。 sudo命名为checkconf 然后检查区域文件的语法。 sudo命名为checkzone示例。com/etc/bind/db。实例通用域名格式 如果区域文件中存在语法错误,则需要修复它,否则将无法加载此区域。以下消息表示没有语法错误。 区域示例。com/IN:已加载序列号2019011503正常 然后重启BIND9。 sudo systemctl重启bind9 如果您使用的是简单防火墙(UFW),请打开TCP和UDP端口53。 sudo ufw allow 53/tcp sudo ufw allow 53/udp 如果您直接使用iptables防火墙,请运行以下命令。 sudo iptables-A INPUT-p tcp-dport 53-j ACCEPT sudo iptables-A INPUT-p udp-dprot 53-j ACCEPT 从DNS服务器配置 现在我们使用另一台服务器作为从DNS服务器,它将被命名为ns2。实例通用域名格式。 首先,编辑命名文件。conf.local文件。 sudo nano/etc/bind/named。conf.local 添加一个如下所示的区域。将12.34.56.78替换为主DNS服务器的IP地址。 区域“example.com”{type slave;文件“db.example.com”;允许查询{any;};硕士{12.34.56.78;};}; 在上面的配置中,我们指定这是示例中的从属DNS服务器。com区域,它将只接受来自受信任IP地址的区域传输。 保存并关闭文件。然后运行以下命令检查主配置文件中是否存在语法错误。 sudo命名为checkconf 如果没有发现错误,请重新启动BIND9。 sudo systemctl重启bind9 从DNS服务器上的区域文件是从区域传输加载的,该传输用于同步从主DNS服务器到从DNS服务器的DNS记录更改。BIND9重新启动后,区域传输将立即启动。使用以下命令检查BIND9日志。 sudo journalctl-eu bind9 您可以看到如下消息,这表明区域传输成功。 命名为[31518]:转移“示例”。com/IN'from 12.34.56.78#53:传输完成:1条消息,16条记录,886字节,0.004秒(221500字节/秒) 区域文件将另存为/var/cache/bind/db。实例通用域名格式。 如果您使用的是简单防火墙(UFW),请打开TCP和UDP端口53。 sudo ufw allow 53/tcp sudo ufw allow 53/udp 如果您直接使用iptables防火墙,请运行以下命令。 sudo iptables-A INPUT-p tcp-dport 53-j ACCEPT sudo iptables-A INPUT-p udp-dport 53-j ACCEPT 更多关于区域转移的信息 当达到SOA记录中的刷新时间时,从属DNS服务器将再次联系主服务器,如果主服务器上的序列号大于从属服务器上的序列号,则将启动区域传输。有两种类型的区域转移: 完整区域传输(AXFR):传输区域文件的完整副本。 增量区域传输(IXFR):仅传输更改的DNS记录。 两种类型的区域传输都使用TCP端口53。默认情况下,从属DNS服务器上的绑定将请求增量区域传输,而主DNS服务器上的绑定仅在区域是动态的情况下才允许增量区域传输。 区域传输间隔是DNS记录更改传播速度的主要因素。当区域发生更改时,绑定主机将通知从属DNS服务器,而不是等待从属DNS服务器联系。这可以大大缩短将区域更改传播到Internet的时间。 反向区 反向区域包含将IP地址映射到DNS名称的PTR记录。它是DNS A记录的对应项。PTR记录通常是邮件服务器通过垃圾邮件过滤器所必需的。此记录不属于域。您需要在主机提供商的控制面板上创建PTR记录,或者询问您的ISP,所以我不打算在BIND中介绍创建反向区域。 更改NS记录并创建胶水记录 现在你需要去你的域名注册商的网站更改你的域名的NS记录,这样互联网就会知道你现在正在使用自己的DNS服务器。通常在NS记录中使用主机名,比如ns1。实例com和ns2。实例通用域名格式。 名称服务器1:ns1。实例com名称服务器2:ns2。实例通用域名格式 如果你有一个域名的例子。com,您使用一个子域作为权威DNS服务器(ns1.example.com和ns2.example.com),然后您还需要在您的域注册器上创建一个粘合记录,以便Internet可以知道您的DNS服务器的IP地址。胶水记录是ns1的A记录。实例com和ns2。实例通用域名格式。 ns1。实例主服务器ns2的com IP地址。实例从服务器的com IP地址 上述信息将通过可扩展配置协议(EPP)发送给运行TLD DNS服务器的注册运营商,以便TLD DNS服务器知道您的域名的权威DNS服务器的主机名和IP地址。根据您使用的域注册器,您的NS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io检查您的新NS记录是否处于活动状态。 我将向你展示如何在namescapet上实现这一点。 如果你在NameCheap购买了域名,请登录你的NameCheap帐户。选择左侧边栏上的域列表菜单,然后单击最右侧的管理按钮。 选择高级DNS。 滚动到页面底部,您将找到个人DNS服务器部分。单击添加名称服务器按钮添加您自己的名称服务器:ns1。实例com和ns2。实例通用域名格式。您需要输入名称服务器的IP地址。 添加两个名称服务器后,单击搜索按钮检查它们是否已成功添加。如果是这样,胶水记录将显示在此页面底部。 现在单击“域”选项卡,并使用自定义DNS服务器。 根据您使用的域注册器,您的NS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io检查您的新NS记录是否处于活动状态。 在NS记录和glue记录被传播到Internet之后,DNS服务器将响应您的域名的DNS查询。您可以通过以下方式查看查询日志: sudo journalctl-eu bind9 您还可以使用dig实用程序检查域名的NS记录。 举个例子。通用域名格式 如果NS记录和glue记录已传播到Internet,您应该在“答案”部分看到您的名称服务器。如果您看到SERVFAIL错误,可能是因为您没有在名称服务器上打开UDP端口53。 需要知道的事情 术语主DNS服务器仅表示此服务器存储区域文件的主副本。在DNS解析方面,它没有更高的优先级。 更改区域文件时,请始终更新SOA序列号。 在绑定区域文件中使用通配符 如果要将所有子域指向同一IP地址,可以使用通配符来实现。例如,下面一行将使您的所有子域指向1.2.3.4 IP地址。 *.你的域名。com在1.2.3.4中的应用 启用解析器 BIND可以同时充当区域的权威DNS服务器和DNS解析程序。在两台不同的主机上分离这两个角色是一种很好的做法,在本文中,我们在BIND中禁用了解析器。如果您真的想启用解析器,请按照以下说明操作。 编辑绑定配置文件。 sudo nano/etc/bind/named。形态选项 找到下面几行。 //在权威DNS服务器上禁用递归。递归否; 将它们更改为以下内容,这样只有受信任的IP地址才能向DNS解析程序发送递归查询,而您的服务器将不会是开放的解析程序。 //仅允许对受信任的客户端进行递归。递归是的;允许查询{localhost;12.34.56.78;}; 将12.34.56.78替换为您自己的IP地址。保存并关闭文件。确保在/etc/bind/named中定义区域。conf.local文件具有以下选项,因此Internet可以查询您所在区域的DNS记录。 允许查询{any;}; 然后重启BIND。 sudo systemctl重启bind9 去https://openresolver.com/测试绑定服务器是否为开放式解析程序。 收尾 就这样!我希望本教程能帮助您在Ubuntu 18.04和Ubuntu 16.04上使用BIND9设置权威DNS服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何使用Modoboa在Ubuntu18.04上快速设置邮件服务器
本教程将向您展示如何使用Modoboa在Ubuntu18.04上快速设置自己的电子邮件服务器,这是一个免费的开源邮件托管和管理平台,旨在与Postfix SMTP服务器和Dovecot IMAP/POP3服务器配合使用。 Modoboa是用Python编写的,根据ISC许可条款发布。最新版本是v1。14.0,于2019年7月5日发布。Modoboa的主要特点如下: 默认情况下,Modoboa使用Nginx web服务器为webmail客户端和基于web的管理面板提供服务。 与Postfix和Dovecot兼容。 支持MySQL/MariaDB或PostgreSQL数据库。 在基于web的管理面板中轻松创建无限邮箱和无限邮件域。 在基于web的管理面板中轻松创建电子邮件别名。 webmail客户端提供了一个易于使用的邮件过滤器,帮助您将邮件组织到不同的文件夹。 它可以通过监控电子邮件黑名单和生成DMARC报告来帮助你保护你的域名声誉,这样你的电子邮件就有更好的机会进入收件箱而不是垃圾邮件文件夹。 包括amavis前端,用于阻止垃圾邮件和检测电子邮件中的病毒。 日历和通讯录。 与Let’s Encrypt集成。 包括AutoMX,允许最终用户在桌面或移动邮件客户端中轻松配置邮件帐户。 第一步:选择合适的主机提供商并购买域名 要使用Modoboa设置一个完整的电子邮件服务器,您需要一个至少有3GB内存的服务器,因为安装后,您的服务器将使用超过2GB的内存。 强烈建议您在Ubuntu 18.04服务器的干净安装上安装Modoboa。 本教程是在每月9美元的Kamatera VPS(虚拟专用服务器)上完成的,该服务器具有1个CPU和3GB RAM。他们提供30天的免费试用期。 Kamatera是运行邮件服务器的一个非常好的选择,因为 它们不会阻止端口25,因此您可以发送无限量的电子邮件(事务性电子邮件和时事通讯),而无需在SMTP中继服务上花钱。Kamatera没有任何SMTP限制。你每天可以发送一百万封电子邮件。 IP地址不在任何电子邮件黑名单上。(至少对我来说是这样。我选择了达拉斯数据中心。)你肯定不想被列入可怕的微软Outlook IP黑名单或spamrats黑名单。有些黑名单会屏蔽整个IP范围,你无法从此类黑名单中删除你的IP地址。 您可以编辑PTR记录以提高电子邮件的可交付性。 它们允许你向你的电子邮件订阅者发送时事通讯,而不受每小时或每天的限制。 您可以为一台服务器订购多个IP地址。这对需要发送大量电子邮件的人非常有用。您可以在多个IP地址上传播电子邮件流量,以实现更好的电子邮件交付。 其他VPS提供商,如DigitalOcean阻止了端口25。DigitalOcean不会解锁端口25,因此您需要设置SMTP中继以绕过阻止,这可能会增加您的费用。如果您使用Vultr VPS,则默认情况下端口25被阻止。如果您打开支持票证,他们可以解除阻止,但如果他们决定不允许您的电子邮件发送活动,他们可能会在任何时候再次阻止。如果你使用他们的服务器发送时事通讯,Vultr实际上可能会重新阻止它。 转到Kamatera网站创建帐户,然后在帐户仪表板中创建服务器。 我建议遵循下面链接的教程,在Kamatera上正确设置Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 创建服务器后,Kamatera将向您发送一封包含服务器SSH登录详细信息的电子邮件。要登录到服务器,可以使用SSH客户端。如果您在计算机上使用Linux或macOS,只需打开一个终端窗口并运行以下命令即可登录服务器。将12.34.56.78替换为服务器的IP地址。 ssh [email protected] 系统将要求您输入密码。 你还需要一个域名。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 第2步:创建DNS MX记录 MX记录指定哪个或多个主机处理特定域名的电子邮件。例如,为linuxbabe处理电子邮件的主机。com是邮件。利努克斯宝贝。通用域名格式。如果拥有Gmail账户的人向[email ;protected]发送电子邮件,Gmail服务器将查询linuxbabe的MX记录。通用域名格式。当它发现那封邮件。利努克斯宝贝。com负责接收电子邮件,然后查询邮件记录。利努克斯宝贝。com获取IP地址,从而可以发送电子邮件。 在DNS管理器中,为域名创建MX记录。在名称字段中输入@代表主域名,然后输入mail。你的领域。com在值字段中。 注意:MX记录的主机名不能是其他名称的别名。此外,强烈建议您使用主机名,而不是MX记录的裸IP地址。 DNS管理员可能会要求您输入首选项值(也称为优先级值)。它可以是0到65356之间的任何数字。小数字的优先级高于大数字。您可以为电子邮件服务器输入0,或接受默认值。 创建MX记录后,还需要为邮件创建一个记录。你的领域。com,以便将其解析为IP地址。如果您的服务器使用IPv6地址,请确保添加AAAA记录。 如果使用Cloudflare DNS服务,则在为邮件服务器创建记录时不应启用CDN功能。 第3步:使用Modoboa安装程序在Ubuntu18.04上设置邮件服务器 通过SSH登录服务器,然后运行以下命令来更新软件包。 sudo apt update sudo apt upgrade -y 我强烈建议创建一个sudo用户来管理服务器,而不是使用默认的root用户来提高服务器安全性。运行以下命令创建用户。将用户名替换为首选用户名。 adduser username 然后将用户添加到sudo组。 adduser username sudo 切换到新用户。 su - username 从Github下载modoboa安装程序。 git clone https://github.com/modoboa/modoboa-installer Modoboa是用Python编写的。运行以下命令安装必要的Python软件。 sudo apt-get install python3-virtualenv python3-pip 然后导航到modoboa安装程序目录并创建一个配置文件。替换示例。使用你自己的域名。 cd modoboa-installer sudo ./run.py --stop-after-configfile-check example.com 编辑配置文件安装程序。使用命令行文本编辑器,如nano。 sudo nano installer.cfg 要从Let's Encrypt为邮件服务器获取有效的TLS证书,请在[certificate]部分,将type的值从self signed更改为letsencrypt。 type = letsencrypt 并将电子邮件地址从[email ;protected]更改为您的真实电子邮件地址,用于帐户恢复和重要通知。如果使用默认电子邮件地址,您将无法获取并安装Let's Encrypt certificate。 默认情况下,Modoboa安装程序将安装PostgreSQL数据库服务器,如配置文件中的以下行所示。 [database] engine = postgres host = 127.0.0.1 install = true 如果您想使用MariaDB数据库服务器,那么将引擎从postgres更改为mysql。(Modoboa将安装MariaDB而不是MySQL。) 保存并关闭文件。(要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出,请按Ctrl+X。) 接下来,应该使用完全限定的域名(FQDN)作为邮件服务器(如mail)的主机名。实例通用域名格式。运行以下命令设置主机名。 sudo hostnamectl set-hostname mail.example.com 现在我们需要验证DNS记录是否已传播到Internet。根据您使用的域注册器,您的DNS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io,输入邮件服务器的主机名(mail.example.com)以检查DNS传播。 如果DNS记录已传播,请运行以下命令开始安装。(请用主域名(如linuxbabe.com)替换example.com。不要在此命令中使用mail.example.com这样的子域)。 sudo ./run.py --interactive example.com 安装过程可能需要一段时间。在我的服务器上花了10分钟。如果在安装过程中看到错误,可以使用--debug选项查看更详细的输出。 sudo ./run.py --interactive --debug example.com 在Modoboa完成安装后,您可以使用用户名admin和密码登录管理面板。 登录后,您应该转到管理员->;设置->;配置文件以更改密码。 第4步:在Modoboa管理面板中添加邮箱 转到“域”选项卡,然后单击“添加”按钮添加新域。 然后在“名称”字段中输入主域名。强烈建议您启用DKIM签名,这有助于提高您的域声誉。在键选择器字段中,您可以输入一个随机单词,如modoboa。选择2048作为密钥长度。 在下一个屏幕中,您可以选择为您的域创建管理员帐户。SMTP协议要求邮件服务器应该有一个[email ;protected]地址。 点击提交按钮,你的域名将被添加到Modoboa中。 要添加电子邮件地址,请转到“域”选项卡,然后单击您的域名。 然后单击邮箱。 单击添加按钮并选择帐户。 然后选择简单用户作为角色。在用户名字段中输入电子邮件地址,然后输入密码。 在下一个屏幕中,您可以选择为此电子邮件地址创建别名。 单击提交按钮后,将创建电子邮件地址。 第5步:发送测试电子邮件 要登录到网络邮件,您需要先注销管理员帐户,然后输入用户凭据。 登录Modoboa webmail后,您可以将测试电子邮件从您的私人电子邮件服务器发送到其他电子邮件地址,反之亦然。 入站邮件将延迟几分钟,因为默认情况下,Modoboa会启用greylisting,这会告诉其他发送SMTP的服务器在几分钟后重试。这对阻止垃圾邮件很有用。下面的消息位于/var/log/mail中。日志表明已启用灰色列表。 postfix/postscreen[20995]: NOQUEUE: reject: RCPT from [34.209.113.130]:36980: 450 4.3.2 Service currently unavailable; 然而,灰色列表可能相当烦人。您可以通过编辑后缀主配置文件来禁用它。 sudo nano /etc/postfix/main.cf 在文件末尾找到以下几行并注释掉。(在每行开头添加#字符。) postscreen_pipelining_enable = yes postscreen_pipelining_action = enforce postscreen_non_smtp_command_enable = yes postscreen_non_smtp_command_action = enforce postscreen_bare_newline_enable = yes postscreen_bare_newline_action = enforce 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 现在你应该可以不用等几分钟就能收到电子邮件了。 添加交换空间 ClamAV用于扫描电子邮件中的病毒。ClamAV可以使用相当数量的RAM。如果您的服务器上没有足够的RAM,ClamAV将无法正常工作,这将阻止您的邮件服务器发送电子邮件。您可以向服务器添加交换文件,以增加服务器上的总RAM。(请注意,在服务器上使用交换空间会降低服务器性能。如果希望获得更好的性能,应升级物理RAM,而不是使用交换空间。) 要在服务器上添加交换空间,首先,使用fallocate命令创建一个文件。例如,在根文件系统中创建一个名为swapfile、容量为1G的文件: sudo fallocate -l 1G /swapfile 然后确保只有root用户可以读写它。 sudo chmod 600 /swapfile 将其格式化为交换: sudo mkswap /swapfile 输出: Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=0aab5886-4dfb-40d4-920d-fb1115c67433 启用交换文件 sudo swapon /swapfile 要在系统启动时装载交换空间,请编辑/etc/fstab文件。 sudo nano /etc/fstab 在该文件底部添加以下行。 /swapfile swap swap defaults 0 0 保存并关闭文件。然后重新加载systemd并重新启动ClamAV。 sudo systemctl daemon-reload sudo systemctl restart clamav-daemon 步骤6:检查端口25(出站)是否被阻止 您的ISP或主机服务提供商不会阻止与服务器端口25的传入连接,这意味着您可以接收来自其他邮件服务器的电子邮件。然而,许多ISP/主机提供商会阻止与其他邮件服务器端口25的传出连接,这意味着您无法发送电子邮件。 如果你的电子邮件没有到达你的其他电子邮件地址,比如Gmail,那么在你的邮件服务器上运行以下命令,检查端口25(出站)是否被阻止。 telnet gmail-smtp-in.l.google.com 25 如果未被阻止,您将看到如下消息,这表明已成功建立连接。(提示:输入quit并按Enter键关闭连接。) Trying 74.125.68.26... Connected to gmail-smtp-in.l.google.com. Escape character is '^]'. 220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp 如果端口25(出站)被阻止,您将看到如下情况: Trying 2607:f8b0:400e:c06::1a... Trying 74.125.195.27... telnet: Unable to connect to remote host: Connection timed out 在这种情况下,您的Postfix无法向其他SMTP服务器发送电子邮件。请您的ISP/主机提供商为您打开它。如果他们拒绝您的请求,您需要设置SMTP中继以绕过端口25阻塞。 还是不能发邮件? 如果端口25(出站)未被阻止,但您仍然无法从自己的邮件服务器向Gmail等其他电子邮件地址发送电子邮件,那么您应该检查邮件日志(/var/log/mail.log)。 sudo nano /var/log/mail.log 例如,有些人可能会在文件中看到以下几行。 host gmail-smtp-in.l.google.com[2404:6800:4003:c03::1b] said: 550-5.7.1 [2a0d:7c40:3000:b8b::2] Our system has detected that 550-5.7.1 this message does not meet IPv6 sending guidelines regarding PTR 550-5.7.1 records and authentication. Please review 550-5.7.1 for more information 这意味着您的邮件服务器正在使用IPv6发送电子邮件,但您没有设置IPv6记录。你应该去你的DNS管理员那里,为邮件设置AAAA记录。你的领域。com,那么您应该为IPv6地址设置PTR记录,这将在步骤8中讨论。 第7步:在计算机或移动设备上使用邮件客户端 启动你的桌面电子邮件客户端,比如Mozilla Thunderbird,并添加一个邮件帐户。 在“传入服务器”部分,选择IMAP协议,输入mail。你的领域。com作为服务器名,选择端口143和STARTTLS。选择普通密码作为身份验证方法。 在“发送”部分,选择SMTP协议,输入mail。你的领域。com作为服务器名,选择端口587和STARTTLS。选择普通密码作为身份验证方法。 您还可以在端口993上使用带有SSL/TLS加密的IMAP。 第8步:提高电子邮件交付能力 为了防止您的电子邮件被标记为垃圾邮件,您应该设置PTR、SPF、DKIM和DMARC记录。 PTR记录 指针记录或PTR记录将IP地址映射到FQDN(完全限定域名)。它与A记录相对应,用于反向DNS查找,这有助于阻止垃圾邮件发送者。如果没有找到发送服务器的PTR记录,许多SMTP服务器会拒绝电子邮件。 要检查PTR记录中的IP地址,请运行以下命令: dig -x IP-address +short 或 host IP-address PTR记录不由您的域注册器管理。它由提供IP地址的组织管理。因为您从主机提供商或ISP获得IP地址,而不是从域注册商获得,所以您必须在主机提供商的控制面板中为您的IP设置PTR记录,或者询问ISP。它的值应该是邮件服务器的主机名:mail。你的领域。通用域名格式。如果您的服务器使用IPv6地址,请确保也为您的IPv6地址添加PTR记录。 要编辑Kamatera VP的反向DNS记录,请登录Kamatera客户端区域,然后打开支持票证,告诉他们为服务器IP地址添加PTR记录,以将IP地址指向邮件。你的领域。通用域名格式。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。 SPF记录 SPF(发件人策略框架)记录指定允许哪些主机或IP地址代表域发送电子邮件。您应该只允许您自己的电子邮件服务器或ISP的服务器为您的域发送电子邮件。在DNS管理界面中,创建一个新的TXT记录,如下所示。 说明: TXT表示这是一条TXT记录。 在名称字段中输入@代表主域名。 v=spf1表示这是一条SPF记录,版本为spf1。 mx意味着mx记录中列出的所有主机都被允许为您的域发送电子邮件,而所有其他主机都被禁止。 ~all表示来自您域的电子邮件应该只来自SPF记录中指定的主机。来自其他主机的电子邮件将被标记为伪造。 要检查您的SPF记录是否传播到公共互联网,您可以在Linux机器上使用dig实用程序,如下所示: dig your-domain.com txt txt选项告诉dig我们只想查询txt记录。 DKIM记录 DKIM(DomainKeys Identified Mail)使用私钥对从您的域发送的电子邮件进行数字签名。接收SMTP服务器使用在DNS DKIM记录中发布的公钥验证签名。 当我们之前在Moboba管理面板中添加域名时,我们启用了DKIM签名,所以签名部分得到了处理。唯一要做的就是在DNS管理器中创建DKIM记录。首先进入Modoboa管理面板,选择你的域名。在DNS部分,单击显示密钥按钮。 公开密钥将被公开。有两种格式。我们只需要绑定/命名格式。 转到DNS管理器,创建一个TXT记录,输入modoboa_名称字段中的domainkey。(回想一下,在管理面板中添加域名时,我们使用了modoboa作为选择器。)复制括号中的所有内容并粘贴到值字段中。删除所有双引号。DNS管理器可能会要求您删除其他无效字符,例如回车符。 请注意,您的DKIM记录可能需要一些时间才能传播到Internet。根据您使用的域注册器,您的DNS记录可能会立即传播,或者传播可能需要24小时。你可以去https://www.dmarcanalyzer.com/dkim/dkim-check/,输入modoboa作为选择器,并输入您的域名以检查DKIM记录传播。 对于感兴趣的人,Modoboa使用OpenDKIM为您的域密钥生成私钥,并验证入站电子邮件的签名。 DMARC记录 DMARC代表基于域的消息身份验证、报告和一致性。DMARC可以帮助接收电子邮件服务器识别合法电子邮件,并防止电子邮件欺骗使用您的域名。 要创建DMARC记录,请转到DNS管理器并添加TXT记录。在名称字段中,输入_dmarc。在“值”字段中,输入以下内容: v=DMARC1; p=none; pct=100; rua=mailto:[email protected] 上述DMARC记录是一个安全的起点。要查看DMARC的完整解释,请查看以下文章。 创建DMARC记录以保护您的域名免受电子邮件欺骗 第7步:测试电子邮件分数和位置 创建PTR、SPF、DKIM记录后,转到https://www.mail-tester.com.你会看到一个独特的电子邮件地址。从你的域名发送电子邮件到此地址,然后检查你的分数。如你所见,我得了满分。 邮件测试员。com只能显示发件人分数。还有另一个名为GlockApps的服务,可以让你检查你的电子邮件是否放在收件人的收件箱或垃圾邮件文件夹中,或者直接被拒绝。它支持许多流行的电子邮件提供商,如Gmail、Outlook、Hotmail、YahooMail、iCloud mail等 如果你的电子邮件仍被标记为垃圾邮件呢? 在这篇文章中,我有更多提示:如何阻止你的电子邮件被标记为垃圾邮件。虽然这需要一些时间和精力,但在应用这些技巧后,你的电子邮件最终会被放入收件箱。 如果您的电子邮件被Microsoft邮箱拒绝怎么办? 微软似乎正在使用一个内部黑名单来屏蔽许多合法的IP地址。如果您的电子邮件被Outlook或Hotmail拒绝,您需要提交发件人信息表。之后,Outlook/Hotmail将接受您的电子邮件。 自动续订让我们加密TLS证书 Modoboa将最新版本的Let's Encrypt client(certbot)安装为/opt/certbot auto。通过执行以下命令,可以找到certbot二进制文件的位置。 sudo find / -name "*certbot*" 让我们加密TLS证书的有效期为90天。要自动续订证书,请编辑root用户的crontab文件。 sudo crontab -e 在该文件末尾添加以下行。 @daily /opt/certbot-auto renew -q && systemctl reload nginx postfix dovecot 保存并关闭文件。这会告诉Cron每天运行certbot续订命令。如果证书还有30天,certbot将续订证书。有必要重新加载Nginx web服务器、Postfix SMTP服务器和Dovecot IMAP服务器,以便他们能够获取新证书。 启用SMTPS端口465 如果要使用Microsoft Outlook客户端,则需要在Postfix SMTP服务器中启用SMTPS端口465。 故障排除 首先,请使用至少有2GB内存的VPS。在1GB RAM VPS上运行Modoboa会导致数据库、SpamAssassin或ClamAV因内存不足而被终止。如果你真的想使用1GB内存的VPS,你会丢失收到的电子邮件,并有其他不良后果。 如果无法访问Modoboa web界面,例如502网关错误,则应检查/var/log/Nginx/目录中的Nginx日志以找到线索。您可能还需要检查邮件日志/var/log/mail。日志 检查各种服务是否正在运行。 systemctl status postfix systemctl status dovecot systemctl status nginx systemctl status mariadb systemctl status clamav-daemon systemctl status amavis systemctl status uwsgi systemctl status supervisor 如果启用了防火墙,则应在防火墙中打开以下端口。 HTTP port: 80 HTTPS port: 443 SMTP port: 25 Submission port: 587 (and 465 if you are going to use Microsoft Outlook mail client) IMAP port: 143 and 993 如果你想使用UFW防火墙,请查看我的指南:Debian和Ubuntu上的UFW防火墙入门。 自动关机 我发现clamav守护进程服务有一种趋势,即使有足够的RAM,也会在没有明确原因的情况下停止。这将使电子邮件延迟1分钟。我们可以通过systemd服务单元将其配置为在停止时自动重启。将原始服务单元文件复制到/etc/systemd/system/目录。 sudo cp /lib/systemd/system/clamav-daemon.service /etc/systemd/system/clamav-daemon.service 然后编辑服务单元文件。 sudo nano /etc/systemd/system/clamav-daemon.service 在[service]部分添加以下两行。 Restart=always RestartSec=3 这样地: [Service] ExecStart=/usr/sbin/clamd --foreground=true # Reload the database ExecReload=/bin/kill -USR2 $MAINPID StandardOutput=syslog Restart=always RestartSec=3 保存并关闭文件。然后重新加载systemd并重新启动clamav守护进程。服务 sudo systemctl daemon-reload sudo systemctl restart clamav-daemon 抱歉,发生内部错误 如果在尝试登录Modoboa管理面板时看到内部错误消息,请编辑设置。py文件。 sudo nano /srv/modoboa/instance/instance/settings.py 打开调试模式。 DEBUG = True 重新启动uwsgi以使更改生效。 sudo systemctl restart uwsgi 接下来,再次尝试登录Modoboa管理面板。这一次,您将看到确切的内部错误。例如,在我的邮件服务器上 database connection isn't set to UTC
-
在Debian 10 Buster上设置绑定权威DNS服务器
本教程将向您展示如何使用广泛使用的BIND 9软件在Debian 10 Buster上设置和运行自己的权威名称服务器。 注意:本教程展示了命令行方法。如果您想从web GUI编辑DNS记录,我建议使用Webmin设置权威DNS服务器,这是一个免费的开源服务器控制面板。 什么是权威DNS服务器? 如果您拥有一个域名,并且希望您自己的DNS服务器为您的域名处理名称解析,而不是使用您的域名注册商的DNS服务器,那么您需要设置一个权威的DNS服务器。 域名所有者使用权威DNS服务器来存储DNS记录。它为DNS解析程序(如8.8.8.8或1.1.1.1)提供权威答案,这些解析程序代表终端用户在PC、智能手机或平板电脑上查询DNS记录。 关于BIND BIND(Berkeley Internet Name Domain)是一款开源、灵活、功能齐全的DNS软件,由于其稳定性和高质量,在Unix/Linux上得到了广泛应用。它最初是由加州大学伯克利分校开发的,后来在1994年,它的开发转移到了互联网系统联盟(ISC)。 BIND可以同时充当区域的权威DNS服务器和DNS解析程序。DNS解析程序也可以称为递归名称服务器,因为它为最终用户执行递归DNS查找。然而,同时扮演两个角色并不有利。在两台不同的机器上分离这两个角色是一种很好的做法。 在前一篇文章中,我解释了在Debian 10 Buster上设置本地DNS解析器的步骤。本教程将向您展示如何在Debian 10 Buster上将BIND9设置为仅限权威的DNS服务器,并禁用递归。 先决条件 要学习本教程,您应该已经购买了域名。我在namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 你还需要两台服务器。一台服务器用于主DNS服务器,另一台用于从DNS服务器。理想情况下,这两台服务器应该位于不同的物理位置。如果一个DNS服务器处于脱机状态,另一个DNS服务器仍然可以回答您的域名的DNS查询。 每台服务器只需要512MB内存,以下是我推荐的主机提供商。我都用过了。 Vultr:起价为每月2.5美元。需要信用卡。你可以通过我的推荐链接在Vultr创建一个账户,获得50美元的免费信用。 DigitalOcean:起价为每月5美元。不需要信用卡。你可以用贝宝。你可以通过我的推荐链接在DigitalOcean创建一个帐户,获得50美元的免费信用。 购买两台服务器后,在其上安装Debian 10,并按照以下说明操作。 请注意,在Debian上安装软件时,您需要拥有root权限。可以在命令开头添加sudo,或者使用su-command切换到root用户。 使用BIND9在Debian 10 Buster上设置权威DNS服务器 您需要在两台服务器上运行本节中的命令。 通过SSH登录这两台服务器,并运行以下命令,从默认存储库在Debian 10服务器上安装BIND 9。BIND 9是当前版本,BIND 10是一个死项目。 sudo apt update sudo apt install bind9 bind9utils bind9-doc 检查版本号。 named -v 样本输出: BIND 9.11.5-P4-5.1-Debian (Extended Support Version) <id:998753c> 要检查版本号和生成选项,请运行 named -V 默认情况下,绑定在安装后自动启动。您可以通过以下方式检查其状态: systemctl status bind9 输出: ● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: en Active: active (running) since Sun 2019-07-14 10:27:56 UTC; 4min 6s ago Docs: man:named(8) Main PID: 1481 (named) Tasks: 4 (limit: 1149) Memory: 13.7M CGroup: /system.slice/bind9.service └─1481 /usr/sbin/named -u bind 提示:如果上述命令没有立即退出,请按Q。 如果它没有运行,那么从以下内容开始: sudo systemctl start bind9 并在启动时启用自动启动: sudo systemctl enable bind9 BIND服务器将以BIND用户的身份运行,该用户是在安装过程中创建的,并在TCP和UDP端口53上侦听,如运行以下命令所示: sudo netstat -lnptu | grep named 绑定守护进程被称为named。(守护进程是在后台运行的软件。)命名的二进制文件由bind9包安装,还有另一个重要的二进制文件:rndc,远程名称守护程序控制器,由bind9utils包安装。rndc二进制文件用于重新加载/停止和控制绑定守护进程的其他方面。通信通过TCP端口953完成。 例如,我们可以检查绑定名称服务器的状态。 sudo rndc status 主绑定配置文件/etc/BIND/named。conf从其他3个文件中获取设置。 /etc/bind/named。形态选项 /etc/bind/named。conf.local /etc/bind/named。conf.default-zones Debian上的BIND9服务器提供了本地主机和本地网络客户端的递归服务。由于我们正在设置权威DNS服务器,因此需要禁用递归。编辑/etc/bind/named。conf.options文件。 sudo nano /etc/bind/named.conf.options 在options{…}子句中添加以下行。 // hide version number from clients for security reasons. version "not currently available"; // disable recursion on authoritative DNS server. recursion no; // enable the query log querylog yes; // disallow zone transfer allow-transfer { none; }; 从技术上讲,您只需要添加递归no;禁用递归,但最好添加其他3条指令。保存并关闭文件。然后重启BIND。 sudo systemctl restart bind9 主DNS服务器配置 从两台服务器中选择一台作为主DNS服务器。我们将把它命名为ns1。实例通用域名格式。 主DNS服务器保存区域文件的主副本。在此服务器上更改DNS记录。一个域可以有一个或多个DNS区域。每个DNS区域都有一个区域文件,其中包含该区域中的每个DNS记录。为了简单起见,本文假设您希望使用单个DNS区域来管理您的域名的所有DNS记录。 /etc/bind/named。conf.default-zones文件定义根区域和本地主机区域。要为域名添加区域,请编辑/etc/bind/named。conf.local文件。 sudo nano /etc/bind/named.conf.local 将以下行添加到此文件。替换示例。使用你自己的域名。将12.34.56.78替换为从属DNS服务器的IP地址。 zone "example.com" { type master; file "/etc/bind/db.example.com"; allow-query { any; }; allow-transfer { 12.34.56.78; }; }; 在上述配置中,我们使用zone子句创建了一个新区域,并指定这是主区域。区域文件是/etc/bind/db。实例com,我们将在其中添加DNS记录。仅允许从DNS服务器进行区域传输。 我们可以使用区域模板文件,而不是从头创建区域文件。复制数据库的内容。空到一个新文件。 sudo cp /etc/bind/db.empty /etc/bind/db.example.com 区域文件可以包含3种类型的条目: 注释:以分号(;)开头 指令:以美元符号($)开头 资源记录:又名DNS记录 区域文件通常由以下类型的DNS记录组成。 SOA(授权开始)记录:定义区域的关键特征。这是区域文件中的第一个DNS记录,是必需的。 NS(名称服务器)记录:指定用于存储DNS记录和回答域名DNS查询的服务器。区域文件中必须至少有两条NS记录。 MX(邮件交换器)记录:指定哪些主机负责域名的电子邮件传递。 (地址)记录:将DNS名称转换为IPv4地址。 AAAA(Quad A)记录:将DNS名称转换为IPv6地址。 CNAME记录(规范名称):用于为DNS名称创建别名。 TXT记录:SPF、DKIM、DMARC等。 现在,让我们编辑区域文件。 sudo nano /etc/bind/db.example.com 默认情况下,它如下所示: 你可以改成这个。 哪里 $TTL指令定义区域的默认生存时间值,即DNS记录可以缓存在DNS解析程序上的时间。该指令是强制性的。时间以秒为单位。 $ORIGIN指令定义基本域。 域名必须以点(.)结尾,这是根域。当域名以点结尾时,它是一个完全限定的域名(FQDN)。 @符号引用基本域。 在DNS类中。它代表互联网。存在其他DNS类,但很少使用。 区域文件中的第一条记录是SOA(授权开始)记录。此记录包含以下信息: 主DNS服务器。 区域管理员的电子邮件地址。RFC 2142建议使用电子邮件地址[email ;protected]。在区域文件中,此电子邮件地址采用以下形式:hostmaster。实例com,因为@符号在区域文件中有特殊含义。 区域序列号。序列号是从DNS服务器跟踪区域变化的一种方式。按照惯例,序列号采用日期格式:yyyymmddss,其中yyyy是四位数字的年份号,mm是月份,dd是日期,ss是日期的序列号。更改区域文件时,必须更新序列号。 刷新值。当达到刷新值时,从DNS服务器将尝试从主DNS服务器读取SOA记录。如果序列号变高,则启动区域传输。 重试值。定义从DNS服务器无法连接到主DNS服务器时的重试间隔(以秒为单位)。 到期:如果从属DNS服务器在这段时间内未能与主DNS服务器联系,则从属DNS服务器将停止响应此区域的DNS查询。 负缓存TTL:为不存在的DNS名称(NXDOMAIN)定义DNS响应的生存时间值。 TXT记录通常用双引号括起来。如果添加DKIM记录,还需要用括号括起该值。 保存并关闭文件。然后运行以下命令检查主配置文件中是否存在语法错误。无声输出表示未发现错误。 sudo named-checkconf 然后检查区域文件的语法。 sudo named-checkzone example.com /etc/bind/db.example.com 如果区域文件中存在语法错误,则需要修复它,否则将无法加载此区域。以下消息表示没有语法错误。 zone example.com/IN: loaded serial 2019011503 OK 然后重启BIND9。 sudo systemctl restart bind9 如果您使用的是简单防火墙(UFW),请打开TCP和UDP端口53。 sudo ufw allow 53/tcp sudo ufw allow 53/udp 如果您直接使用iptables防火墙,请运行以下命令。 sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT 从DNS服务器配置 现在我们使用另一台服务器作为从DNS服务器,它将被命名为ns2。实例通用域名格式。 首先,编辑命名文件。conf.local文件。 sudo nano /etc/bind/named.conf.local 添加一个如下所示的区域。将12.34.56.78替换为主DNS服务器的IP地址。 zone "example.com" { type slave; file "db.example.com"; allow-query { any; }; masters { 12.34.56.78; }; }; 在上面的配置中,我们指定这是示例中的从属DNS服务器。它将只接受来自主DNS服务器的区域传输。 保存并关闭文件。然后运行以下命令检查主配置文件中是否存在语法错误。 sudo named-checkconf 如果没有发现错误,请重新启动BIND9。 sudo systemctl restart bind9 从DNS服务器上的区域文件是从区域传输加载的,该传输用于同步从主DNS服务器到从DNS服务器的DNS记录更改。BIND9重新启动后,区域传输将立即启动。使用以下命令检查BIND9日志。 sudo journalctl -eu bind9 您可以看到如下消息,这表明区域传输成功。 named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec) 区域文件将另存为/var/cache/bind/db。实例从DNS服务器上的com。 如果您使用的是简单防火墙(UFW),请打开TCP和UDP端口53。 sudo ufw allow 53/tcp sudo ufw allow 53/udp 如果您直接使用iptables防火墙,请运行以下命令。 sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT 更多关于区域转移的信息 当达到SOA记录中的刷新时间时,从属DNS服务器将再次联系主服务器,如果主服务器上的序列号大于从属服务器上的序列号,则将启动区域传输。有两种类型的区域转移: 完整区域传输(AXFR):传输区域文件的完整副本。 增量区域传输(IXFR):仅传输更改的DNS记录。 两种类型的区域传输都使用TCP端口53。默认情况下,从属DNS服务器上的绑定将请求增量区域传输,而主DNS服务器上的绑定仅在区域是动态的情况下才允许增量区域传输。 区域传输间隔是DNS记录更改传播速度的主要因素。当区域发生更改时,绑定主机将通知从属DNS服务器,而不是等待从属DNS服务器联系。这可以大大缩短将区域更改传播到Internet的时间。 反向区 反向区域包含将IP地址映射到DNS名称的PTR记录。它是DNS A记录的对应项。PTR记录通常是邮件服务器通过垃圾邮件过滤器所必需的。此记录不属于域。您需要在主机提供商的控制面板上创建PTR记录,或者询问您的ISP,所以我不打算在BIND中介绍创建反向区域。 更改NS记录并创建胶水记录 现在你需要去你的域名注册商的网站更改你的域名的NS记录,这样互联网就会知道你现在正在使用自己的DNS服务器。通常在NS记录中使用主机名,比如ns1。实例com和ns2。实例通用域名格式。 name server 1: ns1.example.com name server 2: ns2.example.com 如果你有一个域名的例子。com,您使用一个子域作为权威DNS服务器(ns1.example.com和ns2.example.com),然后您还需要在您的域注册器上创建一个粘合记录,以便Internet可以知道您的DNS服务器的IP地址。胶水记录是ns1的A记录。实例com和ns2。实例通用域名格式。 ns1.example.com IP-address-of-master-server ns2.example.com IP-address-of-slave-server 上述信息将通过可扩展配置协议(EPP)发送给运行TLD DNS服务器的注册运营商,以便TLD DNS服务器知道您的域名的权威DNS服务器的名称和IP地址。根据您使用的域注册器,您的NS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io检查您的新NS记录是否处于活动状态。 我将向你展示如何在namescapet上实现这一点。 如果你在NameCheap购买了域名,请登录你的NameCheap帐户。选择左侧边栏上的域列表菜单,然后单击最右侧的管理按钮。 选择高级DNS。 滚动到页面底部,您将找到个人DNS服务器部分。单击添加名称服务器按钮添加您自己的名称服务器:ns1。实例com和ns2。实例通用域名格式。您需要输入名称服务器的IP地址。 添加两个名称服务器后,单击搜索按钮检查它们是否已成功添加。如果是这样,胶水记录将显示在此页面底部。 现在单击“域”选项卡,并使用自定义DNS服务器。 根据您使用的域注册器,您的NS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io检查您的新NS记录是否处于活动状态。 胶水记录和NS记录传播到Internet后,DNS服务器将响应域名的DNS查询。您可以通过以下方式查看查询日志: sudo journalctl -eu bind9 您还可以使用dig实用程序检查域名的NS记录。 dig NS example.com 如果NS记录和glue记录已传播到Internet,您应该在“答案”部分看到您的名称服务器。如果您看到SERVFAIL错误,可能是因为您没有在名称服务器上打开UDP端口53。 需要知道的事情 术语主DNS服务器仅表示此服务器存储区域文件的主副本。在DNS解析方面,它没有更高的优先级。 更改区域文件时,请始终更新SOA序列号。 启用解析器 BIND可以同时充当区域的权威DNS服务器和DNS解析程序。在两台不同的机器上分离这两个角色是一种很好的做法,在本文中,我们在BIND中禁用了解析器。如果您真的想启用解析器,请按照以下说明操作。 编辑绑定配置文件。 sudo nano /etc/bind/named.conf.options 找到下面几行。 // disable recursion on authoritative DNS server. recursion no; 将它们更改为以下内容,这样只有受信任的IP地址才能向DNS解析程序发送递归查询,而您的服务器将不会是开放的解析程序。 // allow recursion for trusted clients only. recursion yes; allow-query { localhost; 12.34.56.78; }; 将12.34.56.78替换为您自己的IP地址。保存并关闭文件。确保在/etc/bind/named中定义区域。conf.local文件具有以下选项,因此Internet可以查询您所在区域的DNS记录。 allow-query { any; }; 然后重启BIND。 sudo systemctl restart bind9 去https://openresolver.com/测试绑定服务器是否为开放式解析程序。 收尾 就这样!我希望本教程能帮助您使用BIND9在Debian 10 Buster上设置权威DNS服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
使用Ubuntu上的PageKite将Localhost公开到Internet
本教程将向您展示如何在Ubuntu上使用PageKit将localhost公开到Internet。 通常,如果你想从外部访问你的家庭网络服务器,你需要设置动态DNS,因为你的ISP不会给你一个静态的公共IP地址。但世界上的一些ISP甚至不为每个订户分配动态公共IP地址。许多订户共享一个公共IP地址。在这种情况下,动态DNS将无法工作,这就是PageKite的用武之地。 PageKite是一种开源隧道反向代理,能够绕过NAT(网络地址转换)、防火墙,并使本地web服务器和SSH服务器对公共互联网可见。如果你是一名网络开发者,或者在你的家庭网络上有一些像NextCloud这样的自托管服务,那么PageKite可以帮助你通过互联网远程访问它们。PageKite是用Python编写的,因此可以在多种设备上运行。 注意:使您的web服务器/SSH服务器在Internet上可见也会使它们暴露给黑客。 Pagekite的工作原理 您的服务(通常是一个或多个HTTP服务器)在本地主机上运行。 在同一台机器上运行pagekite作为后端连接器。 pagekite的另一个实例是作为前端中继在“云”中的一台具有公共IP地址的机器上运行。 后端pagekite连接到前端,并为配置的服务创建通道。 客户端(通常是web浏览器)连接到前端并请求服务。前端通过适当的隧道转发请求,后端将其转发到实际服务器。反应以同样的方式返回。 运行自己的前端中继需要一点钱,但PageKite开发者提供31天的免费帐户供您试用。让我们看看如何使用免费帐户的PageKite。本教程仅介绍如何公开本地web服务器。公开本地SSH服务器将在另一个教程中讨论。 使用Ubuntu上的PageKite将Localhost公开到Internet 首先,在本地Linux计算机上安装一个web服务器,如Apache。在基于Debian/Ubuntu的Linux发行版上,运行以下命令安装ApacheWeb服务器。 sudo apt install apache2 启动web服务器 sudo systemctl start apache2 现在Apache正在监听端口80。我们使用PageKite使其在互联网上可见。使用以下命令在Linux计算机上安装PageKit。 Debian 8/9、Ubuntu 16.04/18.04、Raspbian及其衍生物 sudo apt install pagekite 接下来,运行以下命令。将名称替换为所需的子域。 pagekite name.pagekite.me 它会先问你是否想使用免费的PageKite。网络服务。因为你还没有自己的PageKite服务器,所以选择Y. 然后PageKit会提示您注册PageKite。net帐户使用您的电子邮件地址。 您的帐户详细信息(包括密码)将发送到您的电子邮件地址。打开电子邮件并单击其中的链接以激活您的帐户。然后输入Y继续并保存设置。 现在PageKite将连接到前端。 您应该能够使用域名访问本地web服务器。 name.pagekite.me 或 https://name.pagekite.me 要停止PageKite,请在终端窗口中按Ctrl+C。如果要在后台运行PageKite,请使用--daemonize选项。 pagekite --daemonize name.pagekite.me 要停止daemonized PageKite,请运行 pkill pagekite 您可以使用HTTP基本身份验证对您的网页进行密码保护,如下所示。 pagekite name.pagekite.me +password/username=pass 佩吉特。net允许付费会员通过设置CNAME记录来使用自己的域名。说明可以在其网站上找到。 如何运行自己的PageKite服务器 免费试用pagekite。net是非常有限的。但是,我们可以在面向公共的Linux VPS(虚拟专用服务器)上运行自己的PageKite服务器(也称前端)。虽然这很费钱,但运行自己的PageKite服务器是非常值得的。如果你选择支付PageKite。net服务,然后每月5美元,您只能获得4GB的转账配额。 如果你从TurnkeyInternet购买Linux VPS并在其上运行自己的PageKite服务器,那么每月4.99美元,你就可以获得千兆网络端口和未测量的带宽。此外,你还可以在VPS上做其他有趣的项目,比如建立自己的VPN。 你还需要一个域名。你可能听说过GoDaddy,但你想从Namecheap购买域名,因为它们的价格比GoDaddy低,而且它们免费为你提供whois隐私保护。 现在,假设您购买了一个VPS和一个域名,下面介绍如何运行前端pagekite服务器。在Linode控制面板中的VPS上安装Ubuntu18.04操作系统。然后将SSH连接到VPS中,并使用以下命令安装Pagekite。 sudo apt update sudo apt install pagekite 风筝。net网站还提供了在CentOS上安装RPM软件包的说明。安装pagekite后,配置目录位于/etc/pagekite。d/。我们需要编辑20_前端。rc文件。 sudo nano /etc/pagekite.d/20_frontends.rc 注释掉读取默认值的行,因为我们不想使用pagekite。网络服务。接下来,在文件末尾添加以下行。更换风筝。你的领域。用你自己的域名和你的密钥与你的首选密钥。我使用我的域名kite。csmage。com为例。 isfrontend runas=nobody:nogroup ports=80,443 protos=http,https domain=http,https:kite.your-domain.com:your-secret-key 保存并关闭文件。然后用下面的命令启动Pagekite服务器,指定选项文件。因为PageKite服务器需要TCP端口80和443才能工作,所以我们需要用sudo作为命令的前缀。还要确保VPS上没有其他进程使用这两个端口。 sudo pagekite --optfile=/etc/pagekite.d/20_frontends.rc 要在后台运行Pagekite服务器,请使用--daemonize选项。 sudo pagekite --optfile=/etc/pagekite.d/20_frontends.rc --daemonize 在DNS管理器中,为pagekite创建一个子域,其中的记录指向VP的IP地址,如下所示。 A kite.your-domain.com 12.34.56.78 为PageKite服务器创建Systemd服务单元 默认的systemd服务文件/lib/systemd/system/pagekite。服务旨在用作客户端。我们可以为PageKite服务器创建一个单独的systemd服务文件。 sudo nano /etc/systemd/system/pagekite.service 将以下行复制并粘贴到文件中。 [Unit] Description=PageKite After=network.target [Service] Type=simple ExecStart=/usr/bin/pagekite --clean --optdir=/etc/pagekite.d/ TimeoutStopSec=5 KillMode=mixed PermissionsStartOnly=true Restart=on-abnormal RestartSec=2s LimitNOFILE=65536 WorkingDirectory=/tmp # Hardening [email protected] @debug @cpu-emulation @debug @keyring @module @mount @obsolete @raw-io @reboot @swap NoNewPrivileges=yes PrivateDevices=yes PrivateTmp=yes ProtectHome=yes ProtectSystem=strict ProtectKernelModules=yes ProtectKernelTunables=yes [Install] WantedBy=multi-user.target 保存并关闭文件。然后重新加载systemd以使更改生效。 sudo systemctl daemon-reload 接下来,开立10_账户。rc文件 sudo nano /etc/pagekite.d/10_account.rc 这是PageKite客户端使用的配置文件。PageKite systemd服务将读取每个。rc文件位于/etc/pagekite中。d/目录,所以我们需要注释掉这个文件中的所有内容。之后,可以终止daemonized pagekite服务器进程。 sudo pkill pagekite 用systemctl重新启动它。 sudo systemctl start pagekite 要在系统启动时启用自动启动,请运行 sudo systemctl enable pagekite 要禁用自动启动,请运行 sudo systemctl disable pagekite 检查它的状态。 systemctl status pagekite 将Pagekite客户端配置为使用自己的服务器 在安装了Pagekite客户端的本地计算机上,编辑10_帐户。rc文件。 sudo nano /etc/pagekite.d/10_account.rc 将kitename和KiteCret的值分别替换为您在Pagekite服务器上指定的域名和密钥。并注释掉最后一行。 保存并关闭文件。然后编辑20_前端。rc文件。 sudo nano /etc/pagekite.d/20_frontends.rc 注释掉读取默认值的行。然后添加以下行。 frontend = your-pagekite-server-IP:80 保存并关闭文件。接下来,重新命名80_httpd。rc。样品至80_httpd。钢筋混凝土 sudo mv /etc/pagekite.d/80_httpd.rc.sample /etc/pagekite.d/80_httpd.rc 在本地计算机上重新启动Pagekite服务。 sudo systemctl restart pagekite 您的本地Pagekite客户端现在应该连接到您自己的Pagekite服务器。您可以通过运行以下命令来检查连接详细信息: sudo systemctl status pagekite 您的本地web服务器现在已暴露于Internet。如果与Pagekite服务器的连接丢失,Pagekite服务将尝试重新建立连接。 注意:如果运行命令pagekite name。佩吉特。在你的本地计算机上,它将使用~/。佩吉特。rc用户配置文件,默认使用pagekite。网络服务。 多个虚拟主机 本节介绍如何使家庭网络上的多个Apache虚拟主机对Internet可见。首先,让我创建两个示例Apache虚拟主机。 第一虚拟主机 sudo nano /etc/apache2/sites-available/site1.csmage.com.conf 此文件中的内容: <VirtualHost *:80> ServerName site1.csmage.com DocumentRoot /var/www/site1.csmage.com/ </VirtualHost> 创建文档根目录。 sudo mkdir /var/www/site1.csmage.com/ 然后创建一个索引。html文件。 echo "This is site #1." | sudo tee /var/www/site1.csmage.com/index.html 第二虚拟主机 sudo nano /etc/apache2/sites-available/site2.csmage.com.conf 此文件中的内容: <VirtualHost *:80> ServerName site2.csmage.com DocumentRoot /var/www/site2.csmage.com/ </VirtualHost> 创建文档根目录。 sudo mkdir /var/www/site2.csmage.com/ 然后创建一个索引。html文件。 echo "This is site #2." | sudo tee /var/www/site2.csmage.com/index.html 启用这两个虚拟主机。 sudo a2ensite site1.csmage.com sudo a2ensite site2.csmage.com 重新加载Apache web服务器以使更改生效。 sudo systemctl reload apache2 PageKite服务器配置 编辑20_前端。PageKite服务器上的rc文件。 sudo nano /etc/pagekite.d/20_frontends.rc 添加两个域定义,如下所示。 domain=http,https:site1.csmage.com:secret-key domain=http,https:site2.csmage.com:secret-key 保存并关闭文件。然后重启PageKite。 sudo systemctl restart pagekite PageKite客户端配置 编辑80_httpd。本地计算机上的rc文件。 sudo nano /etc/pagekite.d/80_httpd.rc 添加两个后端定义,如下所示。 service_on = http:site1.csmage.com : localhost:80 : secret-key service_on = http:site2.csmage.com : localhost:80 : secret-key 保存并关闭文件。然后重启PageKite。 sudo systemctl restart pagekite 最后,为每个子域添加DNS记录。现在如果我去http://site1.csmage.com,我明白了 如果我去http://site2.csmage.com,我明白了 如您所见,Pagekite正确响应了每个HTTP请求。如果它不适合您,请检查您的密钥是否匹配,或者您的配置文件中是否有输入错误。 如何启用HTTPS 我们可以在后端或前端终止TLS。前者更容易、更方便。因此,我将向您展示如何在本地计算机上安装TLS证书。我们可以为每个子域获得免费的Let's Encrypt TLS证书。首先,在本地计算机上安装Let's Encrypt client(certbot)和Apache插件。 sudo apt install certbot python3-certbot-apache 然后使用下面的命令为每个子域获取并安装TLS证书。 sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email your-email-address -d site1.your-domain.com sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email your-email-address -d site2.your-domain.com 说明: --同意:同意服务条款。 --重定向:将HTTP重定向到HTTPS --hsts:启用严格的传输安全标头。 --装订ocsp:启用ocsp装订 --必须装订:将OCSP必须装订扩展添加到证书。 成功获取并安装证书后,编辑80_httpd。本地计算机上的rc文件。 sudo nano /etc/pagekite.d/80_httpd.rc 添加两个HTTPS后端定义,如下所示。请注意,HTTPS请求将被发送到localhost上的端口443。 service_on = https://site1.your-domain.com : localhost:443: your-secret-key service_on = https://site2.your-domain.com : localhost:443: your-secret-key 保存并关闭文件。然后重新启动pagekite客户端。 sudo systemctl restart pagekite 现在我的网站会自动重定向到HTTPS。 自动更新TLS证书 certbot debian软件包附带了自己的cron作业(/etc/cron.d/certbot)和systemd计时器(/lib/systemd/system/certbot.timer),用于自动续订TLS证书。因此,您不需要手动添加cron作业或systemd计时器。计时器运行certbot。一天服务两次。您可以通过以下方式检查其状态: systemctl status certbot.timer 如果certbot cron作业检测到还有systemd计时器,那么它将不会运行续订命令。 收尾 就这样!我希望这个PageKite教程能帮助你通过Ubuntu上的PageKite将localhost暴露在互联网上。和往常一样,如果你觉得这篇文章有用,订阅我们的免费时事通讯,获取更多提示和窍门?