postfix 郵件服務的安裝及詳解


 

該實驗系統:cetnos 6.5

 

 

sendmail:性能好,設置復雜,適合老手

qmail:體積小260+k ,模塊化。需要做二次開發,適合對郵件性能有要求的

postfix:前身是sendmailpostfix原本是sendmail里面的一個模塊,紅帽6默認安裝好postfix

zmailer:近幾年才出來的郵件

coremail:國內做的最好的商業平台,運行在linux

 

Pop:允許客戶端下載郵件,移動標記已讀等操作  不會反饋到服務器、

Imap4:雙向通訊,客戶端的操作會反饋到服務器,提供想更過的功能,聽歌更好的郵件管

 

 

 

發郵件:

收郵件的時候都是用的pop3IMAP4 ,區別在於pop3最早的收郵件的協議,功能最簡單IMAP4是后來新加入了的一個收郵件的協議,功能相對復雜,可以支持郵件預覽、附件預覽等等。從根本上來說pop3這個收郵件的操作都必須在本地進行,而ipmap4這個收郵件的操作都必須服務器上進行,如果用的pop3當你收到郵件時必須先下載下來才能看,ipmap4則是在服務器端,如用的imap4協議的話可以先是誰發的, 什么時候發的有沒必要下載下來然后做決定是下載到本地還是放棄下載,能看到一部分摘要信息。Imap4協議和pop比起來imap4協議支持的功能更多一點但是在實際生產環境里用的pop3的多,功能簡單,要知道功能強大的背后犧牲的是服務器的性能

 

收郵件:

SMTP協議

FTP一樣是誕生最早的一批協議,用的是25tcp端口,加密時使用是tcp465端口

 

主配置文件:/etc/postfix/main.cf

master.cf里面存的是一些優化的參數

下來看些需要改的才參數:(黃色背景的,星號要去掉)

75 #myhostname = mail.xdl.com ##用來設置當前的主機名,需要域名解析

 

76 #myhostname = virtual.domain.tld ##虛擬主機名

郵件格式:

zhangsan@xdl.com   ----->>郵件用戶@郵件域

zhangsan@mail.xdl.com  ----->>郵件名都能拿來做郵件域的名稱

正常情況下都是用域名里面的域來作為郵件域,某些時候也會使用主機名作為郵件域,所以要在主配置文件里聲明一下我的主機名叫什么

83 #mydomain = xdl.com #這里寫郵件服務器的郵件 -----原樣

發送郵件的設置(如下):---->>

98 #myorigin = $myhostname ##允許發送郵件用戶的郵件域,就是說哪些用戶能夠通過這個郵件服務器往外發郵件,如果有個用戶往外發郵件要檢查郵件地址($myhostname),看后綴,如果后綴都正確才能允許發送,如果后綴不對,發送不出去

99 #myorigin = $mydomain ##

101#接收郵件的設置(如下): --->>

113 inet_interfaces = all ---->>(開啟)用來設置要監聽哪些地址以及使用什么樣的協議,接收什么域的郵件,默認只接收本地的,要改成113行的all (如下)

 

116行注釋掉

165mydestination = $myhostname, localhost.$mydomain, localhost

##和上面的98/99行的對應的,是用來設置允許接收郵件的用戶的郵件域

原樣----》》

原樣:mydestination = $myhostname, localhost.$mydomain, localhost##和上一行一一對應

例:

 

收到一封未知用戶時拒絕掉以后返回的錯誤代碼

 

給一個部門做了別名時,當要給一個部門發郵件時就相當於給部門的所有人發

 

--->>>>做別發時候是要有個數據庫的支持者是數據庫的位置

419 #home_mailbox = Maildir/ ##指定郵箱的位置

 

setgid_group = postdrop ##收郵件時默認要設置的一個組名

#默認的郵件組

 

663 html_directory = no ##是否啟用基於html的郵件目錄

 

667 manpage_directory = /usr/share/man

##在線的幫助頁面,位置

 

