实验环境: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,jjf@qq.com (用户X的邮件会自动发给别名1,2,3,4和jjf@qq.com)

****************************************************************************

# postalias hash:/etc/aliases (更新别名数据库)

 

 

个人化邮件传递:~/.forward

$ vim ~/.forward (普通用户名jjf)

****************************************************************************

jjf

sust

jjf@qq.com (用户JJF的邮件不但自己保留一份,而且自动转发给sust和jjf@qq.com)

****************************************************************************

$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 jjf@qq.com          (以小数点代表结束)

 

利用已经处理完毕的“纯文本文档”发送邮件

#mail  -s 'test'  jjf@qq.com < /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'   jjf@qq.com

获得附件:

先存储信件,再用命令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>若这封邮件的标题数据都不符合上述的规范,则终止连接,并不会接收邮件的内容数据。