秋栈博客

七月

CentOS 7搭建邮件服务-postfix+dovecot

4
2022-08-08

CentOS 7搭建邮件服务

1、服务介绍

Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。最早在1990年代晚期出现,是一个开放源代码的软件。

1.1、邮件服务类型

POP3、IMAP、SMTP、Exchange

1.2、协议

  1. SMTP:Simple Mail Transfer Protocol/简单邮件传送协议,定义邮件传送,基于TCP服务的应用层,明文传送,SMTP协议使用25端口 。两个邮件服务器之间,客户和邮件服务器之间使用。服务器和服务器之间用来传输邮件,客户端将邮件传输到服务器。
  2. POP3:Post Office Protocol 3/邮局协议第三版,POP3协议适用于不能实时在线的邮件用户。支持客户在服务器上租用信箱,然后利用POP3协议向服务器请求下载,基于TCP/IP协议与客户端/服务端模型,POP3的认证与邮件传送都采用明文,使用110端口 。客户端和服务器之间使用,用来下载邮件。
  3. IMAP:Internet Message Access Protocol/英特网信息存取协议,也叫邮件同步协议,另一种从邮件服务器上获取邮件的协议,与POP3相比,支持在下载邮件前先行下载邮件头以预览邮件的主题来源,基于TCP/IP,明文传送,使用143端口
25 smtp 465 smtps 110 pop3 995 pop3s 143 imap 993 imaps

2、环境准备

2.1、防火墙

