现在的位置: 首页 > 综合 > 正文

sendmail + dovecot

2013年04月06日 ⁄ 综合 ⁄ 共 13120字 ⁄ 字号 评论关闭

出处http://opsmysql.blog.51cto.com/2238445/701613

所用软件:centos 5.6

测试所用域名:jh.com

     Sendmail是UNIX/Linux环境中稳定性较好的一款邮件服务器软件,通过对Sendmail服务器的配置可以实现基本的邮件转发功能;dovecot服务器实现了POP3协议,可以与Sendmail服务器配合工作,实现用户对邮件的收取功能;OpenWebmail是网页形式的邮件应用系统,可实现用户对邮件的发送、收取和管理功能。通过对Sendmail、dovecot和penWebmail的综合管理,系统管理员可以构建出功能完善的邮件应用系统。

本次实验需求:

(1)DNS域名解析;

(2)SMTP认证功能;

(3)pop3服务的配置;

(4)用户别名,及群发邮件的功能;

 

二.DNS环境搭建

1.安装DNS前先修改主机名

dns可以单独作为服务器也可以与sendmail同一台服务器!这里我将他们都安装在同一台服务器中!

可以通过修改“/etc/hosts”和“/etc/sysconfig/network”两个文件更改主机域名。

Centos可以通过setup 来进行修改,不用重启生效!

 2.安装DNS

   [root@mail ~]# yum install bind

安装好DNS后会在/etc目录下生成以下文件:

[root@mail ~]# ll /etc/named.*

-rw-r----- 1 root named 1230 2011-02-23 /etc/named.caching-nameserver.conf

-rw-r----- 1 root named 1018 10-28 05:44 /etc/named.rfc1912.zones

 named.rfc1912.zones是区域定义文件,是BIND 的核心配置文件,它包含了BIND 的基本配置,但其并不包括区域数据。

named.rfc1912.zones 文件定义了DNS 服务器的工作目录所在位置,所有的区域数据文件都存放在该目录中,该文件还定义了DNS 服务器能够管理哪些区域,如果DNS 服务器可以管理某个区域,它将完成该区域内的域名解析工作。

在这里,我们单独建立一个配置文件为:named.conf

[root@mail ~]# vi /etc/named.conf

