ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux postfix部署邮箱服务

2020-03-23 12:51:25  阅读:372  来源: 互联网

标签:www postfix 设定 etc linux 邮箱 MTA root


一. 邮箱部署前的知识

1. Mail Server与DNS关系

  • Mail Server 与MX和A的作用
    发送邮件的时候,目的地址使用“账号@域名”的方式发送邮件,因此必须通过DNS解析出来@后边的域名,然后才能投递到对方的邮件服务器。
    MX 代表的是 Mail eXchanger, 当一封邮件要传送出去时,邮件主机会先分析那封邮件的“目标域名的 DNS ”,先取得 MX 标志 (注意,MX 标志可能会有多部主机) 然后以最优先 MX 解析为目的将邮件发送出去,如果所有MX解析的目的接收邮件失败,则尝试使用A解析为目的发送邮件,所有都失败才提示邮件退回。
  • Mail Server与DNS反解的作用
    当邮件服务器收到邮件的时候,首先会对源IP进行反解,如果反解解析不出来注册域名,则列入垃圾邮件。

2. 邮件传输所需要的组件

  • MTA 即Mail Transfer Agent,是发送和转递邮件的服务器,发送和转递使用SMTP协议。
  • MRA 即Mail Retrieval Agent,是接收邮件的服务器,接收邮件使用的协议POP3或者IMAP。
  • MDA 即Mail Delivery Agent, MDA 是挂在 MTA 底下的一个小程序,分析由 MTA 所收到的信件表头或内容等数据,过滤垃圾邮件,实现自动回复。
  • Mail Box 就是某个账号专用的信件收受的文件,Linux 系统默认的信箱都是放在 /var/spool/mail/使用者账号 中。
  • MUA 即Mail User Agent,你可以登录到邮件服务器去直接发送邮件,也可以使用MUA去发送接收邮件,常见的MUA有Outlook、Foxmail等。

3. Relay 与认证机制的重要性

当你的 MTA 由于设定不良的关系导致具有 Open Relay 的状况,加上你的 MTA 确实是连上因特网时, 由于因特网上面用 port scan 软件的闲人太多,你的 MTA 具有 Open Relay 的功能这件事情, 将会在短时间内就被很多人察觉,此时那些不法的广告信、色情垃圾信业者将会利用你的这部 Open Relay MTA 发送他们的广告,所以应该关闭open relay功能,授权开放relay功能:

  • 规定某一个特定客户端的 IP 或网段,例如规定内部 LAN 的 192.168.1.0/24 可使用 Relay;
  • 若客户端的 IP 不固定时 (例如拨接取得的非固定 IP) 可以利用认证机制来处理。
  • 将 MUA 架设在 MTA 上面,例如 OpenWebMail 之类的 web 接口的 MUA 功能。

二. PostFix基础设定MTA服务器

1. PostFix软件结构介绍

  • /etc/postfix/main.cf
    这就是主要的 postfix 配置文件,几乎所有的设定参数都是在这个档案内规范的! 这个档案预设就是一个完整的说明档了,你可以参考这个档案的内容就设定好属于你的 postfix MTA ! 只要修改过这个档案,记得要重新启动 postfix !
  • /etc/postfix/master.cf 了解即可不需配置
    主要规定了 postfix 每个程序的运作参数,也是很重要的一个配置文件。不过这个档案预设已经很 OK 了,通常不需要更改他。
  • /etc/postfix/access(利用 postmap 处理)
    可以设定开放 Relay 或拒绝联机的来源或目标地址等信息的外部配置文件,不过这个档案要生效还需要在 /etc/postfix/main.cf 启动这个档案的用途才行。且设定完毕后需要以 postmap 来处理成为数据库档案呢!
  • /etc/aliases(利用 postalias 或 newaliases 均可)
    做为邮件别名的用途,也可以作为邮件群组的设定!
  • /usr/sbin/postconf(查阅 postfix 的设定数据)
    这个指令可以列出目前你的 postfix 的详细设定数据,包括系统默认值也会被列出来, 所以数据量相当的庞大!如果你在 main.cf 里面曾经修改过某些预设参数的话,想要仅列出非默认值的设定数据, 则可以使用『postconf -n』这个选项即可。
  • /usr/sbin/postfix (主要的 daemon 指令)
    [root@www ~]# postfix check <==检查 postfix 相关的档案、权限等是否正确!
    [root@www ~]# postfix start <==开始 postfix 的执行
    [root@www ~]# postfix stop <==关闭 postfix
    [root@www ~]# postfix flush <==强制将目前正在邮件队列的邮件寄出!
    [root@www ~]# postfix reload <==重新读入配置文件,也就是 /etc/postfix/main.cf
  • /usr/sbin/postalias
    设定别名数据库的指令,因为 MTA 读取数据库格式的档案效能较佳,所以我们都会将 ASCII 格式的档案重建为数据库。 在 postfix 当中,这个指令主要在转换 /etc/aliases 成为 /etc/aliases.db 啰!用法为:
    [root@www ~]# postalias hash:/etc/aliases
    hash 为一种数据库的格式,然后那个 /etc/aliases.db 就会自动被更新
  • /usr/sbin/postcat
    主要用在检查放在 queue (队列) 当中的信件内容。由于队列当中的信件内容是给 MTA 看的, 所以格式并不是一般我们人类看的懂的文字数据。所以这个时候你得要用 postcat 才可以看出该信件的内容。 在 /var/spool/postfix 内有相当多的目录,假设内有一个文件名为 /deferred/abcfile , 那你可以利用底下的方式来查询该档案的内容
    [root@www ~]# postcat /var/spool/postfix/deferred/abcfile
  • /usr/sbin/postmap
    这个指令的用法与 postalias 类似,不过他主要在转换 access 这个档案的数据库
    [root@www ~]# postmap hash:/etc/postfix/access
  • /usr/sbin/postqueue
    类似 mailq 的输出结果,例如你可以输入『postqueue -p』看看就知道了。

