每日一记:邮件服务器:Postfix

邮件服务器:Postfix
mail server与DNS的关系:
1、架设mail server 必须要有合法的主机名
2、DNS的反解也很重要
要架设一部mail server,务必向上层ISP申请IP反解的对应,不要使用预设的反解主机名,否则会是你的邮件服务器发出的信件被视为垃圾信件
不申请IP的反解,则可利用relayhost或者是smarthost来处理邮件传递的问题,也涉及到上层ISP的问题
3、需要DNS的MX及A标准:先传送给带MAX标志的邮件主机,如果没有再传给带A标志的主机;MAX标志的优先级是由小到大

邮件传输所需要的组件(MTA,MUA,MDA)以及相关协议:
MUA(Mail User Agent): 邮件使用者代理人,主要功能就是收受邮件主机的电子邮件,以及提供用户浏览与编写邮件的功能;常见的有Mozilla退出的Thunderbird自由软件,或者是Linux桌面KDE常见的Kmail或windows常见的outlook express、Foxmail等

MTA(Mail Transfer Agent):邮件传送代理人,主要功能:收受信件,使用简单邮件传送协议(SMTP)端口是25 ; 转递(Relay)信件 ;一般提到的Mail Server就是MTA;主要软件包括:sendmail、postfix、qmail等等

MDA(Mail Delivery Agent): 邮件递送代理人,是挂在MTA下的一个小程序,主要功能:分析由MTA所收到的信件表头或内容等数据,来决定这封邮件的去向;MTA的信件转递功能,其实是由MDA达成的
MDA有分析与过滤邮件的功能:
1、过滤垃圾信件 2、自动回复
各主要的MTA程序都有自己的MDA功能,例如 procmail 就是一个过滤的好帮手,另外Mailscanner+Spamassassion也是可以使用的一些MDA

Mailbox :电子邮件信箱,就是某个账号专用的信件收受档案;Linux系统默认的信箱都是放在/var/spool/mail/使用者账号 中

使用者收信时服务器端所提供的相关协议:MRA
MRA(Mail Retrieval Agent): 使用者可以透过MRA服务器提供的邮政服务协议(Post Office Protocol,POP端口是110)来收下自己的信件,也可以透过IMAP(Internet Message Access Protocol)协议将自己的信件保留在邮件主机上面,并进一步建立邮件数据匣等进阶工作
POP接受邮件后,会删除服务器MTA上的邮件记录

IMAP协议可以将mailbox的数据转存到你主机上的家目录,以及/home/账号/ 那个目录下,且接受后不删除原本在MTA上的邮件记录,且支持信件分类管理
使用IMAP时,建议用户的目录最好能加以限制,利用quota来管理用户的硬盘权限等,防止硬盘爆满

POP3s、IMAPs都是透过SSL加密的,smtps也有,不过没人用(因为要所有的与你的MTA沟通的对方MTA都要改变使用smtps,工程太浩大)

Relay与认证机制的重要性:
目前所有的distribution都将MTA预设启动为仅监听内部循环接口(lo),也将Open Relay的功能取消了

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

认证机制常见的: SMTP邮件认证机制、SMTP after POP

电子邮件的数据内容:标头(header)以及内容(body)两部分

MTA服务器:Postfix基础设定
预设已经安装了postfix,直接使用即可

postfix的主要配置文件:
/etc/postfix/main.cf :主要的postfix配置文件,设置这个就可以设定好postfix MTA
/etc/postfix/master.cf : 主要规定了postfix每个程序的运作参数;预设就很好了,不需要更改
/etc/postfix/access (利用postmap处理):可以设定开放Relay或拒绝联机的来源或目标地址等信息的外部配置文件,这个档案要生效还需要在/etc/postfix/main.cf启动这个档案的用途才行,且设定完毕后需要以postmap来处理成为数据库档案
/etc/aliases (利用postalias或newaliases) :做为邮件别名的用途,也可作为邮件群组的设定