[root@localhost ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
[root@localhost ~]# getenforce
Disabled

[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

2.2、时间同步

[root@localhost ~]# crontab -e

*/1 * * * * /usr/sbin/ntpdate time1.aliyun.com

2.4、修改MTA:默认邮件传输代理

[root@linux03 ~]# alternatives --config mta

共有 1 个提供“mta”的程序。

  选项    命令
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

按 Enter 保留当前选项[+],或者键入选项编号:
检查设置是否成功:
mta - 状态为手工。或 mta -status is manual 即可
[root@linux03 ~]# alternatives --display mta
mta - 状态为手工。
链接当前指向 /usr/sbin/sendmail.postfix
/usr/sbin/sendmail.postfix - priority 30
从 mta-mailq:/usr/bin/mailq.postfix
从 mta-newaliases:/usr/bin/newaliases.postfix
从 mta-pam:/etc/pam.d/smtp.postfix
从 mta-rmail:/usr/bin/rmail.postfix
从 mta-sendmail:/usr/lib/sendmail.postfix
从 mta-mailqman:/usr/share/man/man1/mailq.postfix.1.gz
从 mta-newaliasesman:/usr/share/man/man1/newaliases.postfix.1.gz
从 mta-sendmailman:/usr/share/man/man1/sendmail.postfix.1.gz
从 mta-aliasesman:/usr/share/man/man5/aliases.postfix.5.gz
当前“最佳”版本是 /usr/sbin/sendmail.postfix。
 

3、安装postfix

CentOS7默认安装postfix,若没有请手动安装
[root@linux03 ~]# rpm -qa | grep postfix
postfix-2.10.1-9.el7.aarch64
yum install -y postfix*

4、修改主配置文件main.cf

建议修改之前请先备份
[root@linux03 ~]# cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
[root@linux03 ~]# vim /etc/postfix/main.cf
#约第77行修改配置
myhostname = mail.test.com
#约第84行修改配置
mydomain = test.com
#约第99行修改配置
myorigin = $mydomain
#约第113行修改配置
#监听所有网络端口
inet_interfaces = all
inet_protocols = all
#默认监听本地,注释掉。
#inet_interfaces = localhost
#第164行 设置邮件的发送目的地
mydestination = $myhostname,$mydomain
#第264行,设置信任网段
mynetworks = 10.211.55.0/24, 10.10.1.0/24 , 10.20.1.0/24
#第296行,转发域
relay_domains = $mydestination
#第179行
local_recipient_maps =
查看配置
[root@linux03 ~]# grep -v '^#' /etc/postfix/main.cf | grep -v '^$' | cat -n
     1	queue_directory = /var/spool/postfix
     2	command_directory = /usr/sbin
     3	daemon_directory = /usr/libexec/postfix
     4	data_directory = /var/lib/postfix
     5	mail_owner = postfix
     6	myhostname = mail.test.com
     7	mydomain = test.com
     8	myorigin = $mydomain
     9	inet_interfaces = all
    10	inet_protocols = all
    11	mydestination = $myhostname,$mydomain
    12	local_recipient_maps =
    13	unknown_local_recipient_reject_code = 550
    14	mynetworks = 10.211.55.0/24, 10.10.1.0/24 , 10.20.1.0/24
    15	relay_domains = $mydestination
    16	alias_maps = hash:/etc/aliases
    17	alias_database = hash:/etc/aliases
    18
    19
    20	debug_peer_level = 2
    21	debugger_command =
    22		 PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    23		 ddd $daemon_directory/$process_name $process_id & sleep 5
    24	sendmail_path = /usr/sbin/sendmail.postfix
    25	newaliases_path = /usr/bin/newaliases.postfix
    26	mailq_path = /usr/bin/mailq.postfix
    27	setgid_group = postdrop
    28	html_directory = no
    29	manpage_directory = /usr/share/man
    30	sample_directory = /usr/share/doc/postfix-2.10.1/samples
    31	readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
 

5、重启并设置自启

[root@linux03 ~]# systemctl restart postfix
[root@linux03 ~]# systemctl enable postfix
[root@linux03 ~]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2022-08-05 20:06:31 CST; 43s ago
 Main PID: 2043 (master)
   CGroup: /system.slice/postfix.service
           ├─2043 /usr/libexec/postfix/master -w
           ├─2044 pickup -l -t unix -u
           ├─2045 qmgr -l -t unix -u
           ├─2069 cleanup -z -t unix -u
           ├─2070 trivial-rewrite -n rewrite -t unix -u
           └─2072 local -t unix
查看端口
[root@linux03 ~]# netstat -anlpt | grep 25
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      5627/master
tcp6       0      0 :::25                   :::*                    LISTEN      5627/master
 

6、测试发件

mail to user 输入邮件内容 按Ctrl+D发送
[root@linux03 ~]# mail to lisi
Subject: Hello!
EOT
Null message body; hope that's ok
[root@linux03 ~]# mail to lisi
Subject: hello
EOT
切换接收者查看邮件
若提示mail :command not found,需要安装软件包
yum -y install mailx
测试
[root@linux03 ~]# su - lisi

[lisi@linux03 ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/lisi": 2 messages 2 new
>N  1 root                  Fri Aug  5 20:10  18/532   "Hello!"
 N  2 root                  Fri Aug  5 20:12  22/522   "hello"
&
#按q退出

7、使用程序邮箱发送邮件

7.1、安装dovecot

yum install dovecot -y

7.2、修改主配置文件dovecot.conf

#第24行取消注释
protocols = imap pop3 lmtp
#第30行取消注释
listen = *, ::
#第48行修改允许登录接受的网段
login_trusted_networks = 0.0.0.0/0
查看配置
[root@linux03 ~]# grep -v '^#' /etc/dovecot/dovecot.conf | grep -v '^$'
protocols = imap pop3 lmtp
listen = *,::
login_trusted_networks = 0.0.0.0/0
dict {
  #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
  #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}
!include conf.d/*.conf
!include_try local.conf
 

7.3、修改子配置文件

[root@linux03 ~]# vim /etc/dovecot/conf.d/10-mail.conf

#第25行取消注释
mail_location = mbox:~/mail:INBOX=/var/mail/%u
[root@linux03 ~]# vim /etc/dovecot/conf.d/10-auth.conf
#第10行关闭认证
disable_plaintext_auth = no
#第100行
auth_mechanisms = plain login
查看配置文件
[root@linux03 ~]# grep -v '^#' /etc/dovecot/conf.d/10-auth.conf | grep -v '^$'
disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-system.conf.ext
禁用SSL认证
[root@linux03 ~]# vim /etc/dovecot/conf.d/10-ssl.conf
#注释第9行,新增配置
ssl = no
#注释第14、15行
#ssl_cert = 
开启dovecot日志
[root@linux03 ~]# vim /etc/dovecot/conf.d/10-logging.conf
#新增以下配置
nfo_log_path = /var/log/dovecot_info.log
debug_log_path = /var/log/dovecot_debug.log
 

7.4、设置用户密码

[root@linux03 ~]# echo "123456"|passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@linux03 ~]# echo "123456"|passwd --stdin lisi
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。

7.5、建立INBOX文件夹

添加用户之后,需要在用户目录下建立INBOX文件夹,否则后面在收信的时候会报错
[root@linux03 ~]# cd /home/zhangsan/
[root@linux03 zhangsan]# mkdir -p /home/mail/.imap/INBOX
[root@linux03 zhangsan]# cd /home/lisi/
[root@linux03 lisi]# mkdir -p /home/mail/.imap/INBOX
为了使新创建的用户可以自动创建这个目录,可以修改/etc/skel/.bash_profile文件如下
[root@linux03 ~]# vim /etc/skel/.bash_profile

fi
if [ ! -d ~/mail/.imap/INBOX ]; then
mkdir -p ~/mail/.imap/INBOX
fi
修改完成后,使用source使其生效
[root@linux03 ~]# source /etc/skel/.bash_profile

7.6、开启SASL认证

这是一种用来扩充C/S模式验证能力的机制。在Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。追加认证到postfix主配置文件中
[root@linux03 ~]# vim /etc/postfix/main.cf
#在末行增加如下配置
#启用SASL认证
smtpd_sasl_auth_enable = yes
#禁止匿名用户
smtpd_sasl_security_options = noanonymous
#启用SASL对客户端进行认证
broken_sasl_auth_clients = yes
#定义收件人限定
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

7.7、重启服务

 
[root@linux03 ~]# systemctl restart saslauthd.service
Failed to restart saslauthd.service: Unit not found.
报错了,没有安装sasl服务
yum install cyrus-sasl-plain
[root@linux03 ~]# vim /etc/sasl2/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login
log_level:3

[root@linux03 ~]# vim /etc/sysconfig/saslauthd
MECH=shadow

7.9、配置named文件

[root@linux03 ~]# vim /var/named/test.com.zone

$TTL 1D
@       IN SOA dns.test.com. root.test.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.test.com.
dns     A       10.20.1.2
dhcp    CNAME   dns.test.com.
linux03 A       10.10.1.2
linux02 A       10.10.1.1
linux01 A       10.211.55.201
Win10   A       10.211.55.92
mail    A       10.10.1.2
        MX  5   test.com.
@       A       10.10.1.2
        
[root@linux03 ~]# systemctl restart named

7.10、本地测试

yum -y install xinetd* telnet*
[root@linux03 ~]# su - lisi
上一次登录:五 8月  5 23:11:54 CST 2022pts/0 上
[lisi@linux03 ~]$ telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mail.test.com ESMTP Postfix
main from:lisi@mail.test.com
502 5.5.2 Error: command not recognized
^[[A^[[A
502 5.5.2 Error: command not recognized
mail from:lisi@test.com
250 2.1.0 Ok
rcpt to:zhangsan@test.com
250 2.1.5 Ok
data
354 End data with .
hello
.
250 2.0.0 Ok: queued as 597C7126722
quit
221 2.0.0 Bye
Connection closed by foreign host.
 

8、Windows客户端测试

8.1、通过DHCP获取IP、DNS

C:\Users\luna>ipconfig /renew

Windows IP 配置


以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . : test.com
   IPv6 地址 . . . . . . . . . . . . : fdb2:2c26:f4e4:2:8da6:984c:4256:e650
   临时 IPv6 地址. . . . . . . . . . : fdb2:2c26:f4e4:2:111c:6a0a:219d:9d83
   本地链接 IPv6 地址. . . . . . . . : fe80::8da6:984c:4256:e650%8
   IPv4 地址 . . . . . . . . . . . . : 10.20.1.92
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 10.20.1.2
C:\Users\luna>ipconfig /all

Windows IP 配置

   主机名  . . . . . . . . . . . . . : 5E53
   主 DNS 后缀 . . . . . . . . . . . :
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否
   DNS 后缀搜索列表  . . . . . . . . : test.com

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . : test.com
   描述. . . . . . . . . . . . . . . : Parallels VirtIO Ethernet Adapter
   物理地址. . . . . . . . . . . . . : 00-1C-42-AC-9A-2E
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是
   IPv6 地址 . . . . . . . . . . . . : fdb2:2c26:f4e4:2:8da6:984c:4256:e650(首选)
   临时 IPv6 地址. . . . . . . . . . : fdb2:2c26:f4e4:2:111c:6a0a:219d:9d83(首选)
   本地链接 IPv6 地址. . . . . . . . : fe80::8da6:984c:4256:e650%8(首选)
   IPv4 地址 . . . . . . . . . . . . : 10.20.1.92(首选)
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   获得租约的时间  . . . . . . . . . : 2022年8月5日 22:52:30
   租约过期的时间  . . . . . . . . . : 2022年8月5日 23:02:29
   默认网关. . . . . . . . . . . . . : 10.20.1.2
   DHCP 服务器 . . . . . . . . . . . : 10.20.1.2
   DHCPv6 IAID . . . . . . . . . . . : 83893314
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-2A-7E-E6-1F-00-1C-42-AC-9A-2E
   DNS 服务器  . . . . . . . . . . . : 10.20.1.2
                                       10.10.1.1
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用
C:\Users\luna>ping mail.test.com

正在 Ping mail.test.com [10.10.1.2] 具有 32 字节的数据:
来自 10.10.1.2 的回复: 字节=32 时间<1ms TTL=64
来自 10.10.1.2 的回复: 字节=32 时间<1ms TTL=64
来自 10.10.1.2 的回复: 字节=32 时间=1ms TTL=64
来自 10.10.1.2 的回复: 字节=32 时间<1ms TTL=64

10.10.1.2 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 1ms,平均 = 0ms

8.2、安装Foxmail添加账号

报错:-ERR [SYS/PERM] Permission denied 解决方案:
[root@linux03 ~]# chmod 0600 /var/spool/mail/*
 
查看刚刚的测试邮件

8.3、发件测试

8.4、添加lisi用户收件测试

 
  • 0