672 sample_directory = /usr/share/doc/postfix-2.6.6/samples         ##模板文件的位置

 

因為對主配置文件進行了設置,所以要重啟服務:postfix]# service postfix restart

 

關閉防火牆(清理)和selinux

iptables -F

setenforce  0

實驗開始

客戶端DNS配置如下

[root@localhost ~]# mount /dev/sr0 /mnt/usb1

[root@localhost ~]# yum -y install bind

[root@localhost ~]# vim /etc/named.conf

 

[root@localhost ~]# cd /etc/

[root@localhost etc]# vim named.rfc1912.zones

 

####上圖如果不懂可以留言######

 

[root@localhost etc]# cd /var/named/

[root@localhost named]# ls

[root@localhost named]# cp -p named.localhost  xdl.localhost ##復制模板並改名

[root@localhost named]: vim xdl.localhost  ##修改復制的模板

MX為郵件交換記錄,用來標明當網絡里有多台郵件服務器時優先使用哪台服務器來發送郵件

郵件服務器優先級設置格式:MX  3  mail.xdl.com數字越小優先級越高,即使只有一個郵件服務器優先級也必須得設,不設的話DNS起不來(一般是1-10之間)

正向和反向寫的都是一樣的 [root@localhost named]# service named start

服務器端:

[root@localhost named]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 ###添加DNS1=****

[root@localhost postfix]# service network restart (ifdown eth0;ifup eth0)

[root@localhost postfix]# cat /etc/resolv.conf 

nameserver 192.168.12.155

[root@localhost postfix]# nslookup

> mail.xdl.com       

Server: 192.168.12.155

Address: 192.168.12.155#53

 

Name: mail.xdl.com

Address: 192.168.12.154

> dns.xdl.com

Server: 192.168.12.155

 [root@localhost ~]# rpm -qa postfix ##帽6開始默認已經安裝了posfix

 postfix-2.6.6-2.2.el6_1.x86_64

 

[root@localhost ~]# cd /etc/postfix/

[root@localhost postfix]# vim main.cf  ##posfix的主配置文件

參數詳解:

系統已經自帶安裝了postfix

主配置文件:/etc/postfix/main.cf

queue_directory = /var/spool/postfix    郵件服務器的位置

command_directory = /usr/sbin        郵件服務器的命令

daemon_directory = /usr/libexec/postfix   郵件服務器可執行程序位置

data_directory = /var/lib/postfix      郵件服務器數據庫的存放位置

mail_owner = postfix             服務器的運行身份

               75   myhostname = mail.djkk.com     郵件服務器的主機名稱 (需要改成自己定的)

這個正常的情況就是我們服務器的的域名作為郵件的郵件域,同時也可以用域作為郵件域

比如主機的域名為mail.xdl.com

發總郵件是可以是zhangsan@xdl.com、也可以是zhangsan@mail.xdl.com

83  mydomain = djkk.com  服務器的域 (自行開啟,改成@后面的部分,不含@

               98   myorigin = $myhostname   允許發送郵件用戶的郵件域是誰 (自行開啟)

               99   myorigin = $mydomain     允許發送郵件用戶的郵件域是誰 (自行開啟)

就是說哪些用戶可以通過這個郵件服務器發郵件呢?就是$后面設置的這個域。(不用改)

   116  inet_interfaces = localhost (需注釋掉)

   113  inet_interfaces = all      用來設置監聽的地址 (自行開啟)

        119   inet_protocols = all       使用的協議 (默認開啟)

165 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 用來設置本郵件服務器允許接收哪些地址發來的的郵件 164行注釋,165行開啟)

unknown_local_recipient_reject_code = 550  收到未知用戶的郵件的時候返回的一個錯誤代碼(默認開啟)

