实验环境:
虚拟机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邮箱
失败:
在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
(四)##############下面继续一些常见的运用################################################
别名群发
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 软件提供的过滤库