实验环境:

虚拟机CentOS 6.5

IPADDR=192.168.1.223

域:ltiaw.com



准备工作:

1.搭建好DNS服务并向zone添加mail MX和A记录

vim /var/named/chroot/var/named/ltiaw.zone

加入以下肉容:

mail     IN MX 5 mail.ltiaw.com.

mail     IN A    192.168.1.223

保存


反向

vim /var/named/chroot/var/named/ltiaw.arpa

加入以下肉容:

223    IN MX 5 mail.ltiaw.com.

223    IN PTR mail.ltiaw.com.

保存

/etc/init.d/named restart

DNS搭建可以看上一篇文章这里就不说了


2.更改hostname

vim /etc/sysconfig/network

HOSTNAME=ltiaw.com

保存退出

reboot重启系统


(一)##################下面正式开始搭建邮箱服务器##########################################

yum -y install postfix

安装好后

配置文件位置:

cd /etc/postfix/

vim main.cf  #配置文件

:

inet_interfaces = all    #这个改为all

mynetworks = 168.100.189.0/28, 127.0.0.0/8,192.168.1.0/24   #加入你的内网段192.168.1.0/24 

保存退出

查看myhostname

postconf myhostname

[root@ltiaw postfix]# postconf myhostname       

myhostname = ltiaw.com

#上面一开始准备时就已改好hostname了.

重启服务

/etc/init.d/postfix restart

netstat -tlunp |grep 25

看到端口正在listen

开放端口

iptables -I INPUT -p tcp --dport 25 -j ACCEPT


测试:

创建用户ltiaw

useradd ltiaw

passwd ltiaw

安装telnet

yum -y install telnet


telnet localhost 25         #红色字是我打的命令

Trying ::1...

Connected to localhost.

Escape character is '^]'.

220 ltiaw.com ESMTP Postfix

mail from:root@ltiaw.com    #没设置只允许本域发件时,这里from的地址可以乱设~

250 2.1.0 Ok

rcpt to:ltiaw@ltiaw.com

250 2.1.5 Ok

data

354 End data with <CR><LF>.<CR><LF>

this is a text

.

250 2.0.0 Ok: queued as 02AD440D6A

quit

221 2.0.0 Bye

Connection closed by foreign host.


查看ltiaw的收件

[root@ltiaw ~]# mail -u ltiaw

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/mail/ltiaw": 1 message 1 new

>N  1 root@ltiaw.com        Mon Mar 21 09:58  14/456   

& 1

Message  1:

From root@ltiaw.com  Mon Mar 21 09:58:20 2016

Return-Path: <root@ltiaw.com>

X-Original-To: ltiaw@ltiaw.com

Delivered-To: ltiaw@ltiaw.com

Date: Mon, 21 Mar 2016 09:57:27 +0800 (CST)

From: root@ltiaw.com

To: undisclosed-recipients:;

Status: R


this is a text


成功收件!

最基本的邮箱服务器就搭好了,如果需要用POP3和IMAP来收件的话还要搭建dovecot服务!


(二)###################安装dovecot服务###############################################

yum -y install dovecot

配置文件位置:

ls /etc/dovecot/

conf.d dovecot.conf


vim /etc/dovecot/dovecot.conf

去掉注释protocols = imap pop3 lmtp #启用协议

listen = *, ::   #监听IP

保存退出


继续修改配置文件

cd /etc/dovecot/conf.d/

vim 10-mail.conf 

去掉注释 mail_location = mbox:~/mail:INBOX=/var/mail/%u 指定用户目录

保存退出

vim 10-auth.conf 

disable_plaintext_auth = no  #改不NO 不禁用auth

保存退出

重启服务

/etc/init.d/dovecot restart

开放POP3的端口110

iptables -I INPUT -p tcp --dport 110 -j ACCEPT 

保存

/etc/init.d/iptables save


telnet localhost 110

[root@ltiaw ~]# telnet localhost 110

Trying ::1...

Connected to localhost.

Escape character is '^]'.

+OK Dovecot ready.


看到OK


(三)#################测试:##############################################################

linux服务器,搭建DNS postfix+dovecot IPADDR=192.168.1.223

用windows IP=192.168.1.5 安装Foxmail邮件客户端软件