options {

        directory "/var/named"; //这里是全局配置,这里一定要加进去,不然DNS不会解析!

zone "." IN {

        type hint;

        file "named.ca";

};

zone "jh.com" IN {

        type master;

        file "jh.zone";

        allow-update { none; };

};

 [root@mail ~]# chown :named /etc/named.conf

[root@mail ~]# ll /etc/named.*

-rw-r----- 1 root named 1230 2011-02-23 /etc/named.caching-nameserver.conf

-rw-r--r-- 1 root named  315 10-28 04:53 /etc/named.conf

-rw-r----- 1 root named  975 10-28 04:07 /etc/named.rfc1912.zones

我们再看下区域文件存在的目录:

[root@mail ~]# ll /var/named/

总计 40

drwxr-x--- 5 root  named 4096 10-28 03:39 chroot

drwxrwx--- 2 named named 4096 10-28 03:54 data

-rw-r----- 1 root  named  195 2011-02-23 localhost.zone

-rw-r----- 1 root  named  427 2011-02-23 named.broadcast

-rw-r----- 1 root  named 1892 2011-02-23 named.ca

-rw-r----- 1 root  named  424 2011-02-23 named.ip6.local

-rw-r----- 1 root  named  427 2011-02-23 named.zero

drwxrwx--- 2 named named 4096 2011-02-23 slaves

我们在这里手动建立区域文件:jh.zone、jh.rev .

这里的区域文件在上面配置的/etc/named.conf文件中对应!

下面是我创建好的文件内容:

[root@mail ~]# cat /var/named/jh.zone

$TTL    86400

@               IN SOA  mail.jh.com. root.mail.jh.com. (

                                        42              ; serial (d. adams)

                                        3H              ; refresh

                                        15M             ; retry

                                        1W              ; expiry

                                        1D )            ; minimum

@               IN NS           mail.jh.com.

mail            IN A            172.28.12.60

@               IN MX   10      mail.jh.com.

 [root@mail ~]# cat /var/named/jh.rev

$TTL    86400

@       IN      SOA     mail.jh.com. root.mail.jh.com.  (

                                      1997022700 ; Serial

                                      28800      ; Refresh

                                      14400      ; Retry

                                      3600000    ; Expire

                                      86400 )    ; Minimum

        IN      NS      mail.jh.com.

8       IN      PTR     mail.jh.com.

上面的内容意思本文不作重点,不懂得请查阅相关内容!

DNS服务器环境到此为止也搭建好了.

现在重启named服务:

[root@mail ~]# service named start

启动 named:                                               [确定]

DNS服务启动成功!

 

我们检测下DNS服务是否正常工作:

有两种方法:

[root@mail ~]# ping mail.jh.com

PING mail.jh.com (172.28.12.60) 56(84) bytes of data.

64 bytes from 172.28.12.60: icmp_seq=1 ttl=64 time=0.042 ms

。。。。。。。。。

下面用dig 这个工具来测试:正向和反向解析!

正向测试:

[root@mail ~]# dig -t a jh.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> -t a jh.com

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13312

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

 

;; QUESTION SECTION:

;jh.com.                                IN      A

 

;; AUTHORITY SECTION:

jh.com.                 86400   IN      SOA     mail.jh.com. root.mail.jh.com. 42 10800 900 604800 86400

 ;; Query time: 7 msec

;; SERVER: 172.28.12.60#53(172.28.12.60)

;; WHEN: Fri Oct 28 16:40:14 2011

;; MSG SIZE  rcvd: 70

反向测试:

[root@mail ~]# dig -x 172.28.12.60

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> -x 172.28.12.60

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 27751

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:

;60.12.28.172.in-addr.arpa.     IN      PTR 

;; AUTHORITY SECTION:

12.28.172.in-addr.arpa. 86400   IN      SOA     mail.jh.com. root.mail.jh.com. 1997022700 28800 14400 3600000 86400 

;; Query time: 7 msec

;; SERVER: 172.28.12.60#53(172.28.12.60)

;; WHEN: Fri Oct 28 16:41:14 2011

;; MSG SIZE  rcvd: 95

通过dig这个工具测试到正向和反向都能正常解析工作,说明DNS服务器搭建成功!

还有一点说明下我们还可以用下面的命令来测试配置文件语法是否正确:

named-checkconf

named-checkzone /etc/named/jh.zone

named-checkzone /etc/named/jh.rev 

三.Sendmail服务

一切环境准备就绪,开始正式我们的主角:sendmail。

在系统安装时,默认把sendmial安装好了。

[root@mail mail]# rpm -qa |grep sendmail

sendmail-8.13.8-8.el5

sendmail-cf-8.13.8-8.el5

[root@mail ~]# chkconfig --list |grep sendmail

sendmail        0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭 

安装好后,还是不能配置sendmail,因为sendmail配置文件sendmail.cf不是一般人能搞明白其中的奥妙的,我能只能通过修改sendmail.mc这个配置文件!

m4软件包提供了配置Sendmail服务器必须的工具程序,用来生成sendmail.cf配置文件的,与Sendmail软件包一同默认安装在系统中。

后面会说明如何用m4来生成配置文件的!

[root@mail ~]# rpm -qa |grep m4

m4-1.4.5-3.el5.1 

设置local-host-names文件,用于设置邮件服务器提供邮件服务的域名。

[root@mail ~]# vi /etc/mail/local-host-names

[root@mail ~]# cat /etc/mail/local-host-names

# local-host-names - include all aliases for your machine here.

jh.com 

编辑sendmail.mc文件,有两处需要修改的!

[root@mail ~]# vi /etc/mail/sendmail.mc

开启Sendmail服务器的网络接口,Sendmail服务器出于安全考虑,默认只对lo网络接口(IP地址为127.0.0.1)提供服务,为了使服务器能够为主机的所有网络接口(地址为0.0.0.0)提供服务,需要在sendmail.mc文件中进行配置的修改。 

dnl # address restriction to accept email from the internet or intranet.

dnl #

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

dnl #

dnl # The following causes sendmail to additionally listen to port 587 for 

开启SMTP的用户认证功能。将TRUST_AUTH_MECH(‘EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)前面的dnl以及空格去掉即可。开启之后,邮件服务器要求用户提供用户账户和口令进行身份认证,只有通过身份认证的用户才能通过邮件服务器向外部发送邮件。

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 

现在我们使用m4工具生成sendmail.cf这个配置文件:

[root@mail ~]# cd /etc/mail

[root@mail mail]#

[root@mail mail]# m4 sendmail.mc > sendmail.cf 

启动/etc/rc.d/init.d/sendmail服务,使sendmial.cf配置生效!!

[root@mail mail]# service sendmail restart

关闭 sm-client:                                           [确定]

关闭 sendmail:                                            确定]

启动 sendmail:                                            [确定]

启动 sm-client:                                           [确定] 

开启了Sendmail服务器的认证功能之后,需要确保saslauthd服务程序正确运行。

[root@mail mail]# service saslauthd restart

停止 saslauthd:                                           [确定]

启动 saslauthd:                                           [确定]

邮件用户账户的设置