postfix常见的执行档(就是指令):
/usr/sbin/postconf (查阅postfix的设定数据): 这个指令可列出目前postfix的详细设定数据,包括系统默认值也会被列出来;使用 postconf -n 指令列出非默认值的设定数据
/usr/sbin/postfix (主要的daemon指令):postfix的主要执行档,使用其来启动或重新读取配置文件
例如: postfix check 检查postfix相关的档案、权限等是否正确
postfix start 开始postfix的执行
postfix stop 关闭postfix
postfix flush 强制将目前正在邮件队列的邮件寄出
postfix reload 重新读入配置文件,也就是 /etc/postfix/main.cf
更多 postfix 指令用法,使用man postfix 查询

/usr/sbin/postalias :设定别名数据库的指令,这个指令主要在转换/etc/aliases成为/etc/aliases.db
例如: postalias hash:/etc/aliases ; hash为一种数据库格式

/usr/sbin/postcat :主要用在检查放在queue(队列)当中的信件内容
例如:利用postcat查看/var/spool/postfix内文件名为/deferred/abcfile档案的内容
postcat /var/spool/postfix/deferred/abcfile

/usr/sbin/postmap : 这个指令的用法与postalias类似,不过其主要在转换access这个档案的数据库
例如:postmap hash:/etc/postfix/access

/usr/sbin/postqueue : 类似mailq的输出结果,例如输入 postqueue -p

/etc/postfix/main.cf配置文件设定注意项目:

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

要时postfix可收发信件,必须启动的设定数据如下:
myhostname :设定主机名,需使用FQDN
myorigin :发信时所显示的[发信源主机]项目,例如:myorigin = $myhostname
inet_interfaces :设定postfix的监听接口,例如: inet_interfaces = all
inet_protocols :设定postfix的监听IP协议(IPv4和IPv6),例如: inet_protocols = ipv4
mydestination :设定[能够收信的主机名]
mynetworks_style :设定[信任网域]的一项指标;建议仅设定host即可
mynetworks :规定信任的客户端;例如:mynetworks = 127.0.0.0/8,192.168.100.0/24
relay_domains :规范可以帮忙relay的下一部MTA主机地址,保留默认值即可
alias_maps :设定邮件别名;保留默认值即可

设定邮件主机权限与过滤机制: /etc/postfix/access
利用access这个档案来额外管理我们的信件过滤,基本的access语法为:
规范的范围或规则 Postfix的动作 (范例如下)
IP/部分 IP/主机名/Email等 OK/REJECT
例如:让120.114.141.60还有.edu.tw 可以使用这部MTA来转递信件,且不许av.com以及192.168.2.0/24这个网域的使用时
vim /etc/postfxi/access
120.114.141.60 OK
.edu.tw OK
av.com REJECT
192.168.2. REJECT
#OK表示可接受,而REJECT则表示拒绝
postmap hash:/etc/postfix/access

邮件别名配置文件: /etc/aliases, 只有root可以修改这个档案
例如: vim /etc/aliases
dermintsai: dmtsai
#左边是额外所设定的(别名),右边则是实际接收这封信的账号(实际存在的账号)
postalias hash:/etc/aliases

实际应用一:让一般账号(dmatsai)可接收root的信件
vim /etc/aliases
root: root,dmtsai <===建议采用这种方式
#信件会传给root与dmtsai这两个账号
postalias hash:/etc/aliases <==表示加载/etc/aliases文件为数据库文件

实际应用二:发送群组寄信功能
vim /etc/aliases
student2011: std001,std002,std003,std004...
将发往不存在的邮件账号的信分发给存在的各个账号里头去,实现信件的群发功能
如果在别名档案里填写外部主机的email,则可以实现转发到外部邮件主机去
postalias hash:/etc/aliases

