背景介绍

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

postfix发信流程

发邮件流程(SMTP)

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

收邮件流程 (IMAPs/POP3s)

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

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

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

软件介绍

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

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

saslauthd 用作用户认证

部署安装

DNS

  1. yum -y install bind bind-chroot
  2. vim /etc/named.conf 修改几个any
  3. listen-on port 53 { any; };
  4. listen-on-v6 port 53 { any; };
  5. directory "/var/named";
  6. dump-file "/var/named/data/cache_dump.db";
  7. statistics-file "/var/named/data/named_stats.txt";
  8. memstatistics-file "/var/named/data/named_mem_stats.txt";
  9. recursing-file "/var/named/data/named.recursing";
  10. secroots-file "/var/named/data/named.secroots";
  11. allow-query { any; };
  12. vim /etc/named.rfc1912.zones 增加
  13. zone "cat.com" IN {
  14. type master;
  15. file "named.cat";
  16. };
  17. zone "20.168.192.in-addr.arpa" {
  18. type master;
  19. file "named.arpa.cat";
  20. };

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

  1. vim /var/named/named.cat
  2. @ IN SOA master.cat.com. rname.invalid. (
  3. 0 ; serial
  4. 1D ; refresh
  5. 1H ; retry
  6. 1W ; expire
  7. 3H ) ; minimum
  8. @ NS master.cat.com.
  9. master A 192.168.20.136
  10. www A 192.168.20.136
  11. mail A 192.168.20.136
  12. MX 5 mail.cat.com.
  13. vim /var/named/named.arpa.cat
  14. $TTL 1D
  15. @ IN SOA master.cat.com. rname.invalid. (
  16. 0 ; serial
  17. 1D ; refresh
  18. 1H ; retry
  19. 1W ; expire
  20. 3H ) ; minimum
  21. @ NS master.cat.com.
  22. 136 PTR mail.cat.com.
  23. 136 PTR www.cat.com.
  24. 136 PTR master.cat.com.

起服务

  1. systemctl start named

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

  1. vim /etc/resolv.conf
  2. nameserver 192.168.20.136

验证是否能解析成功

  1. dig mail.cat.com
  2. dig -x 192.168.20.136

邮件服务器

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

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

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

postfix配置

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

