在使用qq等邮件服务器厂商提供的邮件服务后,发现他们的邮件发送数量是有限制的,随着公司的业务的需求下,我们需要搭建一个邮件服务器,邮件服务器可以帮助我们在一些提醒方面和消息推送方面起到帮助。

理论性语句:

1. 邮件系统的简单介绍:

  电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有下面这些。

  简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的25/TCP端口。

  邮局协议版本3(Post Office Protocol 3):用于将电子邮件存储到本地主机,占用服务器的110/TCP端口。

  Internet消息访问协议版本4(Internet Message Access Protocol 4):用于在本地主机上访问邮件,占用服务器的143/TCP端口。

  一个最基础的电子邮件系统肯定要能提供发件服务和收件服务,为此需要使用基于SMTP协议的Postfix服务程序提供发件服务功能,并使用基于POP3协议的Dovecot服务程序提供收件服务功能。这样一来,用户就可以使用Outlook Express或Foxmail等客户端服务程序正常收发邮件了。

实际操作:

  1. 准备环境 ,开放需要的端口,并卸载sedmail,域名解析配置,修改hostname
  2. 安装并且配置好postfix发件服务
  3. 安装并且配置好dovect收件服务
  4. 测试,检查发送情况。

2. 准备环境: 

   首先我们检查我们的服务器能否telnet通我们要发送的一些邮件服务商的端口,比如qq,163,gmail等,如果不通的话需要更换服务器,因为此服务器商将这些给拦截了,

正常的现象是:

 

我们需要开放我们需要的端口,端口有25(SMTP服务,用于发送邮件),110(pop3服务,用于接收邮件)143(imap服务,用于接收邮件)

如果你只想用pop3服务,那么我们只需要打开110和25端口即可,如果我们使用了ssl的话,

pop3就需要开放我们的465(发件) 995(收件)端口

imap就需要开放我们的465(发件) 993(收件)端口

  2.1 开放端口:

firewall-cmd --add-port=/tcp --permanent

firewall-cmd –-add-port=/tcp --permanent

firewall-cmd --reload

  2.2 移除sendmail

rpm -e sendmail 或者 yum remove sendmail

  2.3 域名解析配置

我们需要添加A记录和mx记录。首先添加A记录解析到我们的服务器ip。

   2.4 mx 记录

在需要填入值的地方填入我图片中的对应字符。

  2.5 修改hostname

hostnamectl  set-hostname   mail.域名

  2.6 修改MTA(默认邮件传输代理)

alternatives --config mta 

然后直接回车即可。

检查一下是不是已经设置成功了。

alternatives --display mta

第一行可以看到mta的状态。 例如:mat - status is manual.就是ok了。

3. POSTFIX

postfix是提供发件服务的(注意:修改配置文件需备份,以下步骤未包含备份。)

postfix服务程序主配置文件中的重要参数。

参数

作用

myhostname

邮局系统的主机名

mydomain

邮局系统的域名

myorigin

从本机发出邮件的域名名称

inet_interfaces

监听的网卡接口

mydestination

可接收邮件的主机名或域名

mynetworks

设置可转发哪些主机的邮件

relay_domains

设置可转发哪些网域的邮件

  3.1 安装 postfix

在centos7里我们的postfix是系统自带的,但是centos7以前的版本是默认不带的,centos7版本以前是sendmail

如果没有则安装 :

yum install postfix

  3.2 配置:

vim /etc/postfix/main.cf

修改内容:

# 75行: 取消注释,设置hostname
myhostname = mail.abc.com
# 83行: 取消注释,设置域名
mydomain = abc.com
# 99行: 取消注释
myorigin = $mydomain
# 116行: 默认是localhost,我们需要修改成all
inet_interfaces = all
# 119行: 推荐ipv4,如果支持ipv6,则可以为all
inet_protocols = ipv4
# 164行: 添加
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 264行: 取消注释,指定内网和本地的IP地址范围
mynetworks = 127.0.0.0/
# 419行: 取消注释,邮件保存目录
home_mailbox = Maildir/
# 571行: 添加
smtpd_banner = $myhostname ESMTP
# 添加到最后
# 规定邮件最大尺寸为10M
message_size_limit =
# 规定收件箱最大容量为1G
mailbox_size_limit =
# SMTP认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

