實驗環境:
虛擬機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:[email protected] #沒設置只允許本域發件時,這裏from的地址可以亂設~
250 2.1.0 Ok
rcpt to:[email protected]
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 [email protected] Mon Mar 21 09:58 14/456
& 1
Message 1:
From [email protected] Mon Mar 21 09:58:20 2016
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Date: Mon, 21 Mar 2016 09:57:27 +0800 (CST)
From: [email protected]
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" [email protected]
成功:
[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 [email protected] 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 [email protected] 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 軟件提供的過濾庫