2. PostFix主配置文件使用语法

  • 『 # 』符号是批注的意思;
  • 所有设定值以类似『变量』的设定方法来处理,例如 myhostname = www.centos.jet,请注意等号的两边要给予空格符, 且第一个字符不可以是空白,亦即『my..』要由行首写起;
  • 可以使用『 $ 』来延伸使用变量设定,例如 myorigin = $myhostname,会等于 myorigin = www.centos.jet;
  • 如果该变量支持两个以上的数据,则使用空格符来分隔,不过建议使用逗号加空格符『, 』来处理。 例如: mydestination = $myhostname, $mydomain, linux.centos.jet,意指 mydestination 支持三个数据内容之意。
  • 可使用多行来表示同一个设定值,只要在第一行最后有逗号,且第二行开头为空格符, 即可将数据延伸到第二行继续书写 (所以刚刚第二点才说,开头不能留白!);
  • 若重复设定某一项目,则以较晚出现的设定值为准!

3. 让 Postfix 作为MTA的配置介绍

  • myhostname:设定主机名,需使用 FQDN 喔
    这个项目在于设定你的主机名,且这个设定值会被后续很多其他的参数所引用,所以必须要设定正确才行。 你应该要设定成为完整的主机名。在这个练习当中,应该设定为: myhostname = www.centos.jet 才对。 除了这个设定值之外,还有一个 mydomain 的设定项目,这个项目默认会取 $myhostname 第一个『.』之后的名称。 举例来说上头设定完毕后,预设的 mydomain 就是 centos.jet !你也可以自行设定他。

  • myorigin :发信时所显示的『发信源主机』项目
    这个项目在设定『邮件头上面的 mail from 的那个地址』, 也就是代表本 MTA 传出去的信件将以此设定值为准!如果你在本机寄信时忘记加上 Mail from 字样的话, 那么就以此值为准了。默认这个项目以 $myhostname 为主的,例如: myorigin = $myhostname

  • inet_interfaces :设定 postfix 的监听接口 (极重要)
    在预设的情况下你的 Postfix 只会监听本机接口的 lo (127.0.0.1) 而已,如果你想要监听整个 Internet 的话, 请开放成为对外的接口,或者是开放给全部的接口,常见的设定方法为: inet_interfaces = all 才对! 由于如果有重复设定项目时,会以最晚出现的设定值为准,所以最好只保留一组 inet_interfaces 的设定!

  • inet_protocols :设定 postfix 的监听 IP 协议
    预设 CentOS 的 postfix 会去同时监听 IPv4, IPv6 两个版本的 IP,如果你的网络环境里面仅有 IPv4 时,那可以直接指定 inet_protocols = ipv4 就会避免看到 :::1 之类的 IP 出现呦!

  • mydestination :设定『能够收信的主机名』 (极重要)

    • 这个设定项目很重要!因为我们的主机有非常多的名字,那么对方填写的 mail to 到底要写哪个主机名字我们才能将该信件收下? 就是在这里规范的!也就是说,你的许多主机名当中,仅有写入这个设定值的名称才能作为 email 的主机地址。所以写法为: mydestination = $myhostname,$mydomain
    • 如果你想要将此设定值移动到外部档案,那可以使用类似底下的作法: mydestination = /etc/postfix/local-host-names ,然后在 local-host-names 里面将可收信的主机名写入即可。一般来说,不建议你额外建立 local-host-names 这个档案啦, 直接写入 main.cf 即可说!特别留意的是,如果你的 DNS 里头的设定有 MX 标志的话,那么请将 MX 指向的那个主机名一定要写在这个 mydestination 内, 否则很容易出现错误讯息喔!一般来说,使用者最常发生错误的地方就在这个设定里头呢!
  • mynetworks_style :设定『信任网段』的一项指标
    这个设定值在规定『与主机在同一个网段的可信任客户端』的意思!保持默认,因为咱们可以从mynetworks设置。

  • mynetworks :规定信任的客户端 (极重要)
    你的 MTA 能不能帮忙进行 Relay 与这个设定值最有关系!举例来说,我要开放本机与内部网域的 IP 时,就可以这样进行设定: mynetworks = 127.0.0.0/8, 192.168.100.0/24。如果你想要以 /etc/postfix/access 这个档案来控制 relay 的用户时,建议你将上述的数据改写成这样: mynetworks = 127.0.0.0/8, 192.168.100.0/24, hash:/etc/postfix/access 然后你只要再建立 access 之后重整成数据库后,嘿嘿!就能够设定 Relay 的用户!

  • relay_domains :规范可以帮忙 relay 的下一部 MTA 主机地址

    • 相对于 mynetworks 是针对『信任的客户端』而设定的,这个 relay_domains 则可以视为『针对下游 MTA 服务器』而设定的。举例来说,如果你这部主机是 www.niki.centos.jet 的 MX 主机时, 那你就得要在 relay_domains 设定针对整个 niki.centos.jet 这个领域的目标信件进行转递才行。 在预设的情况下,这个设定值是 $mydestination 。
    • 你必需要注意的『Postfix 预设并不会转递 MX 主机的信件』,意思就是说:如果你有两部主机,一部是上游的 MTAup ,一部是下游的 MTAdown ,而 MTAdown 规范的 MX 主机是 MTAup,由于 DNS 的 MX 设定值与信件传递方向,我们知道任何想要寄给 MTAdown 主机的信件, 都会先经过 MTAup 来转递才行!此时如果那部 MTAup 没有开启帮 MTAdown 进行 relay 的权限时, 那么任何传给 MTAdown 的信件将『全部都被 MTAup 所退回』!从此 MTAdown 就无法收到任何信件了。
    • 上一段的说明请您特别再想一想,因为如果你在大公司服务而且你的公司上、下游均有 mail server 时, 并且也有设定 MX 的状况下,嘿嘿!这个 relay_domains 就很重要啦!上游的 MTA 主机必需要启动这个设定。 一般来说除非你是某部 MTA 主机的 MX 源头,否则这个设定项目可以忽略不设定他。 而如果你想要帮你的客户端转递信件到某部特定的 MTA 主机时,这个设定项目也是可以设定的。 默认请您保留默认值即可。
  • alias_maps :设定邮件别名
    就是设定邮件别名的设定项目,只要指定到正确的档案去即可,这个设定值可以保留默认值。

