背景介绍

邮件服务器普遍需要一个主机名来使得mail from 以“账号@主机名”方式显示。由于外网上垃圾邮件太多,现在已不使用ip发邮件,很多网络供应商都会对来源不明的邮件进行限制,故需要搭建DNS或者使用服务商的域名解析,使得拥有一个正规的有来源的主机名。

postfix发信流程

发邮件流程(SMTP)

本地端MUA (邮件用户代理人) -----> 本地端MTA ---------> 远程用户MTA ------> 远程用户MDA ----> mailbox 远程用户MUA (此时还未到MUA)

收邮件流程 (IMAPs/POP3s)

远端用户MUA --------> MRA -------> mailbox

MUA <-------- MRA <------- mailbox

MUA : mail user agent  邮件用户代理人
MTA : mail transfer agent 邮件发送代理人
MDA : mail delivery agent 邮件传送代理人,MDA是MTA下的一个小程序,可以分析邮件表头或内容以获取邮件去向
mailbox:邮件主机的电子邮箱邮件,若MTA收到的邮件目标是本机,则MDA就会将邮件放进mailbox。
MRA: mail retrieval agent 邮件接收代理人
SMTP:用户传输邮件MTA使用此协议,连接服务器25端口
IMAPs/POP3s:用户接受邮件MRA使用此协议,加密有s,不加密可去掉s,连接服务器110端口。POP3与IMAP的区别是POP3传送邮件后会将服务端mailbox里的邮件删除,故你电脑端收完该邮件,打开手机端就接收不到了。

软件介绍

postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件

Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器

saslauthd 用作用户认证

部署安装

DNS

yum -y install bind bind-chroot
vim /etc/named.conf 修改几个any
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; vim /etc/named.rfc1912.zones 增加
zone "cat.com" IN {
type master;
file "named.cat";
}; zone "20.168.192.in-addr.arpa" {
type master;
file "named.arpa.cat";
};

创建以上定义的几个域名解析的文件

vim /var/named/named.cat
@ IN SOA master.cat.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum @ NS master.cat.com.
master A 192.168.20.136
www A 192.168.20.136
mail A 192.168.20.136
MX 5 mail.cat.com. vim /var/named/named.arpa.cat
$TTL 1D
@ IN SOA master.cat.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS master.cat.com.
136 PTR mail.cat.com.
136 PTR www.cat.com.
136 PTR master.cat.com.

起服务

systemctl start named

设置域名解析服务器为此服务器ip

vim /etc/resolv.conf
nameserver 192.168.20.136

验证是否能解析成功

dig mail.cat.com
dig -x 192.168.20.136

邮件服务器

yum  -y  remove  sendmail
yum -y install postfix dovecot cyrus-sasl-* mailx

如果用不上,最好卸载以下软件,后边发邮件可能会冲突

yum -y remove cyrus-sasl-sql cyrus-sasl-ldap

postfix配置

vim /etc/postfix/main.cf
myhostname =mail.cat.com
mydomain = cat.com
myorigin = $mydomain #发邮件那个主机名user@$myorigin
inet_interfaces = all #postfix监听哪些主机的端口
inet_protocols = ipv4 #postfix监听ip协议
mydestination = $myhostname, $mydomain, ftp.cat.com #设置我方作为收信方时,能够接收邮件的主机名
mynetworks = 127.0.0.0/8, 192.168.20.0/24 #信任的客户端,哪些主机能利用我发邮件
relay_domains = $mydestination #可以帮忙传递邮件的下一台MTA主机地址
alias_maps = hash:/etc/aliases #设置邮件别名,保留默认值
alias_database = hash:/etc/aliases
home_mailbox = Maildir/ #接收的邮件保存在该user的家目录的Maildir下 smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,reject_unauth_destination,permit_mynetworks
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination

dovecot配置