386 alias_maps = hash:/etc/aliases (郵件別名,有用默認開啟

397 alias_database = hash:/etc/aliases (搭配上一條使用,意思為使用別名時需要的數據庫)

419 #home_mailbox = Maildir/ 郵件的存放位置 (默認不開啟,一共2個,開下面那一個)

----->>>2個相反

[root@localhost ~]# service postfix restart (默認是開啟的,需要重啟)

至此簡單的郵件服務器搭建好了,為了測試一下還要裝Telnet來進行測試

[root@localhost postfix]# useradd zhangsan ##創建用戶並設上密碼

[root@localhost postfix]# passwd zhangsan

[root@localhost postfix]# useradd lisi

[root@localhost postfix]# passwd lisi

[root@localhost postfix]# yum -y install telnet

[root@localhost postfix]# service postfix restart

[root@localhost postfix]# telnet mail.xdl.com 25 25號端口為pop3郵件發送端口)

Trying 192.168.12.154...

Connected to mail.xdl.com.

Escape character is '^]'.

220 mail.xdl.com ESMTP Postfix (連接成功標示)

helo mail.xdl.com          helo聲明當前郵件服務器的域名)            

250 mail.xdl.com

mail from:zhangsan@xdl.com (郵件從誰那發出來的,zhangsan發的)

250 2.1.0 Ok

rcpt to:lisi@xdl.com    (發給lisi的)

250 2.1.5 Ok

data (郵件的正文)

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

wfgke k lrlr lrkypohk566 (內容)

h5kjkgjg

. (回車提交) 為結束標示,一定要另起一行點

250 2.0.0 Ok: queued as 57C3F7F442

Quit (退出)

221 2.0.0 Bye

Connection closed by foreign host. (郵件就發送完了)

 

檢驗郵件有沒發送成功:(還是在服務端)

[root@localhost new]# cd /home/lisi/Maildir/

[root@localhost Maildir]# ls

cur  new  tmp

[root@localhost Maildir]# cd  new

[root@localhost new]# ls

1479935833.V802Iff008M899554.localhost.local (它就是我們發的郵件已記錄下來)

[root@localhost new]# cat 1479935833.V802Iff008M899554.localhost.localdomain

 

 

服務端dovecot接收郵件步驟:

[root@localhost ~]# yum -y install dovecot*

[root@localhost ~]# service dovecot start

[root@localhost ~]# telnet mail.xdl.com 110 (收郵件)

Trying 192.168.12.154...

Connected to mail.zp.com.

Escape character is '^]'.

+OK Dovecot ready.

user lisi (輸入用戶名)

+OK

pass pppppp       ---->>這里是輸入密碼

+OK Logged in.     ---->>>成功登陸提示

list           ---->>>列出所有郵件

+OK 1 messages:

1 448         ---- >>>1封郵件,代號是448

.

retr 1         ---->>>收第一封郵件的意思(查看的意思)

正文區

quit

+OK Logging out.

Connection closed by foreign host.

 

 

企業郵件服務搭建(Extmail)的搭建:

(該郵件服務器需要一個干凈的系統,系統還原,dns服務器不還原)

客戶端DNS服務器):

[root@localhost ~]# yum -y install bind

[root@localhost ~]# vim /etc/named.conf

 

 

[root@localhost named]# vim /etc/named.rfc1912.zones

 

[root@localhost named]# cd /var/named/

[root@localhost named]# ls

[root@localhost named]# cp -p named.localhost extmail.localhost named.localhost 轉 自定義)

[root@localhost named]# vim extmail.localhost (如下圖)

 

 

-------------------------------------------------------------------------------------------------------------

      #該圖是另一個樣本,不是該實驗中的

------------------------------------------------------------------------------------------------------------------------------

 

[root@localhost named]# service named restart

服務端配置:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

  DEVICE=eth0

  TYPE=Ethernet

  ONBOOT=yes

  BOOTPROTO=static

  IPADDR=192.168.12.154

  NETMASK=255.255.255.0

  DNS1=192.168.12.155

[root@localhost ~]# service network restart

 

能正常解析出來域名后,接着上面的做----->>>

 

[root@localhost ~]# yum -y install gcc*