个人化的邮件传递: ~/.forward 该档案在一般使用者的家目录下
例如: dmtsai账号所接收到的信件除了自己要保留一份之外,还要传给本机上的pshaobr/>以及[email protected]
vim .forward <==建立这个档案,切换到一般用户的家目录下
dmtsai 一行一个账号(或email)
br/>pshao
[email protected]
chmod 644 .forward <==修改这个档案的权限,很重要
查看信件队列信息: postqueue , mailq
检查队列内容可以使用 mailq ,也可以使用postqueue -p :
例如: postquequ -p

使用postcat读出原始信件的内容: postcat Queue ID
MTA未发出的原始信件在 /var/spool/postfix/maildrop 文件夹内
例如: postcat 5CFBB21DB <==5CFBB21DB就是队列的编号Queue ID

让postfix立刻尝试将这些在队列当中的信件寄出去: postfix flush 指令或重启postfix

防火墙设置:修改iptables放行port 25即可

MRA服务器:dovecot 设定
收信需要用到的协议 pop3以及 imap ,就是所谓的MRA服务器
安装 dovecot 软件: yum install dovecot
配置文件是: /etc/dovecot/dovecot.conf
设定启动pop3、imap : vim /etc/dovecot/dovecot.conf
#大约在第25行左右,复制新增一行内容如下:
#protocols = imap pop3 lmtp
protocols = imap pop3
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no <==将第8行改成这样
之后,可以启动dovecot了,使用明码传输

