邮件服务器 postfix
背景介绍
邮件服务器普遍需要一个主机名来使得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"
收件
收到的邮件垃圾箱怎么处理?
- 可能是收件端邮箱服务器设置了限制,给发件端ip加白名单;
- 邮件客户端分选至垃圾箱,如下outlook,之后该地址的邮件就会在收件箱了
- 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的更多相关文章
- linux邮件服务器postfix配置实例
linux邮件服务器postfix配置实例(超级详细!!!) 2013-03-13 13:30:21 标签:邮件服务器 linux 1. 系统安装:1)centos4.3 选上MAIL组件里的全部.2 ...
- 邮件服务器Postfix的管理 重启php-fpm
Postfix邮件系统安装与配置:Postfix,Cyrus-IMAP,Cyrus-sasl,Dovecot和SPFhttp://www.freehao123.com/postfix-cyrus/Ce ...
- 搭建邮件服务器 Postfix + Dovecot (CentOS)
最近分配到一台ECS服务器,需要搭建一台邮件服务器. 查了一波资料选择了Postfix (smtp)和 Dovecot(pop3). 推荐教程:http://www.cnblogs.com/zlbei ...
- Linux搭建邮件服务器Postfix+Dovecot+MySQL+PHP
用于搭建的服务器信息 阿里云 Centos 6.5 32位 安装过程1.安装Postfix 版本(2:2.6.6-8.el6) yum -y install postfix 安装完成还需要替换系统自带 ...
- 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 ...
- 教你如何架设linux邮件服务器postfix
检查linux是否有安装postfix和dovecot 检查命令如下: Rpm -qa |grep postfix; Rpm –qa |grep dovecot; 如果没有显示任何数据,表明没有安 ...
- CentOS利用postfix搭建邮件服务器
之前我用nodemailer通过163邮箱来发送邮件,不过没过几天就一直ETIMEDOUT,不知道什么原因,想着还是自己搭一个来发邮件可能靠谱点(flag?) 安装postfix CentOS 7 自 ...
- 烂泥:Postfix邮件服务器搭建之准备工作
说实话,Postfix邮件服务器的搭建是一件很麻烦的事情,需要各种软件之间的配置和调试.在写这篇文章之前,我也是搭建测试了不下于10次才算把整个流程给走通,今天刚好有时间把整个搭建过程记录下来. 在正 ...
- 烂泥:Postfix邮件服务器搭建之软件安装与配置
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb Postfix邮件服务器的搭建需要使用到几个软件,分别是cyrus-sasl.postf ...
随机推荐
- 关于typecho0.9代码高亮与数学公式支持
闲来无事,搭了一个博客,记录一下自己的学习生活,博客模板取自原来typecho官方博客,稍加修改,改了一下涂装,不得不说插件支持有一些问题,目前大多数插件已经同步更新到typecho1.0版本,新插件 ...
- Jenkins的配置从节点中默认没有Launch agent via Java Web Start选项问题
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 1:打开" ...
- SQLAlchemy+Flask-RESTful使用(二)
前言 本来没想到能这么快出二的,谁知道序列化组件写上头了.分享知识真的会上瘾.... 变更记录 # 19.3.18 起笔 # 19.3.18 使用SQLAlchemy排序方法 # 19.3.18 补充 ...
- pyspider
Linux系统我使用CentOS.对于pycurl安装问题比较好解决,只需要先安装对应的开发包即可.执行如下命令: yum install python-devel curl-devel 分别安装py ...
- <转>Go语言TCP Socket编程
授权转载: Tony Bai 原文连接: https://tonybai.com/2015/11/17/tcp-programming-in-golang/ Golang的主要 设计目标之一就是面向大 ...
- Python利用os模块批量修改文件名
初学Python.随笔记录自己的小练习. 通过查阅资料os模块中rename和renames都可以做到 他们的区别为.rename:只能修改文件名 renames:可以修改文件名,还可以修改文件上 ...
- [转] Vue中异步错误处理
一般在一个项目开始之前,我们一般会对现有的框架做一定功能上的丰富,比如对ajax请求功能的二次封装,封装的功能可能包含了:通用错误处理,请求过滤,响应过滤等等.如果我们封装的函数叫request,那么 ...
- PHP将图片转base64编码以及base64图片转换为图片并保存代码
图片转base64编码 /*图片转换为 base64格式编码*/ $img = 'uploads/01.png'; $base64_img = base64EncodeImage($img); ech ...
- C++多态及其实现原理
1. 多态的定义:多态含义为一个事物有多种形态.在C ++程序设计中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数,主要分为静态多态和动态多态: 静态 ...
- Linux系统下配置网络、JAVA环境,配置tomcat,mysql
一.配置网络 1.进入自己的系统,并跳转到network-scripts 2.编辑 3.查看系统的信息 4.将其添加到刚刚的if-cfg-eth0中 5.重启网络 6.这个时候ping百度还是ping ...