Sendmail服务器使用Linux系统中的用户账户作为邮件账户,因此为用户添加邮件账户只需要添加Linux账户即可。为了方便用户管理可以将具有同种性质的用户加入某一个组中。

我这里添加一个用户组和三个用户:

[root@mail mail]# groupadd IT

[root@mail mail]# useradd –g IT –s /sbin/nologin zjqiu

[root@mail mail]# passwd zjqiu

[root@mail mail]# useradd –g IT –s /sbin/nologin rfan

[root@mail mail]# passwd rfan

[root@mail mail]# useradd –s /sbin/nologin zsliu

[root@mail mail]# passwd zsliu

zjqiu和rfan 加入到IT组,他们具有相同性质!zsliu 

 

设置邮件别名和邮件群发功能

在Sendmail服务器中使用aliases机制实现邮件别名和邮件群发功能。在/etc目录下同时存在名为aliases和aliases.db的两个文件。aliases文件是文本文件,其内容是可阅读和编辑的,aliases.db是数据库文件,是由aliases文件生成而来的。

[root@mail mail]# ll /etc/aliases*

-rw-r--r-- 1 root root   1532 10-28 04:16 /etc/aliases

-rw-r----- 1 root smmsp 12288 10-28 19:08 /etc/aliases.db

编辑aliases文件,在文件末尾添加”IT:     zjqiu,rfan”  ,

意思是通过给IT@jh.com发邮件,群发到zjqiu@jh.com和rfan@jh.com这两个邮箱中!

[root@mail mail]# vi /etc/aliases

………..

# Person who should get root's mail

#root:          marc

IT:         zjqiu,rfan 

设置完成之后,通过newaliases生成aliases.db文件。

[root@mail mail]# newaliases

/etc/aliases: 77 aliases, longest 10 bytes, 781 bytes total 

如果想让一个用户通过匿名的方式向外发送邮件,可以通过修改access文件,然后通过“makemap hash access.db < access”生成数据库文件。

这里只是说明下做法:

vi /etc/mail/access

根据示例用如下格式加入到该文件的最后:

某个用户的IP                     RELAY

在我的环境里就没有设置!!

全部都安装好后我们测试看DNS有没有与sendmail结合起来:

[root@mail ~]# nslookup

> set q=mx

> jh.com

Server:         172.28.12.60

Address:        172.28.12.60#53

jh.com  mail exchanger = 10 mail.jh.com.

可以看了二者已经结合到一起了!! 

 

四、devecot的安装与配置 

Sendmail服务器并不为MUA软件提供收取邮件的功能,因此系统中需要单独安装实现POP3或IMAP4功能的服务器程序。

系统默认安装了devecot软件,由于devecot服务器依赖的软件包比较多,因此建议使用上面搭建YUM源来安装!

[root@mail mail]# yum -y install dovecot

Loaded plugins: fastestmirror

Determining fastest mirrors

c5-media                                                 | 1.1 kB     00:00

c5-media/primary                                         | 954 kB     00:00

c5-media                                                              2683/2683

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package dovecot.i386 0:1.0.7-7.el5 set to be updated

--> Processing Dependency: libmysqlclient.so.15 for package: dovecot

--> Processing Dependency: libmysqlclient.so.15(libmysqlclient_15) for package: dovecot

--> Running transaction check

---> Package mysql.i386 0:5.0.77-4.el5_5.4 set to be updated

--> Processing Dependency: perl(DBI) for package: mysql

--> Running transaction check

---> Package perl-DBI.i386 0:1.52-2.el5 set to be updated

--> Finished Dependency Resolution

.......................................................

.......................................................

Running Transaction

  Installing     : perl-DBI                                                 1/3

  Installing     : mysql                                                    2/3

  Installing     : dovecot                                                  3/3

Installed:

  dovecot.i386 0:1.0.7-7.el5

Dependency Installed:

  mysql.i386 0:5.0.77-4.el5_5.4            perl-DBI.i386 0:1.52-2.el5 

可以看到dovecot依赖的包是:perl-DBI、MYSQL、dovecot!! 

[root@mail mail]# rpm -qa |grep dovecot

dovecot-1.0.7-7.el5

安装好dovecot软件包,会在/etc下生成如下配置文件:

[root@mail mail]# ll /etc/dovecot.conf

-rw-r--r-- 1 root root 42901 2009-01-21 /etc/dovecot.conf

安装好的dovecot服务不要作任何修改直接可以启动!

[root@mail mail]# service dovecot start

启动 Dovecot Imap:                                        [确定]

把它加入系统服务,随系统开机启动:

[root@mail mail]# chkconfig --level 35 dovecot on

[root@mail mail]# chkconfig --list |grep dovecot

dovecot         0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭

测试方法

[root@mail mail]# mail -s "Hello Subject" IT@jh.com[Enter]

