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等,如果不通的话需要更换服务器,因为此服务器商将这些给拦截了,
正常的现象是(经测试,国内服务器已被屏蔽,无法给qq邮箱发送邮件,但可以接收QQ邮箱发来的邮件 ):
我们需要开放我们需要的端口,端口有25(SMTP服务,用于发送邮件),110(pop3服务,用于接收邮件)143(imap服务,用于接收邮件)
如果你只想用pop3服务,那么我们只需要打开110和25端口即可,如果我们使用了ssl的话,
pop3就需要开放我们的465(发件) 995(收件)端口
imap就需要开放我们的465(发件) 993(收件)端口
2.1 开放端口:
vim /etc/sysconfig/iptables 添加在中间以下代码
#SMTP服务端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
#pop3服务端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
#iamp服务端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
wq 保存退出
重启iptables服务
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.域名
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 配置:
1 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/8
# 419行: 取消注释,邮件保存目录
home_mailbox = Maildir/
# 571行: 添加
smtpd_banner = $myhostname ESMTP
# 添加到最后
# 规定邮件最大尺寸为10M
message_size_limit = 10485760
# 规定收件箱最大容量为1G
mailbox_size_limit = 1073741824
# 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
3.4 修改MTA(默认邮件传输代理)
alternatives --config mta
然后输入1回车即可。
检查一下是不是已经设置成功了。
alternatives --display mta
第一行可以看到mta的状态。 例如:mat – status is manual.就是ok了。
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/10-auth.conf
更改内容:
# 9行: 取消注释并修改 disable_plaintext_auth = no
# 97行: 添加 auth_mechanisms = plain login
编辑文件10-mail.conf
vim /etc/dovecot/conf.d/10-mail.conf
更改内容(设置邮件存放地址,~代表用户的根目录,每个用户都会存在一个此目录):
# 30行: 取消注释并添加 mail_location = maildir:~/Maildir
编辑文件10-master.conf
vim /etc/dovecot/conf.d/10-master.conf
更改内容:
# 97-99行: 取消注释并添加 # Postfix smtp验证
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
注意:如果我们没有使用ssl的话需要进行下面的操作。使用了则不需要。
编辑文件10-ssl.conf
vim /etc/dovecot/conf.d/10-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发一封邮件.
5.3在服务器代码行测试方法:
[root@pfx ~]# telnet localhost 110
Trying ::1...
Connected to localhost.
Escape character is'^]'.
+OK Dovecot ready.
user zs
+OK
pass 123456
+OK Logged in.
测试发送邮件
[root@pfx /]# telnet localhost 25
Trying ::1...
Connected to localhost.Escape character is'^]'.
220 mail.ixmsoft.com ESMTP Postfix
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with
. this istestmail
.
250 2.0.0 Ok: queued as A702D400FC14
quit
221 2.0.0 ByeConnection closed by foreign host.
我们查看邮件
[root@pfx /]# telnet localhost 110
Trying ::1...
Connected to localhost.
Escape character is'^]'.
+OK Dovecot ready.
user ls
+OK
pass 123456
+OK
Logged in.
list
+OK 1
messages:
1 409.
如果你想邮件服务器配置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 [ $? != 0 ]
then
iptables -I INPUT -s $line -j DROP
fi
done
参考文档:
1.centos7搭建postfix邮件服务器(自由早晚乱余生):https://www.cnblogs.com/operationhome/p/9056870.html
2.Centos7+Postfix+Dovecot实现邮件收发(高文龙):https://blog.51cto.com/gaowenlong/1884841
欢迎访问作者网站:https://pmhuiyilu.com