设置windows DNS=192.168.1.223 指向linux服务器


1.  linux 新建用户tom

2.  Foxmail 添加tom邮箱

wKiom1bvYIOQOEMmAAB2ubHBhHQ957.png 


失败:

在windows ping mail.ltiaw.com 通没问题

查看linux日志

cat /var/log/maillog

发现出错如下

Mar 21 10:36:08 ltiaw dovecot: pop3(tom): Error: chown(/home/tom/mail/.imap/INBOX, -1, 12(mail)) failed: Operation not permitted (egid=502(tom), group based on /var/mail/tom)

Mar 21 10:36:08 ltiaw dovecot: pop3(tom): Error: mkdir(/home/tom/mail/.imap/INBOX) failed: Operation not permitted

Mar 21 10:36:08 ltiaw dovecot: pop3(tom): Error: Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2016-03-21 10:36:08]

原来是没有INBOX目录


创建INBOX目录并更改拥有者为tom

mkdir -p /home/tom/mail/.imap/INBOX 

chown -R tom  /home/tom/mail/.imap/INBOX


再用Foxmail

OK。成功了。

测试下收信,发信。都是成功!

更改为开机自动启动服务

chkconfig postfix on

chkconfig dovecot on


搭建成功


######关于INBOX的问题,总不能每建一个用户都是要手动创建目录吧。

所以直接在用户模板目录:/etc/skel/ 里添加上这个目录

mkdir -p /etc/skel/mail/.imap/INBOX

OK


(四)##############下面继续一些常见的运用################################################

  1. 别名群发

vim /etc/aliases

写入

group:   root,ltiaw  #格式:别名:   用户1,用户2,...

保存。

生成数据

postalias hash:/etc/aliases

或者:newaliases


测试:

现在是别名group,代表了,root,ltiaw.两位用户

发信给group:

  echo "123" |mail -s "textgroup" group@ltiaw.com


成功:

[root@ltiaw ~]# mail

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/spool/mail/root": 1 message 1 new

>N  1 root                  Mon Mar 21 13:30  18/533   "textgroup"


[root@ltiaw ~]# mail -u ltiaw

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/mail/ltiaw": 2 messages 1 new

    1 root@ltiaw.com        Mon Mar 21 09:58  17/560   

>N  2 root                  Mon Mar 21 13:30  18/533   "textgroup"



2.发给一个用户时会转发给定义的用户。

就是在用户家目录下创建.forward文件就行了

具体如下:

再建多一个用户pp

useradd pp

passwd pp

切换到tom

su - tom

vim .forward  #创建.forward文件写入用户名就可.

ltiaw

pp

保存


#切用root用户

su -

 发信给tom

echo "testTOM" |mail -s "TEXTTOM" tom

查件用户:ltiaw

[root@ltiaw ~]# mail -u ltiaw

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/mail/ltiaw": 3 messages 1 new 2 unread

    1 root@ltiaw.com        Mon Mar 21 09:58  17/560   

 U  2 root                  Mon Mar 21 13:30  19/543   "textgroup"

>N  3 root                  Mon Mar 21 13:39  21/636   "TEXTTOM"


查件用户:pp

[root@ltiaw ~]# mail -u pp

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/mail/pp": 1 message 1 new

>N  1 root                  Mon Mar 21 13:39  21/633   "TEXTTOM"


查件用户:tom

[root@ltiaw ~]# mail -u tom

No mail for tom


tom没收到件。因为我刚在.forward 文件里只加入了ltiaw和pp两个用户。

只要加入tom用户入去tom就能收到件了



3.队列,等待发信的队列

[root@ltiaw ~]# postqueue -p #查看

Mail queue is empty

postsuper -d  xxxxxxx    #删除 

postsuper -d  All   

postsuper -h xxxxxxx 保留

postcat -q xxxxxxx 查看肉容


4.启用发送验证

查看:

postconf -d |grep smtpd|grep sasl


[root@ltiaw ~]# postconf -d |grep smtpd|grep sasl

smtpd_sasl_auth_enable = no

smtpd_sasl_authenticated_header = no

smtpd_sasl_exceptions_networks = 

smtpd_sasl_local_domain = 

smtpd_sasl_path = smtpd

smtpd_sasl_security_options = noanonymous