把包倒進來extmail-1.2.tar.gz  extman-1.1.tar.gz  Unix-Syslog-1.1.tar.gz

[root@localhost extmail]# yum -y install mysql mysql-server mailx (這3個數據庫文件)

[root@localhost extmail]# service mysqld start

 

 

[root@localhost extmail]# yum -y install httpd

[root@localhost extmail]# mkdir /var/www/extsuite (新建一個目錄用來存放和數據庫相關的數據)

[root@localhost extmail]# tar -zxvf extmail-1.2.tar.gz -C /var/www/extsuite/ (指定解壓到什么位置)

 

[root@localhost extmail]# tar -zxvf extman-1.1.tar.gz -C /var/www/extsuite/ (大C

[root@localhost extmail]# cd /var/www/extsuite/

[root@localhost extsuite]# mv extmail-1.2/ extmail mv命令把2個軟件的版本號去掉)

[root@localhost extsuite]# mv extman-1.1/ extman mv命令把2個軟件的版本號去掉)

[root@localhost extsuite]# cd extman/docs/

(這里面的.sql文件就是數據庫里的文件,直接把這些sql文件倒到“我們”的數據庫中就可以得到它們的一些預定才參數了,倒的時候分前后順序)如下

[root@localhost docs]# vim init.sql

 

 

[root@localhost docs]# mysql < extmail.sql ()

這個文件倒完后會在MySQL里創建一個extmail的數據庫,有來了這個文件init.sql才能導入成功

[root@localhost docs]# mysql < init.sql ()

[root@localhost docs]# cp mysql_virtual_alias_maps.cf mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf /etc/postfix/

(因為這個郵件網站用到的是虛擬用戶,這些虛擬用戶需要一些模板,把這3個模板cppostfix主目錄下)

[root@localhost docs]# cd /etc/postfix/

 

[root@localhost postfix]# useradd -u 600 vmail

(釋上句:創建一個真實用戶uid600為郵件大量的虛擬用戶作准備,

原因:我們不能因為郵箱服務器而生成大量的真實用戶,這樣我們會服務器會極度不安全。)

[root@localhost postfix]# vim main.cf (修改主配置文件)

 

 

上圖框內的數據見下面:

 virtual_mailbox_base = /home/vmail

 virtual_uid_maps = static:600

 virtual_gid_maps = static:600

 

 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

 virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

 

[root@localhost postfix]# service postfix restart

 

確保這3個服務都開

  service mysqld start

  service postfix restart

  service httpd start

服務端測試:

 

查看時和下面的都一樣

echo “hi” | mail -s test support@extmail.org

(譯:用mail這個工具給support的用戶發一封郵件,郵件的標題是“test”。郵件的內容是“hi)

[root@localhost vmail]# cd /home/vmail/ (接上面重啟 postfix 后的操作)

[root@localhost vmail]# ls

extmail.org  (這是郵件域)

[root@localhost vmail]# cd extmail.org/

[root@localhost extmail.org]# ls

postmaster (這是郵件域)

[root@localhost extmail.org]# cd postmaster/

[root@localhost postmaster]# ls

Maildir (郵箱)

[root@localhost postmaster]# cd Maildir/

[root@localhost Maildir]# ls