以上对应的对应的行数位置可能随着版本不同会有差异。具体的一些参数含义在本小节前面有解释

  3.3 开启postfix服务并添加到系统自启。

systemctl  restart  postfix
systemctl enable postfix

4. 安装并配置dovecot

4.1 安装dovecot

yum install dovecot 

  4.2 配置dovect

编辑文件dovecot.conf

vim /etc/dovecot/dovecot.conf 

更改内容:

# 26行: 如果不使用IPv6,请修改为*
listen = *
#在主配置文件中的第48行,设置允许登录的网段地址,也就是说我们可以在这里限制只有来自于某个网段的用户才能使用电子邮件系统。如果想允许所有人都能使用,则不用修改本参数
login_trusted_networks = 192.168.10.0/24更改内容

编辑文件10-auth.conf

vim /etc/dovecot/conf.d/-auth.conf 

更改内容:

# 9行: 取消注释并修改 disable_plaintext_auth = no
# 97行: 添加 auth_mechanisms = plain login

编辑文件10-mail.conf

vim /etc/dovecot/conf.d/-mail.conf

更改内容:

# 30行: 取消注释并添加 mail_location = maildir:~/Maildir

编辑文件10-master.conf

vim /etc/dovecot/conf.d/-master.conf

更改内容:

# -90行: 取消注释并添加 # Postfix smtp验证
unix_listener /var/spool/postfix/private/auth {
mode =
user = postfix
group = postfix
}

注意:如果我们没有使用ssl的话需要进行下面的操作。使用了则不需要。

编辑文件10-ssl.conf

vim /etc/dovecot/conf.d/-ssl.conf 

更改内容

# 8行: 将ssl的值修改为 ssl = no

启动dovecot并添加到开机自启。

systemctl restart dovecot
systemctl enable dovecot

5. 收发邮件测试  

5.1 创建用户

  邮件的用户是和系统用户一致的,也就是说系统用户可以当做邮件用户。

创建用户并设置密码

useradd admin
passwd admin

   5.2 使用foxmail进行登陆

1中我们需要选择我们之前开放端口对应的服务器类型。

2中 我们只需要填入我们的用户名,例如admin,root

3中 我们收件和发件都填入我们的mail.域名。例 mail.abc.com

4 中 我们如果使用了ssl的话就需要勾选,如果没有使用的话就不需要勾选

填入相应信息后我们即可登陆了。然后我们可以进行收发邮件了,我们可以测试给自己的qq发一封邮件.

如果我们查看日志发现 status=bounced ,那么就意味着qq的邮件服务器将我们这个服务器IP设为恶意IP,不接收这个IP发送的邮件。也就意味着如果我们要发邮件到qq邮箱的话,就需要更换服务器ip。