smtpd_sasl_tls_security_options = $smtpd_sasl_security_options

smtpd_sasl_type = cyrus


追加到配置文件:

echo "smtpd_sasl_auth_enable = yes" >>/etc/postfix/main.cf


/etc/init.d/postfix restart

 启动认证服务:

/etc/init.d/saslauthd start


测试:

telnet localhost 25

ehlo localhost

不成功

查日志

cat /var/log/maillog

Mar 21 15:47:11 ltiaw postfix/smtpd[1540]: warning: xsasl_cyrus_server_get_mechanism_list: no applicable SASL mechanisms

Mar 21 15:47:11 ltiaw postfix/smtpd[1540]: fatal: no SASL authentication mechanisms

Mar 21 15:47:12 ltiaw postfix/master[1452]: warning: process /usr/libexec/postfix/smtpd pid 1540 exit status 1

Mar 21 15:47:12 ltiaw postfix/master[1452]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling


上网查询发现需要以下包:

cyrus-sasl-2.1.23-13.el6_3.1.x86_64
saslwrapper-0.14-1.el6.x86_64
cyrus-sasl-md5-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-lib-2.1.23-13.el6_3.1.x86_64
python-saslwrapper-0.14-1.el6.x86_64
cyrus-sasl-devel-2.1.23-13.el6_3.1.x86_64

安装以上包.

然后重启服务:

[root@ltiaw ~]# /etc/init.d/postfix restart

关闭 postfix:                                             [确定]

启动 postfix:                                             [确定]

[root@ltiaw ~]# /etc/init.d/saslauthd restart

停止 saslauthd:                                           [确定]

正在启动 saslauthd:                                       [确定]

[root@ltiaw ~]# telnet 192.168.1.223 25

Trying 192.168.1.223...

Connected to 192.168.1.223.

Escape character is '^]'.

220 ltiaw.com ESMTP Postfix

ehlo 192.168.1.223  #输入这个

250-ltiaw.com

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH PLAIN LOGIN   #看到这个已经成功了

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN


怎么配置saslauthd 要下次再研究了,网上找到如下的:

修改postfix的cf文件使支持smtp认证
  在/etc/postfix/main.cf文件最后加上:
  smtpd_sasl_auth_enable = yes
  smtpd_delay_reject=yes
  smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated permit_auth_destination reject
  smtpd_client_restrictions = permit_sasl_authenticated
  broken_sasl_auth_clients = yes
  smtpd_sasl_security_options = noanonymous
  就支持smtp认证了。其余的配置请参考/etc/postfix/main.cf.default和sample-*文件,这里不多说。
  现在telnet 25口应该有下面的提示
  telnet 127.0.0.1 25
  Trying 127.0.0.1...
  Connected to 127.0.0.1.
  Escape character is '^]'.
  220 mailx.bjcnuol.com ESMTP Postfix
  ehlo 127.0.0.1
  250-mailx.bjcnuol.com
  250-PIPELINING
  250-SIZE 10240000
  250-ETRN
  250-AUTH LOGIN PLAIN
  250-AUTH=LOGIN PLAIN
  如果有就差不多成功了。

  3.配置sasl使支持smtp认证
  # touch /usr/local/lib/sasl/smtpd.conf
  # echo pwcheck_method:shadow /usr/local/lib/sasl/smtpd.conf
  因为postfix用户无权读取/etc/shadow所以必须把shadow文件的权限改成postfix,这不能不说是一个缺陷,如果你觉得不安全,你可以将认证方式该为sasldb的方式,但是这样需要额外创建用户和口令不能和邮件用户的口令保持一致修改口令也不方便。此外还可以用pwcheck守护进程,但我没试出来感兴趣的朋友可以试试,如果成功了别忘了告诉我。


5.下面继续过滤垃圾邮件功能.

vim /etc/postfix/main.cf

 去掉注释header_checks = regexp:/etc/postfix/header_checks


规则文件

vim /etc/postfix/header_checks

对标题过滤加入

/^Subject:.*sex/ REJECT 不能出现带sex的标题      #拒绝信息

/sex/ REJECT 不能出现带sex的所有内容

/etc/init.d/postfix restart


#也可以直接利用Foxmail 软件提供的过滤库