cur  new  tmp (

[root@localhost Maildir]# cd new/

[root@localhost new]# ls

1479976033.V802I9f60aM856237.localhost.localdomain  1479976033.V802I9f60fM868644.localhost.localdomain

1479976033.V802I9f60bM865024.localhost.localdomain  1479976033.V802I9f610M871259.localhost.localdomain

1479976033.V802I9f60eM868351.localhost.localdomain  1479976033.V802I9f611M871433.localhost.localdomain

[root@localhost new]# cat 1479976033.V802I9f60

1479976033.V802I9f60aM856237.localhost.localdomain  1479976033.V802I9f60eM868351.localhost.localdomain

1479976033.V802I9f60bM865024.localhost.localdomain  1479976033.V802I9f60fM868644.localhost.localdomain

[root@localhost new]# cat 1479976033.V802I9f60aM856237.localhost.localdomain

Return-Path: <root@localhost.localdomain>

X-Original-To: support@extmail.org

Delivered-To: postmaster@extmail.org

Received: by localhost.localdomain (Postfix, from userid 0)

id BF7297F446; Thu, 24 Nov 2016 16:24:37 +0800 (CST)

Date: Thu, 24 Nov 2016 16:24:37 +0800

To: support@extmail.org

Subject: test

User-Agent: Heirloom mailx 12.4 7/29/08

MIME-Version: 1.0

Content-Type: text/plain; charset=us-ascii

Content-Transfer-Encoding: 7bit

Message-Id: <20161124082713.BF7297F446@localhost.localdomain>

From: root@localhost.localdomain (root)

 

hirpm -q httpdrpm -q httpdni zuo sha ne

 

 

以上只是做的上圖的上半部分

 

>收郵件--->>>dovecot (還是服務端操作)

mount 查看掛載光盤情況

[root@localhost new]# yum -y install dovecot dovecot.mysql (dovecot-mysql )

(dovecot為主程序,讓dovecot去dovecot-mysql數據庫里驗證用戶名和密碼用的,因為之前init.sql都倒到MySQL里面了)

[root@localhost new]# cd /etc/dovecot/ (配置目錄)

[root@localhost dovecot]# ls

conf.d  dovecot.conf

[root@localhost dovecot]# cd conf.d/

[root@localhost conf.d]# vim 10-mail.conf (和郵件發送相關的一些配置)

 

 mail_location = maildir:~/Maildir (用來設置郵件在本地保存的位置)

%d:郵件域

%n:一個郵件中用戶名部分

所有配置里的選項必須頂頭寫,不頂頭寫系統會不認

167 #first_valid_uid = 600 (設置虛擬用戶的起始uid號)

 

[root@localhost conf.d]# vim 10-auth.conf (需改認證文件)

意思就是說之前用系統去驗證,現在要從sql中去驗證                   

啟用數據庫驗證

如何去數據庫認證,數據庫在哪,數據庫密碼多少得告訴它(如下)

[root@localhost conf.d]# cd ..

[root@localhost dovecot]#

[root@localhost dovecot]#cp /usr/share/doc/dovecot-2.0.9/example-config/dovecot-sql.conf.ext . (注意:當前目錄)

[root@localhost dovecot]# ls

conf.d  dovecot.conf  dovecot-sql.conf.ext (數據庫的文件就過來了)

[root@localhost dovecot]# vim dovecot-sql.conf.ext

 

釋上圖:意思就是說既然要連數據庫,得告訴它要連什么樣的數據庫(這里只寫mysql即可

這些用戶名和密碼是在導入的init.sql時預先定義好了,dbname=extmail是在導入extmail.sql時它生成的

 

上圖釋:(從一個叫mailbox的數據表里調出username, domain, password \3個字段,用戶輸入指定的username(用戶名)和domain(域名)就去匹配 password )

 

釋上圖:當用戶想要查詢用戶名的時候,同樣去MySQL里面調用一個mailbox104行)的表,從這個字段調出maildiruidgid3個字段,調出來3個字段后后再去匹配一個叫username字段的值,username的值就是用戶想要找的用戶名

[root@localhost dovecot]# service dovecot start

[root@localhost dovecot]# yum -y install telnet (以下是收信測試)

[root@localhost conf.d]# telnet localhost 110

Trying ::1...

Connected to localhost.

Escape character is '^]'.

+OK Dovecot ready.

user postmaster@extmail.org (用戶名)

+OK

pass extmail (密碼)

+OK Logged in. (登陸成功)

list   (列出所有郵件)

+OK 7 messages:

1 597

2 571

3 597

4 597

5 597

6 571

7 571

.

retr 1 (意思就是查看第一封郵件)

+OK 597 octets

Return-Path: <root@localhost.localdomain>

X-Original-To: support@extmail.org

Delivered-To: postmaster@extmail.org

Received: by localhost.localdomain (Postfix, from userid 0)

id BF7297F446; Thu, 24 Nov 2016 16:24:37 +0800 (CST)

Date: Thu, 24 Nov 2016 16:24:37 +0800

To: support@extmail.org

Subject: test

User-Agent: Heirloom mailx 12.4 7/29/08

MIME-Version: 1.0

Content-Type: text/plain; charset=us-ascii

Content-Transfer-Encoding: 7bit

Message-Id: <20161124082713.BF7297F446@localhost.localdomain>

From: root@localhost.localdomain (root)

 

hirpm -q httpdrpm -q httpdni zuo sha ne

.   (點是結束標志)

quit     

+OK Logging out. (退出標志)

Connection closed by foreign host.

 

以上做的是認證方面的   圖片的右邊那一部分

 

 

 

如何配置網站郵箱來工作:(接上面繼續做)

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf  rpm安裝出來的apache主配置文件位置)

 

 

