DNS 服务与邮件服务器应用案例
(2)启动DNS服务
[root@mail ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2020-02-23 11:31:27 CST; 13s ago
Process: 51903 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} O P T I O N S ( c o d e = e x i t e d , s t a t u s = 0 / S U C C E S S ) P r o c e s s : 51900 E x e c S t a r t P r e = / b i n / b a s h − c i f [ ! " OPTIONS (code=exited, status=0/SUCCESS) Process: 51900 ExecStartPre=/bin/bash -c if [ ! " OPTIONS(code=exited,status=0/SUCCESS)Process:51900ExecStartPre=/bin/bash−cif[!"DISABLE_ZONE_CHECKING" == “yes” ]; then /usr/sbin/named-checkconf -z “$NAMEDCONF”; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS)
Main PID: 51905 (named)
CGroup: /system.slice/named.service
└─51905 /usr/sbin/named -u named -c /etc/named.conf
2月 23 11:31:27 mail named[51905]: network unreachable resolving './DNS…53
2月 23 11:31:27 mail named[51905]: network unreachable resolving './NS/…53
2月 23 11:31:27 mail named[51905]: network unreachable resolving './DNS…53
(3)查看端口是否启动
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 51905/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 51905/named
tcp6 0 0 ::1:953 :: LISTEN 51905/named
tcp6 0 0 ::1:53 :: LISTEN 51905/named
(4)修改主服务器DNS的配置文件named.conf(记住修改配置每个分号都不能少)
域名解析服务Bind的程序名称叫做named,服务程序的配置文件如下:
数据配置文件目录 /var/named
主配置文件 /etc/named.conf
区域配置文件 /etc/named.rfc1912.zones
修改named.conf以下配置:(从服务器也是一样!)
listen-on port 53 { any; }; // 监听所有的53号端口,此处可以根据需要设置需要监听的IP
also-notify { any;}; // 允许所有的查询
(5)配置正向解析与反向解析
正向解析和反向解析含义:
● 正向解析:根据主机名(域名)查找对应的IP地址。
● 反向解析:根据IP地址查找对应的主机名(域名)。(反向解析的作用是将用户提交的IP地址解析为对应的域名信息,它一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。也可以判断某虚拟主机上运行了多少个网站。)
正向区域:
① 创建转发域:
拷贝模板文件named.localhost到testmail.com.zone,示例代码如下:
② 编辑testmail.com.zone文件,示例代码如下:
T T L 1 D / / 生 存 周 期 为 1 天 @ I N S O A t e s t m a i l . c o m . d n s . t e s t m a i l . c o m . ( 0 ; s e r i a l ( 定 义 序 列 号 的 值 , 同 步 辅 助 名 称 服 务 器 数 据 时 使 用 ) 1 D ; r e f r e s h ( 更 新 时 间 间 隔 值 。 定 义 该 服 务 器 的 辅 助 名 称 服 务 器 隔 多 久 时 间 更 新 一 次 ) 1 H ; r e t r y ( 辅 助 名 称 服 务 器 更 新 失 败 时 , 重 试 的 间 隔 时 间 ) 1 W ; e x p i r e ( 辅 助 名 称 服 务 器 一 直 不 能 更 新 时 , 其 数 据 过 期 的 时 间 ) 3 H ) ; m i n i m u m ( 最 小 默 认 T T L 的 值 , 如 果 第 一 行 没 有 TTL 1D //生存周期为1天 @ IN SOA testmail.com. dns.testmail.com. ( 0 ; serial( 定义序列号的值,同步辅助名称服务器数据时使用) 1D ; refresh( 更新时间间隔值。定义该服务器的辅助名称服务器隔多久时间更新一次) 1H ; retry ( 辅助名称服务器更新失败时,重试的间隔时间) 1W ; expire ( 辅助名称服务器一直不能更新时,其数据过期的时间) 3H ) ; minimum ( 最小默认TTL的值,如果第一行没有 TTL1D //生存周期为1天@ INSOA testmail.com.dns.testmail.com.( 0 ;serial(定义序列号的值,同步辅助名称服务器数据时使用) 1D ;refresh(更新时间间隔值。定义该服务器的辅助名称服务器隔多久时间更新一次) 1H ;retry(辅助名称服务器更新失败时,重试的间隔时间) 1W ;expire(辅助名称服务器一直不能更新时,其数据过期的时间) 3H) ;minimum(最小默认TTL的值,如果第一行没有TTL,则使用该值)
IN NS dns.testmail.com. // 域名服务器记录
IN MX 10 mail //邮箱交换记录
dns IN A 192.168.56.30 //地址记录
mail IN A 192.168.56.30 //地址记录
www IN A 192.168.56.30
smtp IN A 192.168.56.30
③ 赋予test.com.zon所有权限,命令如下:
④ 修改区域配置文件/etc/named.rfc1912.zones
#正向解析
zone “testmail.com” IN { // 定义zone文件,这里是定义的根域的文件位置
type master; #主dns解析
file “testmail.com.zone”; #定义区域解析库文件名字
};
名词解析:
type:master指的是主dns解析、slave指的是从dns解析、hint指的是根域名解析(根提示域)、forward指的是转发,转发不使用file;
file:定义区域解析库文件名字(位置默认在/var/named下面),file的前缀通常和zone的名字通常对应起来,然后加一个.zone的后缀。
⑤ 检查配置,如下所示:
zone testmail.com/IN: loaded serial 0
OK
反向区域:
① 修改区域配置文件/etc/named.rfc1912.zones
#反向解析
zone “56.168.192.in-addr.arpa” IN { //区域名称:是网络地址的反写.in-addr.arpa.
type master;
file “30.56.168.192.in-addr.local”;
};
② 配置30.56.168.192.in-addr.local:(不需要MX、A、AAAA,要有NS记录,以PTR记录为主。)
$TTL 1D
@ IN SOA ns.testmail.com. admin.testmail.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.testmail.com.
30 IN PTR mail.testmail.com.
30 IN PTR www.testmail.com.
#chmod 755 30.56.168.192.in-addr.local
③ 检查配置,如下所示:
zone testmail.com/IN: loaded serial 0
OK
④ 重启生效配置:
⑤ 添加/etc/resolv.conf域名服务器IP
nameserver 192.168.100.40
nameserver 8.8.8.8
⑥ 测试DNS解析是否正常:
PING www.testmail.com (192.168.100.30) 56(84) bytes of data.
64 bytes from www.testmail.com (192.168.100.30): icmp_seq=1 ttl=64 time=0.337 ms
64 bytes from www.testmail.com (192.168.100.30): icmp_seq=2 ttl=64 time=0.284 ms
64 bytes from www.testmail.com (192.168.100.30): icmp_seq=3 ttl=64 time=0.474 ms
— www.testmail.com ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.284/0.365/0.474/0.080 ms
3.3 配置主从DNS服务
(1)配置从节点服务器
yum -y install bind-chroot bind-utils
(2)修改配置named.conf(与主服务器一致)
listen-on port 53 { any; }; // 监听所有的53号端口,此处可以根据需要设置需要监听的IP
also-notify { any;}; // 允许所有的查询
(3)修改区配置文件:
vi /etc/named.rfc1912.zones
zone “testmail.com” IN {
type slave; //master为主服务;slave为从服务;
file “slaves/slavertestmail.com.zone”;
masters {192.168.56.40;}; //指定主dns服务器的IP
};
zone “56.168.192.in-addr.arpa” IN {
type slave;
file “slaves/30.56.168.192.in-addr.local”;
masters {192.168.56.40;};
};
(4)修改/etc/reslove.conf
vi /etc/resolv.conf
nameserver 192.168.100.40
nameserver 192.168.100.30
(5)重启服务:
systemctl restart named
(6)测试:
主服务器那边关闭named服务:
systemctl stop named
测试dns解析结果:
[root@compute named]# nslookup dns.testmail.com
Server: 192.168.100.30
Address: 192.168.100.30#53
Name: dns.testmail.com
Address: 192.168.100.40
*显示解析到的服务器目前的位置在192.168.100.30
[root@controller ~]# ll /var/named/slaves/
总用量 8
-rw-r–r-- 1 named named 341 2月 18 09:29 30.100.168.192.in-addr.local
-rw-r–r-- 1 named named 317 2月 18 09:29 slavertestmail.com.zone
3.4 DNS检测工具
(1)nslookup命令是常用域名查询工具,就是查DNS信息用的命令。
一般格式:
nslookup [-option] [name | -] [server]
参数说明:
● option:表示一些选项。这些选项可以通过set命令设置修改。
● name:表示查询的域名。
● server:可以指定DNS主机IP。
set命令说明:
● set all:打印当前的选项值。
● set calss=value:设置查询的类型,一般情况下为Internet。
● set debug:设置调试模式。
● set d2:设置详细调试模式。
● set domin=name:设置默认的域名。
● set search:
● set port=value:设置DNS端口。
● set querytype=value:改变查询的信息的类型。默认的类型为A纪录。
● set type=value:和set querytype一样。
● set recurse:设置查询类型为递归;若为set norecurse,查询类型为跌代;缺省为前者。
● set retry=number:设置重试的次数。
● set timeout=number:设置等待应答的限制时间(单位为秒),超出即为超时,如果还可以重试,就会将长超时值加倍,重新查询。
● set vc:通过tcp方式查询。
具体说明可以查看man手册。
格式:nslookup -nameserver/ip。例如:
[root@controller ~]# nslookup 192.168.100.30
30.100.168.192.in-addr.arpa name = dns.testmail.com.
30.100.168.192.in-addr.arpa name = mail.testmail.com.
(2)dig命令主要用来从dns域名服务器查询主机地址信息,是安装bind自带的工具。
一般格式:
dig [@global-server] [domain] [q-type] [q-class] {q-opt} {d-opt}
参数说明:
● @global-server:默认是以/etc/resolv.conf作为DNS查询的主机,这里可以填入其它DNS主机IP。
● domain:要查询的域名。
● q-type:查询记录的类型,例如a、any、mx、ns、soa、hinfo、axfr、txt等,默认查询a。
● q-class:查询的类别,相当于nslookup中的set class。默认值为in(Internet)。
● q-opt:查询选项,可以有好几种方式,比如:-f file为通过批处理文件解析多个地址;-p port指定另一个端口(缺省的DNS端口为53),等等。
● d-opt:dig特有的选项。使用时要在参数前加上一个“+”号。
● d-opt常用选项:
○ +vc:使用TCP协议查询。
○ +time=###:设置超时时间。
○ +trace:从根域开始跟踪查询结果。
dig nameserver/IP 例如:
[root@controller ~]# dig dns.testmail.com
dig 命令默认的输出信息比较丰富,大概可以分为5个部分。
① 显示dig命令的版本和输入的参数。
② 显示服务返回的一些技术详情,比较重要的是status。如果status的值为NOERROR则说明本次查询成功结束。
③ 中的QUESTION SECTION显示我们要查询的域名。
④ 中的ANSWER SECTION是查询到的结果。
⑤ 则是本次查询的一些统计信息,比如用了多长时间,查询了哪个DNS服务器,在什么时间进行的查询等等。
熟悉常见DNS记录的类型如下图所示:
(3)host查询
hosts文件包含了IP地址和主机名之间的映射,还包括主机名的别名。在没有域名服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址。通常可以将常用的域名和IP地址映射加入到hosts文件中,实现快速访问。
语法:host [ 选项] name [server]
选项列表解释:
● -a:查询所有的信息。
● -c:设置查询类型
● -C:查询完整的SOA记录
● -d | -v:显示详细过程。
● -l:列表模式
● -t:选择查询类型。如CNAME、NS、SOA、SIG、KEY、AXFR。
● -w:永久等待。
● -W:设置等待超时。
例如:
[root@controller ~]# host 192.168.100.30
30.100.168.192.in-addr.arpa domain name pointer mail.testmail.com.
30.100.168.192.in-addr.arpa domain name pointer dns.testmail.com.
3.5 部署安装Postfix并配置
(1)CentOS 7版本默认安装Postfix,检测是否安装Postfix:
rpm -q postfix
如果没有安装,输入如下命令:
yum -y install postfix
(2)检查Postfix是否支持cyrus dovecot功能:
cyrus
Dovecot
(3)编辑Postfix的配置文件,查找并修改对应配置项:
myhostname = mail.testmail.com //本机主机名
mydomain = testmail.com //服务器域名
myorigin = $mydomain //初始域名
mail_owner = postfix
inet_interfaces = all //监听接口
inet_protocols = all //监听网络版本
mydestination = m y h o s t n a m e , l o c a l h o s t . myhostname, localhost. myhostname,localhost.mydomain, localhost //目标域
unknown_local_recipient_reject_code = 550
mynetworks = 192.168.100.0/24, 127.0.0.0/8 //修改可接收邮件的主机名和域名,可被中继的主机192.168.100.0为我自己定义的网段
home_mailbox = Maildir/ //邮件目录,在用户家目录下
mynetworks_style = host //指定信任网段类型
relay_domains = $mydestination //指定允许中转邮件的域名
(4)检查配置文件是否有语法错误
其他Postfix运维命令:
● newaliases:重建别名数据库。
● postalias /etc/postfix/aliases:创建或查询别名数据库。
● postcat:显示队列文件内容。
● postconf:修改main.cf配置文档。
● postqueue:査看postfix队列。
● postsuper:管理员管理postfix队列。
● postmap:创建查询表的DB数据库或查询查询表内容。
(5)重启服务:
systemctl restart postfix
(6)检测服务进程以及端口是否正常:
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 10405/master
tcp6 0 0 ::1:25 :: LISTEN 10405/master
root 10405 1 0 11:13 ? 00:00:00 /usr/libexec/postfix/master -w
postfix 10406 10405 0 11:13 ? 00:00:00 pickup -l -t unix -u
postfix 10407 10405 0 11:13 ? 00:00:00 qmgr -l -t unix -u
3.6 邮件简单外发测试
(1)邮件服务器简单发信测试
Postfix可以调用本地系统的账户和密码,因此在本地系统创建常规账户即可。
useradd zxa
echo “111111” | passwd --stdin zxa
安装Telnet服务:
yum -y install telnet
测试发信:
Trying 192.168.100.30…
Connected to mail.testmail.com.
Escape character is ‘^]’.
220 mail.testmail.com ESMTP Postfix
mail from:[email protected] //发件人
250 2.1.0 Ok
rcpt to:[email protected] //外发给QQ收件人
250 2.1.5 Ok
data
354 End data with .
zzzzz
.
250 2.0.0 Ok: queued as 7AF443994AFA
quit
221 2.0.0 Bye
Connection closed by foreign host.
(2)查询发信结果:
Feb 18 13:43:40 controller postfix/smtpd[4165]: 7AF443994AFA: client=mail.testmail.com[192.168.100.30]
Feb 18 13:43:45 controller postfix/cleanup[4168]: 7AF443994AFA: [email protected]
Feb 18 13:43:45 controller postfix/qmgr[3874]: 7AF443994AFA: [email protected], size=333, nrcpt=1 (queue active)
Feb 18 13:43:47 controller postfix/smtp[4169]: 7AF443994AFA: [email protected], relay=mx3.qq.com[183.232.93.177]:25, delay=9.8, delays=7.9/0/0.17/1.7, dsn=2.0.0, status=sent (250 Ok: queued as )
Feb 18 13:43:47 controller postfix/qmgr[3874]: 7AF443994AFA: removed
(3)邮件传输的过程
① 客户机调用用户代理来编辑要发送的邮件。用户代理用SMTP将邮件传送给发送端邮件服务器
② 发送端邮件服务器将邮件放入邮件缓存队列中,等待发送。
③ SMTP按照C/S方式工作。运行在发送端邮件服务器的SMTP客户进程,发现在邮件缓存中有待发送的邮件,就向运行在接收端邮件服务器的SMTP服务器进程发起TCP连接的建立
④ 当TCP连接建立后,SMTP客户进程开始向远程的SMTP服务器发送邮件。如果有多个邮件在邮件缓存中,则SMTP客户一一将它们发送到远程的SMTP服务器。当所有的待发送邮件发完了,SMTP就关闭所建立的TCP连接
⑤ 运行在接收端邮件服务器中的SMTP服务器进程收到邮件后,将邮件放入收信人的用户邮箱中,等待收信人在他方便时进行读取
⑥ 收信人调用用户代理,使用POP3(或IMAP)协议将自己的邮件从接收端邮件服务器的用户邮箱中取回。