This is a test mail[Enter]

[Ctrl + D]

——————————————————————————————————————————————————————————————

——————————————————————————————————————————————————————————————————

http://dev.halhal.info/archives/11

CentOS メールサーバー構築(sendmail+Dovecot)

1. sendmailインストール
(1) sendmail-cfインストール
sendmail.mc から sendmail 設定ファイル(sendmail.cf)を作成するために sendmail-cf をインストールする。

yum コマンドで sendmail-cf をインストールする
[root@CentOS52 ~]# yum -y install sendmail-cf

(2) sendmail設定

sendmail.mc を編集
[root@CentOS52 ~]# vi /etc/mail/sendmail.mc
変更(外部からの受信を許可)
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
↓
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
変更(送信元アドレスの@以降をドメイン名にする)
dnl MASQUERADE_AS(`mydomain.com')dnl
↓
MASQUERADE_AS(`(your domain)')dnl
変更(エンベロープFromも書き替える)
dnl FEATURE(masquerade_envelope)dnl
↓
FEATURE(masquerade_envelope)dnl
変更(送信元がrootの場合も書き替える)
EXPOSED_USER(`root')dnl
↓
dnl EXPOSED_USER(`root')dnl
行頭のdnlを削除(SMTP-Auth有効化)
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
↓
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
最終行へ追加(受信メールサイズを10MB=10*1024*1024に制限)
define(`confMAX_MESSAGE_SIZE',`10485760')
最終行へ追加(メールサーバー名&バージョン情報の隠蔽)
define(`confSMTP_LOGIN_MSG',`unknown')dnl
define(`confRECEIVED_HEADER',`$?sfrom $s $.$?_($?s$|from $.$_)
$.$?{auth_type}(authenticated)
$.by $j (unknown)$?r with $r$. id $i$?u
for $u; $|;
$.$b')dnl
sendmail.mcよりsendmail.cf作成
[root@CentOS52 ~]# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
ホスト名を記述
[root@CentOS52 ~]# vi /etc/mail/local-host-names
CentOS52


(3) SMTP-Auth設定
SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合

SMTP-Auth認証設定ファイル編集
[root@CentOS52 ~]# vi /usr/lib/sasl2/Sendmail.conf
変更
pwcheck_method:saslauthd
↓
pwcheck_method:auxprop

(4) Maildir形式メールボックス作成
新規ユーザ追加時に自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにする

新規ユーザ追加時に自動で各種メールボックス作成
[root@CentOS52 ~]# mkdir -p /etc/skel/Maildir/new
[root@CentOS52 ~]# mkdir -p /etc/skel/Maildir/cur
[root@CentOS52 ~]# mkdir -p /etc/skel/Maildir/tmp
[root@CentOS52 ~]# chmod -R 700 /etc/skel/Maildir/

(5) Maildir形式メールボックス対応
sendmailはMaildir形式メールボックスに対応していないため、ProcmailでMaildir形式メールボックスへ配送するようにする。

procmail設定ファイル作成
[root@CentOS52 ~]# vi /etc/procmailrc
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$HOME/procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力

(6) 未承諾広告メールの削除
未承諾広告メール(件名に「未承諾広告※」と表示されているメール)は受信せずに削除するようにする。

procmail設定ファイル編集
[root@CentOS52 ~]# vi /etc/procmailrc
以下を追加
# 未承諾広告メール削除※ システムの文字コードがUTF-8(デフォルト)の場合
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -mwZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null
# 未承諾広告メール削除 ※システムの文字コードがEUCの場合
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -meZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null

2. sendmail再起動
(1) sendmail再起動

sendmail再起動
[root@CentOS52 ~]# /etc/rc.d/init.d/sendmail restart
sm-client を停止中:                    [ OK ]
sendmail を停止中:                     [ OK ]
sendmail を起動中:                     [ OK ]
sm-client を起動中:                    [ OK ]

(2) ポート25番のOPEN
ルータの設定でポート25番をOPENする。

3. Dovecotをインストールする
(1) Dovecotインストール

Dovecotインストール
[root@CentOS52 ~]# yum -y install dovecot

(2) Dovecot設定

Dovecot設定ファイル編集
[root@CentOS52 ~]# vi /etc/dovecot.conf
追加(POPアクセスを追加)
#protocols = imap imaps
↓
protocols = imap imaps pop3 pop3s

追加(メールボックス形式をMaildir形式とする
mail_location = maildir:~/Maildir

(3) Dovecot起動

Dovecot再起動
[root@CentOS52 ~]# /etc/rc.d/init.d/dovecot start
Dovecot Imapを起動中:                    [ OK ]

Dovecot自動起動設定
[root@CentOS52 ~]# chkconfig dovecot on

抱歉!评论已关闭.