<virtualhost *:80>

        ServerName mail.extmail.org (郵件服務器的域名)

        DocumentRoot /var/www/extsuite/extmail/html/         #(指定一下用戶登錄到這個域名以后的默認工作目錄)

        scriptalias /extmail/cgi /var/www/extsuite/extmail/cgi   #(腳本別名)

        alias /extmail  /var/www/extsuite/extmail/html     #(訪問extmail的時候自動跳轉到后面的路徑下)

        scriptalias /extman/cgi /var/www/extsuite/extman/cgi

        alias /extman /var/www/extsuite/extman/html

        suexecusergroup vmail vmail           #useradd添加的那個真實用戶,只有vmail用戶和vmail組有權限加載之前的配置)

</virtualhost>

[root@localhost ~]# cd /var/www/extsuite/extmail/

[root@localhost extmail]# ll (查看、修改cgiWebMail的權限)

[root@localhost extmail]# chown -R vmail:vmail cgi

[root@localhost extmail]# cp webmail.cf.default webmail.cf cp模板產生一個新主配置文件)

[root@localhost extmail]# vim webmail.cf

 

###  /home/后面的位置在哪里看自己當時定的在哪里

 

 

[root@localhost extmail]# cd ../extman/

[root@localhost extman]# ll

[root@localhost extman]# pwd

/var/www/extsuite/extman

[root@localhost extman]# chown -R vmail:vmail cgi/

[root@localhost extman]# cp webman.cf.default webman.cf

[root@localhost extman]# vim webman.cf

 

 

(上圖)認證:現實生產環境中應該啟用這個,這是輸入密碼時的驗證碼,虛擬機環境中需關閉。 SYS_CAPTCHA_ON = 0

[root@localhost extman]# service httpd start

[root@localhost extman]# netstat -apnt

返回壓縮包所在的目錄····

[root@localhost ext]# tar -zxvf Unix-Syslog-1.1.tar.gz

[root@localhost ext]# cd Unix-Syslog-1.1

[root@localhost Unix-Syslog-1.1]# perl Makefile.PL

[root@localhost Unix-Syslog-1.1]# make

[root@localhost Unix-Syslog-1.1]# make install

 

[root@localhost extman]# service httpd start

[root@localhost extman]# netstat -apnt

====================================================================

     ###出現這個是因為沒安裝unix-syslog這個包

=================================================================================

 

最后在本地C:\Windows\System32\drivers\etc下的HOSTS文件里映射出來即可

 

 

 

在客戶瀏覽器端

http://mail.extmail.org #客戶端

賬號是 postmaster

密碼是extmail

域名  extmail.org

 

 

http://mail.extmail.org/extman   #管理員端 (下圖)

 

 

#這里是使用你在mysql里面修改的賬號密碼

 

 

 

 

歡迎加入QQ群一起討論Linux、開源等技術


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM