在使用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
等客户端服务程序正常收发邮件了
。
实际操作:
- 准备环境
,开放需要的端口,并卸载sedmail
,域名解析配置,修改
hostname
- 安装并且配置好postfix
发件服务
- 安装并且配置好dovect
收件服务
- 测试,检查发送情况。
2. 准备环境:
首先我们检查我们的服务器能否telnet
通我们要发送的一些邮件服务商的端口,
比如qq,163,gmail
等,如果不通的话需要更换服务器,因为此服务器商将这些给拦截了,
正常的现象是:
我们需要开放我们需要的端口,端口有25
(
SMTP
服务,用于发送邮件),
110
(
pop3
服务,用于接收邮件)
143
(
imap
服务,用于接收邮件)
如果你只想用pop3
服务,那么我们只需要打开
110
和
25
端口即可,如果我们使用了
ssl
的话,
pop3
就需要开放我们的465
(发件)
995(
收件
)
端口
imap
就需要开放我们的
465
(发件)
993(
收件
)
端口
****2.1 开放端口:
1
2
3
4
5
6 1firewall-cmd --add-port=25/tcp --permanent
2
3firewall-cmd –-add-port=110/tcp --permanent
4
5firewall-cmd --reload
6
****
****2.2 移除sendmail
1
2 1rpm -e sendmail 或者 yum remove sendmail
2
********2.3 域名解析配置
我们需要添加A
记录和
mx
记录。首先添加
A
记录解析到我们的服务器
ip。****
** ****** 2.4 mx 记录
在需要填入值的地方填入我图片中的对应字符。
********2.5 修改hostname
1
2 1hostnamectl set-hostname mail.域名
2
****2.6 修改MTA(默认邮件传输代理)
1
2 1alternatives --config mta
2
然后直接回车即可。
检查一下是不是已经设置成功了。
1
2 1alternatives --display mta
2
第一行可以看到mta
的状态。 例如:mat – status is manual.就是ok了。
3. POSTFIX
postfix
是提供发件服务的
(
注意:修改配置文件需备份,以下步骤未包含备份。)
postfix
服务程序主配置文件中的重要参数
。
参数 | 作用 |
myhostname | 邮局系统的主机名 |
mydomain | 邮局系统的域名 |
myorigin | 从本机发出邮件的域名名称 |
inet_interfaces | 监听的网卡接口 |
mydestination | 可接收邮件的主机名或域名 |
mynetworks | 设置可转发哪些主机的邮件 |
relay_domains | 设置可转发哪些网域的邮件 |
1 | 1 |
****3.1 安装 postfix
在
centos7
里我们的
postfix
是系统自带的,但是
centos7
以前的版本是默认不带的,
centos7
版本以前是
sendmail
如果没有则安装 :
1
2 1yum install postfix
2
****3.2 配置:
1
2 1vim /etc/postfix/main.cf
2
修改内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 1# 75行: 取消注释,设置hostname
2myhostname = mail.abc.com
3# 83行: 取消注释,设置域名
4mydomain = abc.com
5# 99行: 取消注释
6myorigin = $mydomain
7# 116行: 默认是localhost,我们需要修改成all
8inet_interfaces = all
9# 119行: 推荐ipv4,如果支持ipv6,则可以为all
10inet_protocols = ipv4
11# 164行: 添加
12mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
13# 264行: 取消注释,指定内网和本地的IP地址范围
14mynetworks = 127.0.0.0/8
15# 419行: 取消注释,邮件保存目录
16 home_mailbox = Maildir/
17# 571行: 添加
18smtpd_banner = $myhostname ESMTP
19# 添加到最后
20# 规定邮件最大尺寸为10M
21message_size_limit = 10485760
22# 规定收件箱最大容量为1G
23mailbox_size_limit = 1073741824
24# SMTP认证
25smtpd_sasl_type = dovecot
26smtpd_sasl_path = private/auth
27smtpd_sasl_auth_enable = yes
28smtpd_sasl_security_options = noanonymous
29smtpd_sasl_local_domain = $myhostname
30smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
31
以上对应的对应的行数位置可能随着版本不同会有差异。具体的一些参数含义在本小节前面有解释
****3.3 开启postfix服务并添加到系统自启。
1
2
3 1systemctl restart postfix
2systemctl enable postfix
3
4. 安装并配置dovecot
4.1 安装dovecot
1
2 1yum install dovecot
2
****4.2 配置dovect
编辑文件dovecot.conf
1
2 1vim /etc/dovecot/dovecot.conf
2
更改内容:
1
2
3
4
5 1# 26行: 如果不使用IPv6,请修改为*
2listen = *
3#在主配置文件中的第48行,设置允许登录的网段地址,也就是说我们可以在这里限制只有来自于某个网段的用户才能使用电子邮件系统。如果想允许所有人都能使用,则不用修改本参数
4login_trusted_networks = 192.168.10.0/24更改内容
5
编辑文件10-auth.conf
1
2 1vim /etc/dovecot/conf.d/10-auth.conf
2
更改内容:
1
2
3 1# 9行: 取消注释并修改 disable_plaintext_auth = no
2# 97行: 添加 auth_mechanisms = plain login
3
编辑文件10-mail.conf
1
2 1vim /etc/dovecot/conf.d/10-mail.conf
2
更改内容:
1
2 1# 30行: 取消注释并添加 mail_location = maildir:~/Maildir
2
编辑文件10-master.conf
1
2 1vim /etc/dovecot/conf.d/10-master.conf
2
更改内容:
1
2
3
4
5
6
7 1# 88-90行: 取消注释并添加 # Postfix smtp验证
2unix_listener /var/spool/postfix/private/auth {
3mode = 0666
4user = postfix
5group = postfix
6}
7
注意:如果我们没有使用ssl
的话需要进行下面的操作。使用了则不需要。
编辑文件10-ssl.conf
1
2 1vim /etc/dovecot/conf.d/10-ssl.conf
2
更改内容
1
2 1# 8行: 将ssl的值修改为 ssl = no
2
启动
dovecot并添加到开机自启。
1
2
3 1systemctl restart dovecot
2systemctl enable dovecot
3
5. 收发邮件测试
5.1 创建用户
邮件的用户是和系统用户一致的,也就是说系统用户可以当做邮件用户。
创建用户并设置密码
1
2
3 1useradd admin
2passwd admin
3
**** ****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脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 1#!/bin/bash
2
3LOGFILE="/var/log/maillog"
4
5#统计maillog中authentication failure的IP个数与IP
6grep "authentication failure" $LOGFILE|awk '{print $7}'|grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"|sort|uniq -c > af_iplist.txt
7
8#取出AF出现大于300次时的IP
9awk '$1>300 {print $2}' af_iplist.txt > block_ip_list.txt
10
11#大于300次AF的IP添加到iptables中
12cat block_ip_list.txt|while read line
13do
14/sbin/iptables -nL | grep $line
15if [ $? != 0 ]
16then
17 iptables -I INPUT -s $line -j DROP
18fi
19done
20