1.电子邮件发送
服务器使用SMTP协议将电子邮件提交至TCP端口25,或由本地客户端通过/usr/bin/sendmail程序进行提交。如果该MTA是最终目标位置,邮件将传递至MDA。否则,将使用MX记录在DNS中查找下一个MTA,并使用SMTP进行转发。
MDA:“邮件发送代理”。
MDA将邮件发送至收件人的本地邮件存储位置(默认情况下是/var/spool/mail/user)。
Postfix提供自己的MDA,以发送至基于文件的本地默认邮件存储位置/usr/libexec/postfix/local.
转发:电子邮件服务器(MTA)将提交的邮件转发至另一个服务器,以进行发送
排队:失败的发送或转发尝试排队等待,并由MTA定义重试。(默认情况下,Postfix每小时执行此操作一次)
拒绝:在首次提交期间,电子邮件被电子邮件服务器拒绝
退回:远程服务器接受电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器和/或用户电子邮件已进行发送以后,又将该电子邮件退回给始发电子邮件服务器和/或用户
我们在配置邮件传输之前,需要两台互相之间可以通信的主机,接下来我会使用两台主机,一台主机名为westos-mail.westos.com,ip为172.25.254.10 一台主机名为qq-mail.qq.com ,ip为172.25.254.20
在两台主机上分别配置好yum源,在其中一台主机上安装dns解析服务,
以westos-mail.westos.com为例:
1.配置网络,ip为172.25.254.10
效果如下:
2.配置yum源,由于博主的yum源在其他主机上,所以
[root@westos-mail ~]# vim /etc/yum.repos.d/rhel_dvd.repo
[rhel_dvd]
gpgcheck = 0
enabled = 1
baseurl = http://172.25.254.48/rhel7.0
name = Remote classroom copy of dvd
[root@westos-mail ~]# yum clean all
3.配置dns解析
[root@westos-mail ~]# yum install bind -y ##安装服务
[root@westos-mail ~]# vim /etc/named.conf ##更改主配置文件
11 // listen-on port 53 { 127.0.0.1; }; ##允许所有ip访问
12 // listen-on-v6 port 53 { ::1; }; ##允许所有端口
17 // allow-query { localhost; }; ##允许所有主机
32 dnssec-validation no;
[root@westos-mail ~]# vim /etc/named.rfc1912.zones ##更改子配置文件
zone "westos.com" IN {
type master;
file "westos.com.zone";
allow-update { none; };
};
zone "qq.com" IN {
type master;
file "qq.com.zone";
allow-update { none; };
};
[root@westos-mail ~]# cd /var/named/
[root@westos-mail named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@westos-mail named]# cp -p named.localhost westos.com.zone
[root@westos-mail named]# vim westos.com.zone ##配置解析表
$TTL 1D
@ IN SOA dns.westos.com. root.westos.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.westos.com.
dns A 172.25.254.10
westos.com. MX 1 172.25.254.10.
[root@westos-mail named]# cp -p westos.com.zone qq.com.zone
[root@westos-mail named]# vim qq.com.zone ##配置解析表
$TTL 1D
@ IN SOA dns.qq.com. root.qq.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.qq.com.
dns A 172.25.254.10
qq.com. MX 1 172.25.254.20.
[root@westos-mail named]# systemctl restart named ##重启服务
[root@westos-mail named]# systemctl stop firewalld.service ##关闭火墙
[root@westos-mail named]# systemctl disable firewalld.service ##开机不启动火墙
[root@westos-mail named]# vim /etc/resolv.conf ##编写dns指向
search westos.com
nameserver 172.25.254.10
测试:
[root@westos-mail ~]# dig -t mx westos.com
[root@westos-mail ~]# dig -t mx qq.com
4.在qq-mail主机上做dns指向
[root@qq-mail ~]# vim /etc/resolv.conf
search qq.com
nameserver 172.25.254.10
做完之后也可以检测一下
[root@qq-mail ~]# dig -t mx westos.com
[root@qq-mail ~]# dig -t mx qq.com
终于到正题了,接下来开始配置postfix,Postfix由postfix RPM包提供,并通过postfix服务脚本控制。它是一个由多个协同操作程序构成的模块化程序,它的组件由master进程控制。
Postfix的主配置文件是/etc/postfix/main.cf,可以使用文本编辑器或postconf命令进行编辑。postconf
命令还可用于确定Postfix的所有当前和默认配置设置或逐项确定这些设置。
默认情况下,Postfix仅侦听来自本地主机的传入电子邮件。若要重新配置postfix以接收从远程主机发
送的本地邮件,必须在/etc/postfix/main.cf中设置inet_interfaces = all
对电子邮件进行故障排除时,将在/var/log/maillog中保留所有与邮件相关的操作日志,其中包括关于
被事件和成功事件的信息。mailq命令(或postqueue -p)显示已排队的所有传出邮件的列表。若要尝试
再次立即发送所有已排队的邮件,可以运行postfix flush命令(或postqueue -f);否则,postfix将大
约每小时尝试重新发送一次,直至邮件被接受或过期。
重要的Postfix配置指令
可以在/etc/postfix/main.cf文件中找到以下所有指令。
myorigin
重写本地发布的电子邮件,使其显示为来自该域。这样有助于确保响应返回入站邮件服务器
默认:myorigin = $myhostname
inet_interfaces
控制Postfix侦听传入电子邮件的网络接口。如果设置为loopback-only,仅侦听127.0.0.1和::1,
如果设置为all,则侦听所有网络接口。还可以指定特定地址。
默认:inet_interfaces = localhost
mydestination
收到地址为这些域的电子邮件将传递至MDA,以进行本地发送。
默认:mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks
IP地址和网络的逗号分隔列表(采用CIDR表示法)。这些地址和网络可以通过此MTA转发至
任何位置,无需进一步身份验证。
默认:mynetworks = 127.0.0.0/8
relayhost
relayhost转发所有通过的出站邮件。通常用方括号指定,以阻止MX记录查找。
默认:relayhost =
local_transport
收件地址为$mydestination的邮件的发送方式。默认情况下,设置为local:$myhostname(使用
Local MDA将传入电子邮件发送到/var/spool/mail中的本地邮件存储位置)
默认:local_transport = local:$myhostname
postconf -d 显示默认值。
postconf -n显示不同于默认值的更改。
默认情况下邮件端口只在127.0.0.1上开启
在westos-mail主机:
[root@westos-mail ~]# vim /etc/postfix/main.cf
76 myhostname = westos-mail.westos.com ##指定mta主机名称
83 mydomain = westos.com ##指定mta的域名
99 myorigin = $mydomain ##指定邮件来源结尾(@后面的字符内容)
116 inet_interfaces = all ##25端口开启的网络接口
164 mydestination = $myhostname, $mydomain, localhost ## 接受邮件来源结尾字符的指定
[root@westos-mail ~]# systemctl restart postfix.service
[root@westos-mail ~]# systemctl stop firewalld
在qq-mail主机
[root@qq-mail ~]# vim /etc/postfix/main.cf
76 myhostname = qq-mail.qq.com ##指定mta主机名称
83 mydomain = qq.com ##指定mta的域名
99 myorigin = $mydomain ##指定邮件来源结尾(@后面的字符内容)
116 inet_interfaces = all ##25端口开启的网络接口
164 mydestination = $myhostname, $mydomain, localhost ##接受邮件来源结尾字符的指定
[root@qq-mail ~]# systemctl restart postfix.service
[root@qq-mail ~]# systemctl stop firewalld.service
配置:
[root@westos-mail ~]# vim /etc/aliases
admin: root
moreuser: :include:/etc/postfix/moreuser
别名: 真名
别名: :include:filename
[root@westos-mail ~]# vim /etc/postfix/moreuser ##填写别名
westos
[root@westos-mail ~]# postalias /etc/postfix/
[root@westos-mail ~]# systemctl restart postfix.service
测试:
从qq-mail给westos-mail发送两封邮件,一封给[email protected] 一封给[email protected] ,然后在westos-mail这边查看,看root用户有没有收到两封。
[root@qq-mail ~]# mail root@westos.com
Subject: 123 ##标题
111 ##内容
111
. ##用“.”来结束录入内容并发送
EOT
[root@qq-mail ~]# mailq ##查看邮件队列
Mail queue is empty
[root@qq-mail ~]# mail admin@westos.com
Subject: 456
111
1144
.
EOT
[root@westos-mail ~]# postqueue -f ##重新处理邮件队列
在westos-mail查看:
[root@westos-mail ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 2 messages 1 new 2 unread
U 1 root Mon May 22 06:16 23/726 "123"
>N 2 root Mon May 22 06:17 22/721 "456"
& 2
Message 2:
From root@qq.com Mon May 22 06:17:14 2017
Return-Path: .com>
X-Original-To: admin@westos.com
Delivered-To: admin@westos.com
Date: Mon, 22 May 2017 18:17:14 +0800
To: admin@westos.com
Subject: 456
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@qq.com (root)
Status: R
111
1144
& q
Held 2 messages in /var/spool/mail/root
在48主机上安装服务,可以远程从一台主机给一台主机发送邮件
[root@foundation48 ~]# yum install telnet -y
[root@foundation48 ~]# telnet 172.25.254.10 25 发送端口为25
Trying 172.25.254.10...
Connected to 172.25.254.10.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
ehlo hello 检测是否连接成功
250-westos-mail.westos.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected] 从westos.com端发送邮件
250 2.1.0 Ok
rcpt to:[email protected] 接受端为qq.com
250 2.1.5 Ok
data 编写内容的命令
354 End data with .
qqqqqqqqqqqq 具体内容
.
250 2.0.0 Ok: queued as F14F317E84A
quit 结束
221 2.0.0 Bye
Connection closed by foreign host.