基礎介紹
Linux上配置郵件服務器是再簡單不過的事情,配置以前請不要把事情想的複雜。無非就是一個發送一個接收。本文咱們將介紹如何使用linux自帶的軟件組完成郵件服務器的配置與安裝,咱們使用的是sendmail和dovecot。 Sendmail是具備較長曆史並不斷髮展的郵件服務器軟件,經過對Sendmail服務器的配置管理,能夠實現基本的郵件發送功能;dovecot服務器實現了POP3協議,能夠與Sendmail服務器配合工做,實現用戶對郵件的收取功能。html
準備工做
若是做爲簡單的練習使用此步驟能夠略過,若爲架設商業的郵件服務器請一一按照步驟覈對。linux
一、準備域名:shell
域名的註冊和解析的知識不懂的請Google。 假定域名爲 jszhan.com 郵件使用的域名爲mail.jszhan.com。數據庫
二、域名解析:vim
![](http://static.javashuo.com/static/loading.gif)
三、反向解析:安全
爲了防止你的郵件被誤認爲是垃圾郵件反向解析是必須的。服務器
反向解析的知識請參閱:反向解析網絡
四、設置主機域名dom
- [root@jszhan ~]hostname jszhan.com
安裝步驟
郵件發送(sendmail):
Sendmail服務器在RHEL系列的linux系統中是默認安裝的,完整的安裝應包括四個軟件包。若是沒安裝或是從新安裝,可使用yum或者rpm命令進行手動安裝。以下:tcp
一、sendmail //是sendmail服務器程序的安裝包,是最重要的軟件包
二、m4 //包括了配置sendmail服務器的必要工具
三、sendmail-cf //包括了從新配置sendmail服務器的必要配置文件
四、sendmail-doc //包括了sendmail服務器的說明文檔
檢查是否安裝:
- [root@jszhan ~]# rpm -qa | grep m4
- m4-1.4.5-3.el5.1
- [root@jszhan ~]# rpm -qa | grep sendmail
- sendmail-8.13.8-8.el5
- sendmail-doc-8.13.8-8.el5
- sendmail-cf-8.13.8-8.el5
沒有安裝請執行:
- [root@jszhan ~]yum install sendmail
查看並設置sendmail服務自啓動的狀態:
- [root@jszhan ~]chkconfig --list sendmail
- [root@jszhan ~]chkconfig --level 35 sendmail on
配置說明
在sendmail服務器的配置目錄下,local-host-names文件用於設置郵件服務器提供郵件服務的域名:
- #直接添加主域名便可
- [root@jszhan ~]# cat /etc/mail/local-host-names
- # local-host-names - include all aliases for your machine here.
- jszhan.com
sendmail服務器的主配置文件是sendmail.cf。它比較複雜,因此一般咱們不會直接去編輯它,而是編輯sendmail.mc文件而後使用m4命令由sendmail.mc文件生成sendmail.cf文件
Sendmail服務器出於安全考慮,默認只對lo網絡接口(127.0.0.1)提供服務,爲了使服務器可以爲主機的全部網絡接口(地址爲0.0.0.0)提供服務,須要在sendmail.mc文件中進行配置的修改
- [root@jszhan ~]# vi /etc/mail/sendmail.mc
- //查找此行
- DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
- //改成
- DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0,Name=MTA')dnl
在sendmail服務器中須要設置發送郵件的用戶認證,RHEL系統中提供的Sendmail服務器提供了SMTP的用戶認證功能,默認沒有啓用,所以須要在sendmail.mc文件中進行以下配置:
- [root@jszhan ~]# vi /etc/mail/sendmail.mc
- //查找此行
- dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
- dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
- //改成
- TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
- define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
提示: 在sendmail.mc文件中,行首的dnl表示該行爲註釋行,是無效的,所以經過去除行首的dnl字符串能夠開啓相應的設置行。
在sendmail服務器中,使用了sasl的第2版(sasl2)做爲SMTP的認證方式:
- #查看是否採用saslauthd驗證
- [root@jszhan ~]# cat /usr/lib/sasl2/Sendmail.conf
- pwcheck_method:saslauthd
檢查sasl安裝包的完整性:
- [root@jszhan mail]# rpm -qa | grep sasl
- [root@jszhan mail]# rpm -qa | grep sasl
- cyrus-sasl-lib-2.1.22-7.el5_8.1
- cyrus-sasl-plain-2.1.22-7.el5_8.1
- cyrus-sasl-2.1.22-7.el5_8.1
-
- #若是sasl安裝不完整,執行下面代碼安裝
- yum install cyrus-sasl
- yum install cyrus-sasl-plain
-
- #下面的命令可查看當前系統中的Cyrus-SASL V2所支持的密碼驗證機制
- saslauthd -v
- #在配置文件/etc/sysconfig/saslauthd中能夠更改密碼的驗證機制
-
- #設爲自啓動
- chkconfig --list saslauthd
- chkconfig --level 35 saslauthd on
創建用戶賬號:
- #創建組
- [root@jszhan ~]# groupadd group-mail
- #建組內用戶
- [root@jszhan ~]# adduser -g group-mail -s /sbin/nologin zpp001
- [root@jszhan ~]# adduser -g group-mail -s /sbin/nologin zpp002
- #設定用戶密碼
- [root@jszhan ~]# passwd zpp001
- Changing password for user zpp001.
- New UNIX password:
- BAD PASSWORD: it is too simplistic/systematic
- Retypenew UNIX password:
- passwd: all authentication tokens updated successfully.
- [root@jszhan ~]# passwd zpp002
- Changing password for user zpp002.
- New UNIX password:
- BAD PASSWORD: it is too simplistic/systematic
- Retypenew UNIX password:
- passwd: all authentication tokens updated successfully.
說明:創建郵件用戶組是爲了便於郵件用戶的管理。使用"-s」選項指定用戶的shell爲"/sbin/nologin」,即不容許用戶登陸Linux系統,從而起到安全的做用。
最後生成sendmail.cf配置文件文件:
- [root@jszhan ~]# cd /etc/mail
- [root@jszhan mail]# m4 sendmail.mc > sendmail.cf
訪問控制的設置:
Sendmail服務器中使用access.db數據庫進行基於主機地址的訪問控制
- [root@jszhan ~]# cat /etc/mail/access
- Connect:localhost.localdomain RELAY
- Connect:localhost RELAY
- Connect:127.0.0.1 RELAY
如需單獨配置請改動這個文件,改動後請從新執行下面語句生成access.db文件
- [root@jszhan ~]# cd /etc/mail
- [root@jszhan mail]# makemap hash access.db < access
說明:此處咱們保持默認設置便可,以此讓sendmail服務器所在主機中的用戶任意發送郵件,而 不須要身份驗證。
重啓服務:
- [root@jszhan]# service saslauthd restart
- Stopping saslauthd:[ OK ]
- Starting saslauthd:[ OK ]
-
- [root@jszhan]# service sendmail restart
- Shutting down sendmail:[ OK ]
- Shutting down sm-client:[ OK ]
- Starting sendmail:[ OK ]
- Starting sm-client:[ OK ]
sendmail的認證信息校驗:
- [root@jszhan]# telnet localhost 25
- Trying127.0.0.1...
- Connected to localhost.
- Escape character is'^]'.
- 220 test.adsldns.org ESMTP Sendmail8.11.6/8.11.6;Mon,24Feb200311:51:04+0800
- #輸入這行進行本機狀態測試
- ehlo localhost
- 250-test.adsldns.org Hello tsai.adsldns.org [127.0.0.1], pleased to meet you
- 250-ENHANCEDSTATUSCODES
- 250-8BITMIME
- 250-SIZE
- 250-DSN
- 250-ONEX
- 250-ETRN
- 250-XUSR
- 250-AUTH LOGIN PLAIN #出現這個說明配置成功了!
- 250 HELP
- #輸入quit 退出
- quit
郵件接收(dovecot):
sendmail服務器實現了SMTP功能,只實現了郵件的發送功能,收取則須要使用POP3或IMAP,下面是郵局基本配置:
系統中自帶了名爲dovecot的RPM安裝包,用於安裝dovecot服務器:
- yum install dovecot
設置dovecot軟件包
- [root@jszhan mail]# vi /etc/dovecot.conf
- //找到下面的一行
- #protocols = imap imaps pop3 pop3s
- //將#註釋去掉
- protocols = imap imaps pop3 pop3s
查看並設置自啓動狀態
- [root@jszhan]# chkconfig --list dovecot
- [root@jszhan]# chkconfig --level 35 dovecot on
- [root@jszhan]# /usr/sbin/dovecot
- 若出錯,Dovecot是試圖綁定到IPv6接口,但您的系統不支持IPv6。解決的辦法是告訴達夫科特只監聽IPv4接口。
- 修改配置項 vi /etc/dovecot/dovecot.conf (listen = *, :: 改成 listen = *)
查看110端口
- [root@jszhan mail]# netstat -ntpl | grep 110
- tcp 00:::110:::* LISTEN 6509/dovecot
這樣,郵件服務器就順利搭建完成了,你能夠採用郵件客戶端訪問此服務器進行郵件收發了。 若是想使用網頁版的郵件服務器能夠自行下載網頁郵箱源碼安裝在服務器上便可。
mail -s 'Test mail' xxx@163.com < body.txt
echo "this is content" | mail -s "this is a title" xxx@163.com
pop3:客戶端接收郵件,能夠刪除移動,不會反饋到服務端
imap:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
一、rpm -ql sendmail |more
二、vim local-host-names
# local-host-names - include all aliases for your machine here.
taimu-mail.000111.cn
三、 ![](http://static.javashuo.com/static/loading.gif)
4\![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
yum -y install cyrus-sasl*
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)