加密的POP3s/IMAPs设定: 都是透过openssl这个软件提供的SSL加密机制来进行数据的加密传输
1、建立凭证: 到系统提供的/etc/pki/tls/certs/目录下建立所需要的pem凭证档
cd /etc/pki/tls/certs/
make vbirddovecot.pem 然后按提示一步一步输入信息即可
2、为防止SELinux问题,建议将pem档案放置到系统默认的目录去最好
mv vbirddovecot.pem ../../dovecot/
restorecon -Rv ../../dovecot/
3、开始处理dovecot.conf,只要pop3s,imaps不要明码传输的
vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes <==第10行改成这样,取消批注即可
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = required <===第8行改成这样
ssl_cert = </etc/pki/dovecot/vbirddovecot.pem <==第14,15行变这样
ssl_key = </etc/pki/dovecot/vbirddovecot.pem
vim /etc/dovecot/conf.d/10-master.conf
inet_listener imap {
port = 0 <第19行改成这样
}
inet_listener pop3 {
port = 0 <==40行改成这样
4、处理额外的mail_location 设定值!很重要,否则网络收信会失败:
vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u <==第25行该这样
5、重新启动dovecot 并且观察port的变化:
systemctl restart dovecot
netstat -tlnp | grep dovecot
最终看到的993是imaps而995则是pop3s,收信的时候,输入的账号密码就不怕被窃听了
防火墙设置开放端口即可

MUA软件:客户端的收发信软件
mail指令是有mailx这个软件提供的(默认已经安装),即使port 25没有启动,还是可以使用mail,只是该邮件就只会被放到队列,而无法寄出去

mail的用法: mail [email address]
例如:mail [email protected]
Subject: Just test <==这里填写信件标题
This is a test email. <==底下为信件的内容
bye bye !
. <==小数点,代表结束输入的意思

利用已经处理完毕的[纯文本档]寄出信件:利用标准输入
例如:将家目录的 .bashrc 寄给别人,可这样做:
mail -s 'My bashrc' dmtsai < ~/.bashrc

查阅接收的信件: 还是mail 指令,直接输入mail,可输入?查看可使用的指令
读信:直接按Enter或输入数字后enter

符号代表目前mail所在邮件的位置,输入Enter即可看到该信件的内容
& 后的光标位置输入号码,可看到该号码信件的内容
如果持续按Enter,则会自 > 符号所在的邮件逐次向后读取每封信件内容
显示标题: 直接输入h或输入 h数字
例如:要看90封左右的信件标题,就输入 h90 即可
回复邮件: 直接输入 R
删除邮件: 输入 d数字 ,例如: d1 删除第一封邮件; d10-50 删除第10-50封邮件
如果有删除邮件,离开mail box时,要使用 q 才行
储存邮件到档案: 输入 s 数字 文件名 ;
例如: s 10 text.txt 将第10封邮件内容存成text.txt这个档案
离开mail : 输入q 或 x ;输入 x 或exit可以在不更动mail box的情况下离开mail程序;
输入q代表保存更改离开mail box
更多参数在mail指令下,输入help或?即可
读取储存到档案的信件的内容: mail -f 存储成的文件名 ;例如: mail -f ~/text.txt
以[附件夹带]的方式寄信:
利用 uuencode 指令,这个指令属于sharutils软件,使用yum 安装即可
指令: [利用 uuencode 编码] | [利用 mail 寄出去]
uuencode [实际档案] [信件中的档名] | mail -s '标题' email
例如: 将/etc/hosts以附件夹带的方式寄给dmtsai
uuencode /etc/hosts myhosts | mail -s 'test encode' dmtsai
收下夹带附件的信件,透过编译器来解码,先将档案存下来:
s 11 test_encode <===存下带附件的信件,在mail里输入这个指令
uudecode test_encode -o decode
加密档 输出档
ll code

Linux mutt: 除了可仿真mail指令,还能够透过pop3/imap之类的协议去读取外部的信件
使用yum安装mutt : yum install mutt
mutt的基本语法:
mutt [-a 附加档] [-i 内文档] [-b 秘密副本] [-c 一般副本] [-s 信件标题] email地址
选项与参数:
-a 附加档:后面就是想要传送给朋友的档案,是附加档案,不是信件内容
-i 内文档:就是信件的内文部分,先编写成为档案而已;
-b 秘密副本:原收件者不知道这封信还会寄给后面的那个秘密副本收件者;
-c 一般副本:原收件者会看到这封信还有传给哪位收件者;
-s 信件标题:就是这封信的表头
emai地址:就是原收件者的email
例如: mutt -s '一封测试信' [email protected]
第一次会提示是否建立 /root/Mail,输入y
输入两次Enter后进入vim界面编辑信件内容
编辑信件内容完毕后,保存退出vim,按下y键寄出信件;q键中断;t:To c:CC s:Subj a:附加档案 d:叙述 ?:求助 <====按下y寄出
mutt会呼叫vim去编辑信件内容
使用mutt来附加档案时的注意事项:
-a filename : 这个选项必须在指令的最后面,否则会失败
在文件名与email地址之间需要加上两个连续减号 -- 才行

以mutt来读不同通讯协议的信箱:
语法: mutt [-f 信箱位置]
选项与参数:
-f 信箱位置 :如果是imaps的信箱,可以这样: -f imaps://服务器的IP
例如:直接用dmtsai的身份读取本机的信箱内容
输入 mutt 即可查看信件,按指令内的指示查看

用root身份去收dmtsai的imaps信件(以文本模式收取网络邮件信箱):
chmod a+x ~ <==修改权限,让mail这个群组能够使用dmtsai的家目录
mutt -f imaps://www.centos.pshao <== www.centos.pshao是邮件服务器名
进入后会显示相关信息,按最底下的提示输入参数,r或o或a 即进入要接受的账号,输入密码即可看到相关账号的信箱内容
注意:如果用户家目录不在正规目录,就会出现SELinux错误,此时需要重新修订SELinu安全本文类型(更改为和默认家目录一样的安全本文即可)

imaps协议会同步服务器信箱,pop3接收后就删除服务器的信件
Thunderbird : 免费的自由软件,接收邮件的软件

postfix设定黑名单检验:见书签 《postfix设置黑名单检验》

非信任来源的Relay :开放SMTP身份认证
适用于IP不固定的网络
SMTP认证就是在使用MTA的port25 时,得要输入账号密码才能够使用的意思
CentOS已经提供内建的认证模块Cyrus SASL让SMTP支持身份认证
在SMTP方面,Cyrus主要提供了saslauthd这个服务来进行账号密码的对比动作
Centos默认已经安装了这些软件:cyrus-sasl,cyrus-sasl-plain,cyrus-sasl-md5,saslauthd

查看saslauthd支持哪些密码管理机制: saslauthd -v
saslauthd的配置文件: /etc/sysconfig/saslauthd
1、告知Cyrus使用来提供SMTP服务的程序为saslauthd才行
vim /etc/sasl2/smtpd.conf
log_level :3 <==登录文件信息等级的设定,设定3即可
其他设定值保持默认即可
saslauthd是个简单的账号密码管理服务,几乎不需要进行其他额外的设定,直接启动即可

2、更改main.cf的设定项目:让postfix支持SMTP身份验证
vim /etc/postfix/main.cf
#在最后面增加与SASL有关的设定资料
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
#然后找到跟relay有关的设定项目,增肌一段允许SMTP认证的字样:
smtpd_recipient_restrictions =
permit_sasl_authenticated, <==重点在这里,注意顺序,放在第二行
重启postfix服务即可

非固定IP邮件服务器: relayhost
例如:环境是台湾地区的hinet所提供的用户,hinet提供的邮件主机为ms1.hinet.net,则这样设定:
在postfix配置文件加入一段数据即可:
vim /etc/postfix/main.cf
relayhost = [ms1.hinet.net] <==加入这行数据,注意中括号
重启postfix服务

postfix提供的其他设定:
1、单个邮件信箱的大小限制:
修改配置文件: message_size_limit = 单封信件的最大容量 <==值是以bytes为单位
2、限制某个邮件账户的大小:
修改配置文件: mailbox_size_limit = 单个账户的最大容量 <==值是以bytes为单位
修改完后需要重启postfix服务或 postfix reload
3、寄件备份:SMTP自动转寄一份到备份匣
修改配置文件: always_bcc = [email protected] <=== [email protected]代表信箱名
br/>这样设定后任何人寄出的信件都会复制一份到[email protected]信箱(涉及隐私侵犯,注意)
收件备份可以使用/etc/aliases来处理

配置文件的权限问题:
/etc/aliases这个档案的权限,通常其权限为644 ;
Mail server读取的数据库,通常权限为640 ;
系统的队列目录(/var/spool/mqueue或/var/spool/postfix)权限通常为700 ;
~/.forward 档案的权限不能设定为任何人均可查阅的权限,否则e-mail数据可能会被窃取;
一般用户能够不用 ~/.forward 与 aliases的功能,就不要使用

资料备份: 对单纯的Mail Server来说,需要备份的数据如下:
/etc/passwd,/etc/shadow,/etc/group 等与账号有关的资料;
/etc/mail,/etc/postfix/底下的所有档案数据;
/etc/aliases 等等MTA相关档案;
/home 底下的所有用户数据;
/var/spool/mail底下的档案与/var/spool/postfix邮件队列档案;
其他如广告软件、病毒扫描软件等等的设定与定义档;

错误检查:查出不能启动postfix的问题流程
1、关于硬件设备;关于网络参数的问题;关于服务的问题,确认与mail server 有关的端口已经启动,例如: port 25,110,143,993,995等,使用netstat指令即可查询到
2、关于防火墙的问题:使用iptables来检查是否放行mail server相关的端口
3、关于配置文件的问题:查看登录档即可
4、其他档案的设定问题
5、查看/var/log/maillog或/var/log/mail

MX recode 可以让mail server 经由MX以及A(address)这个记录来进行mail gateway与mail route的功能,能够达到的作用相当的多
Mailing list 就是将使用者寄给一个账号邮件时,该账号会主动的将该邮件传送到所有的用户去
利用postconf -n 即可察看[目前main.cf里面设定的参数],如果看所有的参数,则直接使用postconf 即可
imap :允许用户在主机的家目录建立邮件数据文件夹

猜你喜欢

转载自blog.51cto.com/3134965/2133986
今日推荐