vim /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
listen = *
dict {
}
!include conf.d/*.conf
!include_try local.conf vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
namespace inbox {
inbox = yes
}
first_valid_uid = 1000
mbox_write_locks = fcntl vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

sasl2配置

vim /etc/sysconfig/saslauthd
SOCKETDIR=/run/saslauthd
MECH=shadow
FLAGS=
vim /usr/lib64/sasl2/smtpd.conf
pwcheck_method: saslauthd #系统用户认证
mech_list: PLAIN LOGIN
log_level:3

mailx配置(可以不用加此文件的配置)

vim /etc/mail.rc
set from=admin@cat.com
set smtp=mail.cat.com
set smtp-auth-user=admin
set smtp-auth-password=123456
set smtp-auth=login

添加用户设置密码

groupadd mailuser
useradd admin -g mailuser
useradd tom -g mailuser
echo 123456 | passwd --stdin admin
echo tom | passwd --stdin tom

起服务

systemctl  start  dovecot
systemctl start postfix
systemctl start saslauthd

测试发送邮件:

[root@mail ~]# telnet mail.cat.com 25
Trying 192.168.20.136...
Connected to mail.cat.com.
Escape character is '^]'.
220 mail.cat.com ESMTP Postfix
helo mail.cat.com
250 mail.cat.com
mail from:admin@cat.com
250 2.1.0 Ok
rcpt to:tom@cat.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
hi tom
.
250 2.0.0 Ok: queued as 1EB6A4864A40
quit
221 2.0.0 Bye
Connection closed by foreign host.

查看邮件

[root@mail new]# cat /home/tom/Maildir/new/1552977534.V803I60f7021M770672.mail.cat.com
Return-Path: <admin@cat.com>
X-Original-To: tom@cat.com
Delivered-To: tom@cat.com
Received: from mail.cat.com (bbs.cat.com [192.168.20.136])
by mail.cat.com (Postfix) with SMTP id 1EB6A4864A40
for <tom@cat.com>; Tue, 19 Mar 2019 14:38:23 +0800 (CST)
Message-Id: <20190319063835.1EB6A4864A40@mail.cat.com>
Date: Tue, 19 Mar 2019 14:38:23 +0800 (CST)
From: admin@cat.com hi tom

此时你若是用此方式给外网邮箱发邮件是发不通的,会报错Relay access denied

可以使用sendEmail

sendEmail

sendEmail是一个轻量级,命令行的SMTP邮件客户端。如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大

wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar -xvf sendEmail-v1.56.tar.gz -C /usr/local/
cp /usr/local/sendEmail-v1.56/sendEmail /usr/local/bin/

发邮件相关参数

-f xxxxx@163.com  发件人邮箱
-t 123456@qq.com 收件人邮箱
-s smtp.163.com 发件人邮箱的smtp服务器
-u "邮件主题" 邮件的标题
-o message-content-type=html 邮件内容的格式,html表示它是html格式
-o message-charset=utf8 邮件内容编码为utf8
-xu name@163.com 发件人邮箱的用户名
-xp passwd 发件人邮箱授权密码
-m "邮件内容" 邮件的具体内容
-a /data/test.txt 发送test.txt 这个文件

试用:

sendEmail -f "admin@cat.com" -xu "admin" -xp "123456" -u "cat title" -m "cat miao" -s mail.cat.com:25 -t "12323xxx@qq.com"

查看qq邮箱收到邮件,或许在垃圾箱

如果公司内部发邮件其实也可以不用DNS,直接用ip发真实的主机名也不用改,postfix的配置文件配好就行,像这样:

sendEmail -f "admin@cat.com" -xu "admin" -xp "123456" -u "cat title" -m "cat miao" -s 192.168.20.136:25 -t "12323xxx@qq.com"

收件

收到的邮件垃圾箱怎么处理?

  1. 可能是收件端邮箱服务器设置了限制,给发件端ip加白名单;
  2. 邮件客户端分选至垃圾箱,如下outlook,之后该地址的邮件就会在收件箱了

  3. qq邮箱对我们发的邮件做了拦截,垃圾箱都没有,怎么解决?

    邮件服务器公网ip配上域名解析,用域名发邮件,还需对邮件服务器的公网ip做域名反解。

=======================================================================

grafana配置此邮箱发邮件,报错:err="*smtp.plainAuth failed: unencrypted connection" 推测:可能是认证方式的问题,换一种认证方式,使用auxprop 外部用户认证

请参考:https://www.hyahm.com/article/225

在以上链接中还需注意:

创建用户:

saslpasswd2 -c -u 'mail.com' test 输入密码
sasldblistusers2 查看添加的用户
saslpasswd2 -d "test@mail.com" 删除用户

加密命令:

[root@one huan_yang]# perl -e "use MIME::Base64;print encode_base64('test@mail.com')"
dGVzdEBtYWlsLmNvbQ==
[root@one huan_yang]# perl -e "use MIME::Base64;print encode_base64('test123&')"
dGVzdDEyMyY=

修改权限:

chmod 755 /etc/sasldb2

注: auxprop认证配置至此处,以下配置内容无需再看。

yum -y install postfix
yum -y install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain cyrus-sasl-devel
alternatives --display mta
alternatives --set mta /usr/sbin/sendmail.postfix
alternatives --display mta vi /etc/postfix/main.cf 两种认证仅smtp配置不同
broken_sasl_auth_clients = yes
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
message_size_limit = 5242880 vi /etc/sasl2/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login CRAM-MD5 DIGEST-MD5 创建账号:
saslpasswd2 -c -u 'mail.com' test 输入密码 test123&
sasldblistusers2 查看添加的用户
#saslpasswd2 -d "test@mail.com" 删除用户 systemctl restart postfix
systemctl restart saslauthed chmod 755 /etc/sasldb2

sendEmail 测试:

/usr/local/bin/sendEmail -f "test@mail.com" -xu "test@mail.com" -xp "test123&" -u "test title" -m "test" -s 10.2.8.69:25 -t "xxxxx@qq.com"

============

修改配置

之前sasl2使用saslauthd方式认证,现配置auxprop方式认证:

在之前的基础上修改:

vim  /usr/lib64/sasl2/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM vim /etc/sysconfig/saslauthd
SOCKETDIR=/run/saslauthd
#MECH=pam
#MECH=
FLAGS=sasldb vim /etc/postfix/main.cf smtp的配置替换为
smtp_tls_security_level = may
broken_sasl_auth_clients=yes
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
message_size_limit = 5242880

添加用户

saslpasswd2 -c -u 'cat.com' test 输入密码
sasldblistusers2 查看添加的用户
saslpasswd2 -d "test@cat.com" 删除用户

注:在配置smtp发邮件时,添加的用户名为test@cat.com 而不是test

/etc/sasldb2授权

重启服务

systemctl  restart  saslauthd
systemctl restart postfix
chown postfix. /etc/sasldb2
chmod 755 /etc/sasldb2

测试

用grafana发邮件测试,能成功发送,但是prometheus还是不能发送

================================================

虚拟别名独立域名,共享Unix账户

如果我需要同一台postfix支持多个域名发送邮件,该怎么配置呢?此处使用系统用户认证方式

vim /etc/postfix/main.cf
virtual_alias_domains = xi.cat.com,fan.cat.com,yang.cat.com
virtual_alias_maps = hash:/etc/postfix/virtual
alias_maps = hash:/etc/aliases vim /etc/postfix/virtual
XifanYang@cat.com XifanYang
MianhuaTan@xi.cat.com MianhuaTan
MianhuaTan@fan.cat.com MianhuaTan
MianhuaTan@yang.cat.com MianhuaTan vim /etc/aliases
MianhuaTan: MianhuaTan
XifanYang: XifanYang

需要新建MianhuaTan 与XifanYang 账户,并新建密码

useradd   MianhuaTan
useradd XifanYang chmod 664 /etc/aliases
chown root. /etc/aliases

重启服务

systemctl  restart  postfix

配置完成,可使用发邮件

XifanYang@cat.com
MianhuaTan@xi.cat.com
MianhuaTan@fan.cat.com
MianhuaTan@yang.cat.com

邮件服务器 postfix的更多相关文章

  1. linux邮件服务器postfix配置实例

    linux邮件服务器postfix配置实例(超级详细!!!) 2013-03-13 13:30:21 标签:邮件服务器 linux 1. 系统安装:1)centos4.3 选上MAIL组件里的全部.2 ...

  2. 邮件服务器Postfix的管理 重启php-fpm

    Postfix邮件系统安装与配置:Postfix,Cyrus-IMAP,Cyrus-sasl,Dovecot和SPFhttp://www.freehao123.com/postfix-cyrus/Ce ...

  3. 搭建邮件服务器 Postfix + Dovecot (CentOS)

    最近分配到一台ECS服务器,需要搭建一台邮件服务器. 查了一波资料选择了Postfix (smtp)和 Dovecot(pop3). 推荐教程:http://www.cnblogs.com/zlbei ...

  4. Linux搭建邮件服务器Postfix+Dovecot+MySQL+PHP

    用于搭建的服务器信息 阿里云 Centos 6.5 32位 安装过程1.安装Postfix 版本(2:2.6.6-8.el6) yum -y install postfix 安装完成还需要替换系统自带 ...

  5. Centos7搭建邮件服务器-Postfix+Cyrus-sasl+Courier-authlib+Dovecot+ExtMail+Centos7

    1.环境介绍 MTA: Postfix 3.1.4 SASL: Cyrus-sasl 2.1.26 ; Courier-authlib 0.66.1(Cyrus-sasl使用Courier-authl ...

  6. 教你如何架设linux邮件服务器postfix

    检查linux是否有安装postfix和dovecot 检查命令如下: Rpm  -qa |grep  postfix; Rpm –qa |grep dovecot; 如果没有显示任何数据,表明没有安 ...

  7. CentOS利用postfix搭建邮件服务器

    之前我用nodemailer通过163邮箱来发送邮件,不过没过几天就一直ETIMEDOUT,不知道什么原因,想着还是自己搭一个来发邮件可能靠谱点(flag?) 安装postfix CentOS 7 自 ...

  8. 烂泥:Postfix邮件服务器搭建之准备工作

    说实话,Postfix邮件服务器的搭建是一件很麻烦的事情,需要各种软件之间的配置和调试.在写这篇文章之前,我也是搭建测试了不下于10次才算把整个流程给走通,今天刚好有时间把整个搭建过程记录下来. 在正 ...

  9. 烂泥:Postfix邮件服务器搭建之软件安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb Postfix邮件服务器的搭建需要使用到几个软件,分别是cyrus-sasl.postf ...

随机推荐

  1. php curl请求

    multipart/form-data 方式 post的curl库,模拟post提交的时候,默认的方式 multipart/form-data ,这个算是post提交的几个基础的实现方式. $post ...

  2. P5300 [GXOI/GZOI2019]与或和

    题目地址:P5300 [GXOI/GZOI2019]与或和 考虑按位计算贡献 对于 AND 运算,只有全 \(1\) 子矩阵才会有贡献 对于 OR 运算,所以非全 \(0\) 子矩阵均有贡献 如果求一 ...

  3. Week_10 C

    拓扑排序 Week_10    C 题意:输入n行数据a,b  ,表示a的钱数大于b的钱数,最低的人分的的钱数为888,问最少需要多少钱可以分给员工 思路:标准的拓扑排序,不过这题需要逆向拓扑 注意点 ...

  4. 机器学习基石10-Logistic Regression

    注: 文章中所有的图片均来自台湾大学林轩田<机器学习基石>课程. 笔记原作者:红色石头 微信公众号:AI有道 上一节课介绍了Linear Regression线性回归,用均方误差来寻找最佳 ...

  5. 7个提升Python程序性能的好习惯

    原文作者:爱coding,会编程的核电工程师. 个人博客地址:zhihu.com/people/zhong-yun-75-63 掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费 ...

  6. Error occurred during initialization of VM Incompatible initial and maximum heap sizes specified

    双击Tomcat server在eclipse弹出的Tomcat配置项里面选择open launch configuration 选择arguments在 vm arguments 里面添加 -Xms ...

  7. ThinkPHP 2053错误

    这个报错是调用存储过程的时候产生的,用的是5.1的代码是根据官方文档写的,我怀疑5.0也有这个问题.去官方查了一下发现不少人有这个问题,但是官方都没有回应过,只能自己动手一步步调了. $center ...

  8. eclipse集成testng插件

    一.TestNG简介 TestNG是一个开源自动化测试框架,它受到JUnit和NUnit的启发,而引入了许多新的创新功能,如依赖测试,分组概念,使测试更强大,更容易做到. 它旨在涵盖所有类别的测试:单 ...

  9. html_javascript

    js:放在bady标签的底部,保证页面加载完成后才加载js js注释:// 单行注释 /*多行注释*/ js有两种存在形式: 以文件的形式存在,使用时引用在head标签里<script src= ...

  10. js实现页面重新加载

    https://blog.csdn.net/wangjian530/article/details/80596801