4. MTA收到一份信的动作

5. 作为MTA配置过程举例

#配置前请确保iptables规则配置妥当,selinux已经关闭,如果是centos7,firewall也要关闭。
iptables -A INPUT -p TCP -i $EXTIF --dport  25  --sport 1024:65534 -j ACCEPT

[root@www ~]# vim /etc/postfix/main.cf
myhostname = www.centos.jet 
myorigin = $myhostname 
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname,$mydomain
mynetworks = 127.0.0.0/8, 192.168.100.0/24, hash:/etc/postfix/access
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# 其他的设定值就先保留默认值即可!

# 生成别名数据库文件
[root@www ~]# postmap hash:/etc/postfix/access
[root@www ~]# postalias hash:/etc/aliases
# 检查配置文件的语法是否有错误
[root@www ~]# /etc/init.d/postfix check   <==没有信息输出,表示没有问题。

# 启动与观察 port number
[root@www ~]# /etc/init.d/postfix restart

假设要增加MTA的过滤机制

[root@www ~]# vim /etc/postfix/access
10.1.30.50		OK
.edu.com			OK
av.com			REJECT
192.168.2.  		REJECT
# OK 表示可接受,而 REJECT 则表示拒绝。

[root@www ~]# postmap hash:/etc/postfix/access
[root@www ~]# ls -l /etc/postfix/access*
#不必重新启动 postfix,只要重新生成数据库文件即可生效。

关于别名的配置(root权限配置)

#作用是将发给这些系统账号的邮件发一份给root。
[root@www ~]# vim /etc/aliases
mailer-daemon:  postmaster
postmaster:     root
bin:            root
daemon:         root
#左边是系统账号,也是别名设置位置,右边是root账号,也是实际接收邮件的账号。
#假如你的 MTA 内有一个实际的账号名称为 dmtsai ,这个使用者还想要使用 dermintsai 这个名称来收他的信件, 那么你可以这样做:
[root@www ~]# vim /etc/aliases
dermintsai:     dmtsai
# 左边是你额外所设定的,右边则是实际接收这封信的账号!

