該實驗系統:cetnos 6.5
sendmail:性能好,設置復雜,適合老手
qmail:體積小260+k ,模塊化。需要做二次開發,適合對郵件性能有要求的
postfix:前身是sendmail,postfix原本是sendmail里面的一個模塊,紅帽6默認安裝好postfix
zmailer:近幾年才出來的郵件
coremail:國內做的最好的商業平台,運行在linux上
Pop:允許客戶端下載郵件,移動標記已讀等操作 不會反饋到服務器、
Imap4:雙向通訊,客戶端的操作會反饋到服務器,提供想更過的功能,聽歌更好的郵件管
發郵件:
收郵件的時候都是用的pop3和 IMAP4 ,區別在於pop3最早的收郵件的協議,功能最簡單IMAP4是后來新加入了的一個收郵件的協議,功能相對復雜,可以支持郵件預覽、附件預覽等等。從根本上來說pop3這個收郵件的操作都必須在本地進行,而ipmap4這個收郵件的操作都必須服務器上進行,如果用的pop3當你收到郵件時必須先下載下來才能看,ipmap4則是在服務器端,如用的imap4協議的話可以先是誰發的, 什么時候發的有沒必要下載下來然后做決定是下載到本地還是放棄下載,能看到一部分摘要信息。Imap4協議和pop比起來imap4協議支持的功能更多一點但是在實際生產環境里用的pop3的多,功能簡單,要知道功能強大的背后犧牲的是服務器的性能
收郵件:
SMTP協議
和FTP一樣是誕生最早的一批協議,用的是25號tcp端口,加密時使用是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個模板cp到postfix主目錄下)
[root@localhost docs]# cd /etc/postfix/
[root@localhost postfix]# useradd -u 600 vmail
(釋上句:創建一個真實用戶uid為600為郵件大量的虛擬用戶作准備,
原因:我們不能因為郵箱服務器而生成大量的真實用戶,這樣我們會服務器會極度不安全。)
[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里面調用一個mailbox(104行)的表,從這個字段調出maildir、uid和gid這3個字段,調出來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 (查看、修改cgi和WebMail的權限)
[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文件里映射出來即可
在客戶瀏覽器端
賬號是 postmaster
密碼是extmail
域名 extmail.org
http://mail.extmail.org/extman #管理員端 (下圖)
#這里是使用你在mysql里面修改的賬號密碼
歡迎加入QQ群一起討論Linux、開源等技術