自學鳥哥linux服務-郵箱服務postfix+dovecot

實驗環境:

虛擬機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郵箱

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" [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 軟件提供的過濾庫







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章