[root@www ~]# postalias hash:/etc/aliases
# 信件会传给 root 与 dmtsai 这两个账号!
[root@www ~]# vim /etc/aliases
root:		root,dmtsai  
[root@www ~]# postalias hash:/etc/aliases
#创建邮件组
[root@www ~]# vim /etc/aliases
student2011:	std001,std002,std003,std004...
[root@www ~]# postalias hash:/etc/aliases
#邮件别名除了填写自己主机上面的实体用户之外,其实你可以填写外部主机的 email !
# 例如你要将本机的 dermintsai 那个不存在的用户的信件除了传给 dmtsai 之外,还要外传到 dmtsai@mail.niki.centos.jet 时,可以这样做:
[root@www ~]# vim /etc/aliases
dermintasi:	dmtsai,dmtsai@mail.niki.centos.jet
[root@www ~]# postalias hash:/etc/aliases

个人化的邮件转递(普通用户): ~/.forward

#普通用户将自己的邮件同时收一份到jet和dmtsai@mail.niki.centos.jet下。
[dmtsai@www ~]$ vim .forward
# 注意!我现在的身份现在是 dmtsai 这个一般身份,而且在他的家目录下!
dmtsai
jet
dmtsai@mail.niki.centos.jet
[dmtsai@www ~]$ chmod 644 .forward
#该档案所在用户家目录权限,其 group、other 不可以有写入权限。
#.forward 档案权限,其 group、other 不可以有写入权限。

6. MTA的维护命令

[root@www ~]# postqueue -p   #查看MTA邮件队列
[root@www ~]# cd /var/spool/postfix/maildrop 
[root@www maildrop]# postcat 5CFBB21DB  <==这个档名就是 Queue ID
[root@www ~]# /etc/init.d/postfix restart
[root@www ~]# postfix flush

三. PostFix MRA服务器设定

1. 未加密的MRA设定

[root@www ~]# yum install dovecot
[root@www ~]# vim /etc/dovecot/dovecot.conf
# 找到底下这一行,大约是在第 25 行左右的地方,复制新增一行内容如下:
#protocols = imap pop3 lmtp
protocols = imap pop3
[root@www ~]# vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no   <==将第 6 行改成这样!
[root@www ~]# /etc/init.d/dovecot start
[root@www ~]# chkconfig dovecot on
[root@www ~]# netstat -tlnp | grep dovecot
Proto Recv-Q Send-Q Local Address   Foreign Address   State    PID/Program name
tcp        0      0 :::110          :::*              LISTEN   14343/dovecot
tcp        0      0 :::143          :::*              LISTEN   14343/dovecot

2. 加密的MRA设定

# 1. 建立凭证:到系统提供的 /etc/pki/tls/certs/ 目录下建立所需要的 pem 凭证档:
[root@www ~]# cd /etc/pki/tls/certs/
[root@www certs]# make vbirddovecot.pem
....(前面省略)....
Country Name (2 letter code) [XX]:China
State or Province Name (full name) []:China
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:mail.centos.jet
Email Address []:wang_zengyi@126.com

# 2. 因为担心 SELinux 的问题,所以请关闭selinux,并配置iptables规则
iptables -A INPUT -p TCP -i $EXTIF --dport 993  --sport 1024:65534 -j ACCEPT
iptables -A INPUT -p TCP -i $EXTIF --dport 995  --sport 1024:65534 -j ACCEPT

# 3. 开始处理 dovecot.conf,只要 pop3s, imaps 不要明码传输的咯!
[root@www certs]# vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes  <==第 9 行改成这样!取消批注!
[root@www certs]# vim /etc/dovecot/conf.d/10-ssl.conf
ssl = required                                <==第 6 行改成这样
ssl_cert = </etc/pki/dovecot/vbirddovecot.pem <==12, 13 行变这样
ssl_key =  </etc/pki/dovecot/vbirddovecot.pem

[root@www certs]# vim /etc/dovecot/conf.d/10-master.conf
  inet_listener imap {
    port = 0     <== 15 行改成这样
  }
  inet_listener pop3 {
    port = 0     <== 36 行改成这样
  }

# 4. 处理额外的 mail_location 设定值!很重要!否则网络收信会失败:
[root@www certs]# vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u <==第 30 行改这样

# 5. 重新启动 dovecot 并且观察 port 的变化:
[root@www certs]# /etc/init.d/dovecot restart
[root@www certs]# netstat -tlnp | grep dovecot
Proto Recv-Q Send-Q Local Address  Foreign Address   State    PID/Program name
tcp        0      0 :::993         :::*              LISTEN   14527/dovecot
tcp        0      0 :::995         :::*              LISTEN   14527/dovecot

标签:www,postfix,设定,etc,linux,邮箱,MTA,root
来源: https://www.cnblogs.com/wangzengyi/p/12551520.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有