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 = ,且第一个字符不可以是空白,亦即[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账号所接收到的信件除了自己要保留一份之外,还要传给本机上的pshao