如果状态是上面的话,就意味着可以正常发送,还要注意一点的就是我们邮件服务器的邮件很多时候会被放在垃圾箱里,所以当你发送了邮件你在收件箱没看到,你可以去垃圾箱里面看看有没有。接收方面一般没有什么问题,用qq邮箱发送给自己即可(admin@abc.com

如果你想邮件服务器配置SSL,那么你可以看看centos7邮件服务器SSL配置

注意事项:

我们邮件服务器在设定mynetworks 这个值的时候,一行不要设置all,因为会有很多服务器会将你的服务器作为中转邮件服务器,最终导致的你的邮件服务器发送的邮件被qq,163,gamil,这些邮件服务商标记为垃圾邮件。

当某天我们检查我们的mail日志(/var/log/maillog)时发现很多邮件发送,而且邮件不是我们自己产生的话,那么我们的邮件服务器是出了问题的

这时我们服务器一定有很多邮件堆积,然后自己邮件会发不出去。

我们需要做的操作:检查

du -sh /var/spool/postfix/*

查看目录下的defer和deferred的目录大小,通过postqueue –p来查看队列的邮件,通过postsuper -d ALL 删除所有的队列邮件。

最后附上屏蔽刷postfix的 IP脚本

#!/bin/bash

LOGFILE="/var/log/maillog"

#统计maillog中authentication failure的IP个数与IP
grep "authentication failure" $LOGFILE|awk '{print $7}'|grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"|sort|uniq -c > af_iplist.txt #取出AF出现大于300次时的IP
awk '$1>300 {print $2}' af_iplist.txt > block_ip_list.txt #大于300次AF的IP添加到iptables中
cat block_ip_list.txt|while read line
do
/sbin/iptables -nL | grep $line
if [ $? != ]
then
iptables -I INPUT -s $line -j DROP
fi
done

参考文档:

http://lomu.me/post/linux-email-server

http://lomu.me/post/SPF-DKIM-DMARC-PTR

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

  1. linux平台搭建postfix邮件服务器

    一,搭建邮件服务器前准备如下: Centos 7.2 64位Postfix-2.8.12.tar.gz Postfix MTA(邮件传输代理)Dovecot-2.1.8.tar.gz IMAP 和 P ...

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

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

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

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

  4. 烂泥:Postfix邮件服务器搭建之虚拟用户配置

    virtual_gid_maps = static: virtual_transport = dovecot dovecot_destination_recipient_limit = 1 注意:po ...

  5. Linux中postfix邮件服务器的搭建

    postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件.postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试.在 ...

  6. centos7搭建ntp时间同步服务器chrony服务

    centos7搭建ntp时间同步服务器chrony服务 前言: 在centos6的时候我们基本使用的是ntp服务用来做时间同步,但是在centos7后推荐是chrony作为时间同步器的服务端使用, ...

  7. Postfix 邮件服务器搭建

    搭建服务环境: Centos 6 配置域名hosts: mail.demonC6.com 1.清理系统自带的邮件软件 # rpm -qa | grep sendmail* # rpm -e sendm ...

  8. postfix邮件服务器搭建01-准备篇

    本系列文章主要介绍linux下主流的开源邮件系统postfix的搭建过程,构建一个通过postfix虚拟用户管理的完整的邮件系统, 该系统包括以下组件: 邮件收发端postfix,dovecot, 邮 ...

  9. Postfix邮件服务器搭建及配置

    一.邮件服务器(Mail Server)的传输协议 1.简单邮件传输协议(SMTP):Simple Mail Transger Protocol 2.扩展的简单邮件传输协议(ESMTP):Extend ...

随机推荐

  1. Android群英传笔记——第四章:ListView使用技巧

    Android群英传笔记--第四章:ListView使用技巧 最近也是比较迷茫,但是有一点点还是要坚持的,就是学习了,最近离职了,今天也是继续温习第四章ListView,也拖了其实也挺久的了,list ...

  2. Leetcode_204_Count Primes

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/46366207 Description: Count the ...

  3. Android开发技巧——使用Dialog实现仿QQ的ActionSheet菜单

    最近看到有人用Dialog来实现QQ的仿ActionSheet的自定义菜单,对于自己没实现过的一些控件,看着也想实现一下.于是动手了一下,发现也不难,和大家分享一下. 本文原创,转载请注明出处:htt ...

  4. Android Data Binding高级用法-Observable、动态生成Binding Class(三)

    设置View的id 虽然说Data Binding这种分层模式使得我们对数据的传递简单明了,一般情况下我们可以不设置View的id,不使用findViewById即可对View进行数据上一系列的操作, ...

  5. 苹果新的编程语言 Swift 语言进阶(十三)--类型检查与类型嵌套

    一 类型检查 1. 类型检查操作符 类型检查用来检查或转换一个实例的类型到另外的类型的一种方式. 在Swift中,类型检查使用is和as操作符来实现. is操作符用来检查一个实例是否是某种特定类型,如 ...

  6. 面试之路(13)-android apk之间共享数据的方式以及shareUserId详解

    1.通过content Provider/sharedPreferrence 2.通过shareUserId 我们详细介绍一下shareUserId: Android App Sandbox(andr ...

  7. ORACLE数据库部分面试题目

    1. 解释冷备份和热备份的不同点以及各自的优点 解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份.而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库.热备份的优点在于当备份 ...

  8. Day20 Ajax

    Ajax准备知识:json 什么是json? 定义: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w ...

  9. Storyboard中ViewController加载的四种方式

    这个总结来自于<Programming iOS 10>一书: 1.storyboard的初始化ViewController,通过方法instantiateInitialViewContro ...

  10. POSTGRESQL 并发控制

    http://meidayhxp.blog.163.com/blog/static/117608156201210243837491/ 这个内容是官方Doc中的一章,具体是那一版的,还未确认. 第九章 ...