dovecot配置

  1. vim /etc/dovecot/dovecot.conf
  2. protocols = imap pop3 lmtp
  3. listen = *
  4. dict {
  5. }
  6. !include conf.d/*.conf
  7. !include_try local.conf
  8. vim /etc/dovecot/conf.d/10-mail.conf
  9. mail_location = maildir:~/Maildir
  10. namespace inbox {
  11. inbox = yes
  12. }
  13. first_valid_uid = 1000
  14. mbox_write_locks = fcntl
  15. vim /etc/dovecot/conf.d/10-ssl.conf
  16. ssl = no
  17. ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
  18. ssl_key = </etc/pki/dovecot/private/dovecot.pem

sasl2配置

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

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

  1. vim /etc/mail.rc
  2. set from=admin@cat.com
  3. set smtp=mail.cat.com
  4. set smtp-auth-user=admin
  5. set smtp-auth-password=123456
  6. set smtp-auth=login

添加用户设置密码

  1. groupadd mailuser
  2. useradd admin -g mailuser
  3. useradd tom -g mailuser
  4. echo 123456 | passwd --stdin admin
  5. echo tom | passwd --stdin tom

起服务

  1. systemctl start dovecot
  2. systemctl start postfix
  3. systemctl start saslauthd

测试发送邮件:

  1. [root@mail ~]# telnet mail.cat.com 25
  2. Trying 192.168.20.136...
  3. Connected to mail.cat.com.
  4. Escape character is '^]'.
  5. 220 mail.cat.com ESMTP Postfix
  6. helo mail.cat.com
  7. 250 mail.cat.com
  8. mail from:admin@cat.com
  9. 250 2.1.0 Ok
  10. rcpt to:tom@cat.com
  11. 250 2.1.5 Ok
  12. data
  13. 354 End data with <CR><LF>.<CR><LF>
  14. hi tom
  15. .
  16. 250 2.0.0 Ok: queued as 1EB6A4864A40
  17. quit
  18. 221 2.0.0 Bye
  19. Connection closed by foreign host.

查看邮件

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

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

可以使用sendEmail

sendEmail

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

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

发邮件相关参数

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

试用:

  1. 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的配置文件配好就行,像这样:

  1. 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

在以上链接中还需注意:

创建用户:

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

加密命令:

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

修改权限:

  1. chmod 755 /etc/sasldb2

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

  1. yum -y install postfix
  2. yum -y install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain cyrus-sasl-devel
  3. alternatives --display mta
  4. alternatives --set mta /usr/sbin/sendmail.postfix
  5. alternatives --display mta
  6. vi /etc/postfix/main.cf 两种认证仅smtp配置不同
  7. broken_sasl_auth_clients = yes
  8. smtpd_client_restrictions = permit_sasl_authenticated
  9. smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated
  10. smtpd_sasl_auth_enable = yes
  11. smtpd_sasl_local_domain = $mydomain
  12. smtpd_sasl_security_options = noanonymous
  13. message_size_limit = 5242880
  14. vi /etc/sasl2/smtpd.conf
  15. pwcheck_method: auxprop
  16. auxprop_plugin: sasldb
  17. mech_list: plain login CRAM-MD5 DIGEST-MD5
  18. 创建账号:
  19. saslpasswd2 -c -u 'mail.com' test 输入密码 test123&
  20. sasldblistusers2 查看添加的用户
  21. #saslpasswd2 -d "test@mail.com" 删除用户
  22. systemctl restart postfix
  23. systemctl restart saslauthed
  24. 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方式认证:

在之前的基础上修改:

  1. vim /usr/lib64/sasl2/smtpd.conf
  2. pwcheck_method: auxprop
  3. auxprop_plugin: sasldb
  4. mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
  5. vim /etc/sysconfig/saslauthd
  6. SOCKETDIR=/run/saslauthd
  7. #MECH=pam
  8. #MECH=
  9. FLAGS=sasldb
  10. vim /etc/postfix/main.cf smtp的配置替换为
  11. smtp_tls_security_level = may
  12. broken_sasl_auth_clients=yes
  13. smtpd_client_restrictions = permit_sasl_authenticated
  14. smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated
  15. smtpd_sasl_auth_enable = yes
  16. smtpd_sasl_local_domain = $mydomain
  17. smtpd_sasl_security_options = noanonymous
  18. message_size_limit = 5242880

添加用户

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

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

/etc/sasldb2授权

重启服务

  1. systemctl restart saslauthd
  2. systemctl restart postfix
  3. chown postfix. /etc/sasldb2
  4. chmod 755 /etc/sasldb2

测试

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

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

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

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

  1. vim /etc/postfix/main.cf
  2. virtual_alias_domains = xi.cat.com,fan.cat.com,yang.cat.com
  3. virtual_alias_maps = hash:/etc/postfix/virtual
  4. alias_maps = hash:/etc/aliases
  5. vim /etc/postfix/virtual
  6. XifanYang@cat.com XifanYang
  7. MianhuaTan@xi.cat.com MianhuaTan
  8. MianhuaTan@fan.cat.com MianhuaTan
  9. MianhuaTan@yang.cat.com MianhuaTan
  10. vim /etc/aliases
  11. MianhuaTan: MianhuaTan
  12. XifanYang: XifanYang

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

  1. useradd MianhuaTan
  2. useradd XifanYang
  3. chmod 664 /etc/aliases
  4. chown root. /etc/aliases

重启服务

  1. systemctl restart postfix

配置完成,可使用发邮件

  1. XifanYang@cat.com
  2. MianhuaTan@xi.cat.com
  3. MianhuaTan@fan.cat.com
  4. 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. 关于typecho0.9代码高亮与数学公式支持

    闲来无事,搭了一个博客,记录一下自己的学习生活,博客模板取自原来typecho官方博客,稍加修改,改了一下涂装,不得不说插件支持有一些问题,目前大多数插件已经同步更新到typecho1.0版本,新插件 ...

  2. Jenkins的配置从节点中默认没有Launch agent via Java Web Start选项问题

    Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 1:打开" ...

  3. SQLAlchemy+Flask-RESTful使用(二)

    前言 本来没想到能这么快出二的,谁知道序列化组件写上头了.分享知识真的会上瘾.... 变更记录 # 19.3.18 起笔 # 19.3.18 使用SQLAlchemy排序方法 # 19.3.18 补充 ...

  4. pyspider

    Linux系统我使用CentOS.对于pycurl安装问题比较好解决,只需要先安装对应的开发包即可.执行如下命令: yum install python-devel curl-devel 分别安装py ...

  5. <转>Go语言TCP Socket编程

    授权转载: Tony Bai 原文连接: https://tonybai.com/2015/11/17/tcp-programming-in-golang/ Golang的主要 设计目标之一就是面向大 ...

  6. Python利用os模块批量修改文件名

    初学Python.随笔记录自己的小练习. 通过查阅资料os模块中rename和renames都可以做到 他们的区别为.rename:只能修改文件名   renames:可以修改文件名,还可以修改文件上 ...

  7. [转] Vue中异步错误处理

    一般在一个项目开始之前,我们一般会对现有的框架做一定功能上的丰富,比如对ajax请求功能的二次封装,封装的功能可能包含了:通用错误处理,请求过滤,响应过滤等等.如果我们封装的函数叫request,那么 ...

  8. PHP将图片转base64编码以及base64图片转换为图片并保存代码

    图片转base64编码 /*图片转换为 base64格式编码*/ $img = 'uploads/01.png'; $base64_img = base64EncodeImage($img); ech ...

  9. C++多态及其实现原理

    1.    多态的定义:多态含义为一个事物有多种形态.在C ++程序设计中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数,主要分为静态多态和动态多态: 静态 ...

  10. Linux系统下配置网络、JAVA环境,配置tomcat,mysql

    一.配置网络 1.进入自己的系统,并跳转到network-scripts 2.编辑 3.查看系统的信息 4.将其添加到刚刚的if-cfg-eth0中 5.重启网络 6.这个时候ping百度还是ping ...