实验环境:Centos6.0
Port:
SMTP 25
POP3 110
IMAP 143
POP3s 995
IMAPs 993
# yum install postfix dovecot -y
1.MTA服务器的设定(Postfix基础设定)
# vim /etc/postfix/main.cf
*****************************************************************************
修改添加:
myhostname = Server1.example.com
myorigin = $myhostname
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost www.linux.jjf
mynetworks = 192.168.0.0/24, 127.0.0.0/8, hash:/etc/postfix/access
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
*****************************************************************************
# postmap hash:/etc/postfix/access
# postalias hash:/etc/aliases
# /etc/init.d/postfix check
# /etc/init.d/postfix restart
# netstat -tunlp|grep 25
设定邮件主机权限与过滤机制
# vim /etc/postfix/access
****************************************************************************
192.168.1. REJECT
123.com REJECT
192.168.2.123 OK
edu.cn OK
****************************************************************************
# postmap hash:/etc/postfix/access (更新访问控制数据库,更改后无需重启立即生效)
设定邮件别名:/etc/aliases
# vim /etc/aliases
****************************************************************************
添加:
用户X: 别名1,别名2,别名3,别名4,[email protected] (用户X的邮件会自动发给别名1,2,3,4和[email protected])
****************************************************************************
# postalias hash:/etc/aliases (更新别名数据库)
个人化邮件传递:~/.forward
$ vim ~/.forward (普通用户名jjf)
****************************************************************************
jjf
sust
[email protected] (用户JJF的邮件不但自己保留一份,而且自动转发给sust和[email protected])
****************************************************************************
$chmod 644 ~/.forward
# postqueue -p (查看邮件队列内是否留有待发邮件、一般情况下应该没有遗留邮件)
# postcat 6E81821AC2 (查看留在邮件队列里的邮件,6E81821AC2是队列内邮件的queue的ID)
# postfix flush (强制将邮件队列内的邮件寄送出去)
2.MRA服务器的设定(dovecot的设定)
# vim /etc/dovecot/dovecot.conf
**************************************************************************
protocols = imap pop3
**************************************************************************
# vim /etc/dovecot/conf.d/10-ssl.conf(明文邮件传输)
**************************************************************************
ssl = no
**************************************************************************
加密的POP3s/IMAPs设定
1>建立证书并放于指定位置
# cd /etc/pki/tls/certs/
# make Server1dovecot.pem
# mv /etc/pki/tls/certs/Server1dovecot.pem /etc/pki/dovecot
# restorecon -Rv /etc/pki/dovecot
2>配置dovecot,只要POP3s、IMAPs即可,取消明文传输
# vim /etc/dovecot/conf.d/10-ssl.conf
*************************************************************************
ssl = required
ssl_cert = </etc/pki/dovecot/Server1dovecot.pem
ssl_key = </etc/pki/dovecot/Server1dovecot.pem
************************************************************************
# vim /etc/dovecot/conf.d/10-auth.conf
************************************************************************
disable_plaintext_auth = yes (取消明文认证、只支持加密认证)
************************************************************************
# vim /etc/dovecot/conf.d/10-master.conf
************************************************************************
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
#port = 993
#ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
#port = 995
#ssl = yes
}
}
************************************************************************
3>处理额外的mail_location设置值
# vim /etc/dovecot/conf.d/10-mail.conf
*************************************************************************
mail_location = mbox:~/mail:INBOX=/var/mail/%u
*************************************************************************
3.MUA软件客户端的收发邮件软件
1>Linux Mail(Linux系统自带的邮件浏览软件)
用mail直接编辑文字邮件与发送邮件
#mail [email protected] (以小数点代表结束)
利用已经处理完毕的“纯文本文档”发送邮件
#mail -s 'test' [email protected] < /root/test
利用mail查阅邮件
读信: 数字+Enter
显示标题: h
回复邮件: R
删除邮件: d
存储邮件到指定文件: s 数字 文件名
离开mail: q
#mail -f ~/test.txt 读取存储的邮件
以“添加附件”的方式寄信
#yum install sharutils -y
#uuencode /etc/hosts attachfile|mail -s 'attach' [email protected]
获得附件:
先存储信件,再用命令uudecode attach -o jjfattach (用编译器解码后的文件是jjfattach)
2>跨平台好用的软件:Thunderbird(雷鸟)
下载地址:http://www.mozilla.org/thunderbird/download/?product=thunderbird-17.0.2&os=win&lang=zh-CN
垃圾邮件过滤机制
用postgrey进行非正规Mail server的垃圾邮件过滤,若发信来源同一封信第一次寄来时,postgrey默认会过滤他,并且将来源地址记录起来
,在约5分钟后,若该邮件又传来一次时,则该邮件会被收下来。
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
# yum install db4 db4-utils db4-devel -y
# yum install perl perl-Net-DNS -y
# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpm
# yum install postgrey -y
# /etc/init.d/postgrey start
# netstat -anlp|grep postgrey
# vim /etc/postfix/main.cf
*********************************************************************************************
添加:
smtpd_recipient_restrictions =
permit_mynetworks, #默认值,允许来自mynetworks设置值的来源
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_destination, #拒绝不信任的目标
check_policy_service unix:/var/spool/postfix/postgrey/socket
#以上几个选项是有顺序的!!
********************************************************************************************
# vim /etc/sysconfig/postgrey (手动建立)
********************************************************************************************
OPTIONS="--unix=/var/spool/postfix/postgrey/socket --delay=60" #默认阻挡5分钟,这里修改默认阻挡1分钟
********************************************************************************************
#vim /etc/postfix/postgrey_whitelist_clients (白名单的添加)
***************************************************
mail.dsa.qwq.com
www.dsjaig.ads.com
***************************************************
#vim /etc/postfix/main.cf (通过数据库添加黑名单)
*******************************************************
smtpd_recipient_restrictions =
permit_mynetworks,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_destination,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client cblless.anti-spam.org.cn,
reject_rbl_client sbl-xbl.spamhaus.org,
check_policy_service unix:/var/spool/postfix/postgrey/socket
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/access,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client cblless.anti-spam.org.cn,
reject_rbl_client sbl-xbl.spamhaus.org
smtpd_sender_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain
********************************************************
基础的邮件过滤机制(标题、内容的过滤)
#vim /etc/postfix/main.cf
********************************************************
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks #regexp表示“使用正规表示法”
*******************************************************
#touch /etc/postfix/header_checks
#touch /etc/postfix/body_checks
********************************************************
规则:
/规则/ 操作 显示在登录文件里面的信息
/^Subject:.*A funny game/ DISCARD drop header deny
#将标题为"A funnt game"的邮件丢弃、并显示drop header deny
操作包括:REJECT、WARN、DISCARD
*********************************************************
#postmap -q - regexp:/etc/postfix/header_checks /etc/postfix/body_checks(检查语法)
# /etc/init.d/postfix restart
# /etc/init.d/postgrey restart
防火墙的设置:
iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65534 -j ACCEPT (SMTP协议需要使用port 25)
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
iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65534 -j ACCEPT (明文传输端口)
iptables -A INPUT -p TCP -i $EXTIF --dport 143 --sport 1024:65534 -j ACCEPT
注:
1.上层DNS中MX标志一定要设置正确,否则邮件将可能直接被MX服务器踢掉;
2.MUA的主要的功能就是收取邮件主机的电子邮件,以及提供用户浏览与编写邮件并发送邮件到邮件主机上;
3.MTA:即邮件发送代理人,接受来自客户端和其它MTA的邮件(采用SMTP协议和port 25),之后再转发到下一台主机;
4.MDA:即邮件传送代理人,分析由MTA所收到的邮件表头或内容等数据,决定这些邮件的去向。MDA是MTA下面的一个小程序,实现MTA邮件转发功能,并且还可以自动回复和过滤垃圾邮件;
5.邮件发送步骤:
取得某台MTA的使用权限——>用户在MUA上编写邮件后发送到MTA上——>如果该封邮件的目标是本地端MTA自己的帐号,那就会通过MDA将这封信送到自己的Mailbox中——>如果该封邮件的目标是其他的MTA,则开始中继转发(Relay)的流程,由MDA发送到其它的MTA主机,直至目标MTA主机接收后将该邮件放到正确的用户邮箱中,等待用户登录读取;
6.MRA:即邮件检索代理,是一个邮件服务的组件(如:dovecot),提供POP3、IMAP通信协议进行邮件的接受,接收到本地的邮件主机;
7.MUA通过POP3协议连接到MRA的port 110,并且输入账号与密码来取得认证与授权;MRA确认帐号密码正确后,前往该用户的Mailbox(/var/spool/mail/账户名称)取得用户的邮件并发送到用户的MUA软件上;当所有的邮件传送完毕后,用户的Mailbox内的数据将会被删除!
8.邮件发送流程:
1>发信端与收信端两台主机间先经过握手(ehlo),此时发信端被记录为发信来源。通过握手后就可以进行邮件标题的传送了;
2>收信端分析标题信息,若邮件的“Mail to:主机名”为收信端主机,且该名称符合mydestination的设置,则该邮件开始被接受到队列,并进一步送到Mailbox当中;若不符合mydestination的设置,则终止连接且不进行邮件内容(body)的传送;
3>若"Mail to:主机名"不是收信端本身,则开始进行中继转发(Relay)的分析;
4>转发过程首先分析该邮件的来源是否符合信任的客户端,若符合则开始接收邮件至队列,并等待MDA将邮件再转发出去,若不符合则继续下一步;
5>分析邮件来源或目标是否符合relay_domains的设置,若符合则邮件将被接收至队列,并等待MDA将邮件再转发出去;
6>若这封邮件的标题数据都不符合上述的规范,则终止连接,并不会接收邮件的内容数据。