Postfix+Dovecot+OpenLDAPでメールサーバ Type-2

Postfix + Dovecot + OpenLDAPによるメールサーバ構築です。

構築環境は、CentOS-5を前提にしてますが、他のデェストリビューションでも差異は少ないと思います。

それぞれのバージョンは、Postfix-2.3.3、Dovecot-1.0系、OpenLDAP-2.3.43を利用しました。

 

 

Postfix+Dovecot+OpenLDAP構成のシステム設定例

当サイトでは現在3パターンのシステム構成例を掲載しています。

Postfix+Dovecot+OpenLDAPでメールサーバ Type-1
Postfix+VDAパッチでQuota管理、SMTP認証にはCyrus-SASLを利用した例

 

Postfix+Dovecot+OpenLDAPでメールサーバ Type-2
Dovecot-1.0系を利用しQuotaを管理し、Dovecot Sieveパッチでメール振り分けを実施。SMTP認証にはDovecot-SASLを利用した例

 

Postfix+Dovecot+OpenLDAPでメールサーバ Type-3
Dovecot-2.0系を利用しQuotaを管理し、Dovecot-Pigeonhole sieveでメール振り分けを実施。SMTP認証にはDovecot-SASLを利用した例

 

 

メールサーバの概要

今回構築するのは、バーチャルドメインのメールサーバで、以下のプロトコルをサポートしています。

SMTP、SMTPS、POP、POPS、IMAP IMAPSです。

SMTP認証にはDovecotのSASLを利用します。

また、メールボックスはMailDir形式とします。

ユーザー管理はOpenLDAPに一元化し、認証には、ユーザIDとパスワードを利用します。

送受信の概要は以下のようになります。

 

 

 

OpenLDAP

今回の構成では、ユーザ管理にOpenLDAPを利用します。

なお、OpenLDAPを用いる場合は、キャッシュ機能を提供する、nscdを実行される事をお勧めします。

 

OpenLDAPのインストール

OpenLDAPのインストールと初期設定が必要ですが、ここでは割愛させていただきます。

OpenLDAPのインストールと設定については、こちらを参照ください。

 

メール用スキーマの作成

OpenLDAPのデータ定義はスキーマファイルによって決められています。

今回構築するシステムでは、標準のスキーマだけでは足りないため、独自にmail.schemaファイルを作成します。

独自定義のスキーマ(mail.schema)

attributetype (1.1.2.1.1.1 NAME 'mailForward'
    DESC 'forward address'
    EQUALITY caseExactIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

attributetype (1.1.2.1.1.2 NAME 'mailAlias'
    DESC 'alias address'
    EQUALITY caseExactIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

attributetype (1.1.2.1.1.7 NAME 'accountActive'
    DESC 'active or not active'
    EQUALITY booleanMatch
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE)

attributetype (1.1.2.1.1.8 NAME 'domainName'
    DESC 'domain name'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

attributetype (1.1.2.1.1.10 NAME 'transport'
    DESC 'transport'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

attributetype (1.1.2.1.1.12 NAME 'mailQuota'
    DESC 'Mail Home Directory Max byte'
    EQUALITY integerMatch
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE)

objectClass (1.1.2.2.1.2 NAME 'mailUser'
    DESC 'mail user Object'
    SUP inetOrgPerson
    MUST ( transport $ homeDirectory $ accountActive $ domainName $ userPassword $ mailQuota )
    MAY  ( mailForward $ mailAlias ))

 

mail.schemaの解説

スキーマにはメールシステムで利用する要素とオブジェクトクラスが定義してあります。

スキーマのデータ属性(attributetype)

属性名 説明 参照先
transport SMTPのtransport設定(基本的に”dovecot”で固定) Postfix
domainName 属ドメイン名 Postfix
accountActive アカウントの有効/無効をTRUE/FALSEで指定 Dovecot
mailQuota メールボックスのQuota Dovecot
mailForward 転送先メールアドレス Postfix
mailAlias 別名メールアドレス(エイリアス) Postfix

オブジェクトクラス

objectClass名 説明
mailUser ユーザ用メールアカウント

 

 

OpenLDAPの設定

mail.schemaを、OpenLDAPのschemaファイルの保存先にコピーします。

cp mail.schema /etc/opemldap/schema/

 

OpenLDAPのslapd.confでmail.schemaのinclude、index、アクセス制限などの設定を行います。

include		/etc/openldap/schema/core.schema
include		/etc/openldap/schema/cosine.schema
include		/etc/openldap/schema/inetorgperson.schema
include		/etc/openldap/schema/nis.schema
include		/etc/openldap/schema/mail.schema

# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2

pidfile		/var/run/openldap/slapd.pid
argsfile	/var/run/openldap/slapd.args

database	bdb
suffix		"o=unixlife,c=JP"
rootdn		"cn=Manager,o=unixlife,c=JP"
rootpw		{MD5}lsKji-Ji.Ljyd=

directory	/var/lib/ldap

ndex objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub

access to dn.subtree="ou=Mail,o=unixlife,c=JP" attrs=userPassword
	by self write
	by anonymous auth
	by * none
access to *
	by self write
	by * read

 

OpenLDAPの起動確認

slapd.confの設定をしましたので、OpenLDAPが正常に起動するか確認します。

OpenLDAPを起動後、以下のコマンドを発行してください。

ldapsearch -x -b '' -s base +

ずらずらずら、とメッセージがでれば取りあえず起動は成功です。

ldap_bind: Can’t contact LDAP serverって出たら、残念、起動に失敗してますので、設定ファイルを見直してください。

 

indexの再構築

slap.confでindexの設定をしましたので、indexの再構築も実施しておきます。

slapindex -v -b o=unixlife,c=JP -f slapd.conf

 

 

メールシステム用登録データの作成

OpenLDAPにメールシステム用のldifを流し込みデータを登録します。

 

メールシステム用LDAPツリーの設計

メールシステム用で利用するツリー構成です。

					------------------------
					|rootdn:o=unixlife,c=JP|
					------------------------
						|
					-------------------------
					|ou=Mail,o=unixlife,c=JP|
					-------------------------
					|			|
	----------------------------------------	-----------------------------------------
	|dc=unixlife.jp,ou=Mail,o=unixlife,c=JP|	|dc=examples.com,ou=Mail,o=unixlife,c=JP|
	----------------------------------------  	-----------------------------------------
					|			|
-------------------------------------------------  ---------------------------------------------------
|uid=user1@unixlife.jp,dc=unixlife.jp,ou=Mail・・|  |uid=user1@examples.com,dc=examples.com,ou=Mail・・|
-------------------------------------------------  ---------------------------------------------------
	|uid=user2@unixlife.jp,・・・・・・・・		|uid=user2@examples.com,・・・・・・・・・
	--------------------------------------		---------------------------------------
		|uid=user3@unixlife.jp,・・・・・・・		|uid=user3@examples.com,・・・・・・・・
		-------------------------------------		-------------------------------------

バーチャルドメインでの利用を前提としたツリー構成としました。

ここでは、unixlife.jpとexamples.comの2つのドメインを管理し、そのドメイン配下にユーザーを追加する形としました。

 

 

OpenLDAPへの登録データの作成

OpenLDAPへのデータ登録はldifファイルを作成し行います。ファイルは文字コードをUTF-8で作成してください。

 

TOPツリーデータの作成(top.ldif)

まずは、最低限必要なLDAPのTOPとMail用データを作成します。

top.ldif

dn: o=unixlife,c=JP <---LDAPのTOPツリー
objectClass: organization
o: unixlife

dn: ou=Mail,o=unixlife,c=JP <---Mailツリー
objectClass: organizationalUnit
ou: Mail

 

ドメインのデータ作成(domain.ldif)

ドメインのデータを作成します。ここでは、unixlife.jpとexamples.comを作成します。

domain.ldif

dn: dc=unixlife.jp,ou=Mail,o=unixlife,c=JP <---unixlife.jpドメイン
objectClass: dcObject
objectClass: organization
dc: unixlie.jp
o:  unixlife

dn: dc=examples.com,ou=Mail,o=unixlife,c=JP <---examples.comのドメイン
objectClass: dcObject
objectClass: organization
dc: examples.com
o:  unixlife

 

ユーザデータの作成

メールユーザ用データを作成しますが、ここには多くの設定項目がありますので、まずは項目別の表を参照してください。

属性名 説明 値の例 必項属性
cn ラストネーム tomoya 必項
sn ファーストネーム sakurai 必項
uid ユーザID user1@unixlife.jp 必項
userPassword パスワード {MD5}kd.ssjdytTrg= 必項
homeDirectory ユーザのホームディレクトリ /home/vmail/unixlife.jp/user1 必項
mail ユーザのメールアドレス user1@unixlife.jp 必項
mailForword 転送先メールアドレス hogehoge@hogehoge.com 任意
mailAlias 別名メールアドレス(Alias) webmaster@unixlife.jp 任意
accountActive アカウントの有効/無効をTRUE/FALSEで指定 TRUE 必項
domainName 所属ドメイン名(dn:のdc=の値) unixlife.jp 必項
mailQuota メールQuotaの容量設定(例:20MB)。0=無制限 20480 必須
transport transport基本的にdovecotで固定 dovecot 必須

 

属性の詳細説明

・uid

ユーザ認証用にはメールアドレスと同一値を利用します。

・mailForword

mail及びmailAlias宛に来たメールを、ここに設定されたメールアドレスへ転送します。

・mailAlias

設定されたメールアドレス宛のメールも受信します。

・accountActive

“FALSE”に設定すると、一時的にこのアカウントの利用を停止できます。

では、実際にメールユーザ登録用ldifファイル(user.ldif)を作成します。

 

ユーザデータの作成(user.ldif)

ここでは、unixlife.jpに2名、examples.comに1名作成します。

user.ldif

dn: uid=user1@unixlife.jp,dc=unixlife.jp,ou=Mail,o=unixlife,c=JP
objectClass: mailUser
cn:sakurai
sn:tomoya
uid: user1@unixlife.jp
userPassword: {MD5}kJ.HtIols6ks=
homeDirectory: /home/vmail/unixlife.jp/user1
mail: user1@unixlife.jp
mailAlias: webmaster@unixlife.jp
accountActive: TRUE
domainName: unixlife.jp
mailQuota: 20480
transport: dovecot

dn: uid=user2@unixlife.jp,dc=unixlife.jp,ou=Mail,o=unixlife,c=JP
objectClass: mailUser
cn:yamada
sn:taro
uid: user2@unixlife.jp
userPassword: {MD5}Jrtd.LouyTrf=
homeDirectory: /home/vmail/unixlife.jp/user2
mail: user2@unixlife.jp
accountActive: TRUE
domainName: unixlife.jp
mailQuota: 20480
transport: dovecot

dn: uid=user1@examples.com,dc=examples.com,ou=Mail,o=unixlife,c=JP
objectClass: mailUser
cn:ito
sn:jiro
uid: user1@examples.com
userPassword: {MD5}JROlkJ.Sdjk=
homeDirectory: /home/vmail/examples.com/user1
mail: user1@examples.com
accountActive: TRUE
domainName: examples.jp
mailQuota: 10240
transport: dovecot

 

メールデータ用ldaifデータの登録

ようやくデータファイルの作成が終了しましたので、これをLDAPに登録して行きます。

TOPツリー用ldifの登録

ldapadd -x -h localhost -D "cn=Manager,o=unixlife,c=JP" -w パスワード -f top.ldif

ドメイン用ldifの登録

ldapadd -x -h localhost -D "cn=Manager,o=unixlife,c=JP" -w パスワード -f domain.ldif

ユーザ用ldifの登録

ldapadd -x -h localhost -D "cn=Manager,o=unixlife,c=JP" -w パスワード -f user.ldif

これで必要なデータはLDAPに登録されました。

登録データの検索や更新などの実験をアクセス権限の確認も含めやってみてください。

 

 

Postfixのインストール

Postfixをインストールして、デフォルトのMTAに設定します。

yum install postfix

 

PostfixをデフォルトのMTAに変更します。

alternatives --config mta

 

Postfixの設定

Postfixの設定は、master.cfとmain.cfで行います。

ここでは、メール配送に関する設定をmain.cfにしていきます。

また、メールボックスにメールを配送するのには、Dovecotのdeliverを利用しますので必要な設定をmaster.cfにも行います。

なお、今回利用するドメインは、OpenLDAPに登録した”unixlife.jp”と”examples.com”です。

同時に、メールサーバの不正中継を防止するために、SMTP認証を導入します。SMTP認証にはDovecotのSASLを利用します。

設定ポリシとしては、自ホストからのSMTP接続には認証を除外しますが、それ以外は全て認証が必要とします。

/etc/postfix/main.cf
main.cfは、最下行に以下の内容を追加する形で設定していきます。

#inet_interfaces = localhost <---コメントにする
myhostname = mail.unixlife.jp
mydomain = unixlife.jp
mynetworks = 127.0.0.0/8
mydestination = $myhostname, localhost.$mydomain, localhost, ldap:/etc/postfix/vdomain.cf<-処理ドメインをLDAPから取得

message_size_limit = 10240000 <---1メッセージの最大容量(10MB)
mailbox_size_limit = 512000000 <---メールボックスの最大容量(500MB)

dovecot_destination_recipient_limit = 1 <---Dovecot deliverを利用する場合に指定
transport_maps = ldap:/etc/postfix/transport.cf <---LDAPから取得、通常はdovecot
virtual_alias_maps = ldap:/etc/postfix/account.cf <---LDAPからメールアドレスを取得

local_transport = local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

unknown_local_recipient_reject_code = 550

# Dovecot-SASL Enable <---Dovecot-SASLの有効化
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# Relay Settings on Dovecot-SASL <---アクセス制限(Dovecot-SASLも追加)
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

 

/etc/postfix/master.cf

メールボックスにメールを配送するのには、Dovecotのdeliverを利用しますので、/etc/postfix/master.cfに以下の設定をします。

tlsmgr    unix  -       -       n       1000?   1       tlsmgr

# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
dovecot unix    -       n       n       -       -       pipe
 flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}

OpenLDAPからデータを取得するための設定ファイルを作成していきます。

main.cf内には、OpenLDAPよりデータを取得するための設定ファイルが読み込まれています。

このファイルの書式は以下の通りです。

server_host = OpenLDAPのホストを指定

search_base = 検索dn:を指定

query_filter = 検索条件を指定(%sはメールアドレス)

result_attribute = 検索後に取得したい値を持つ、属性を指定

 

トランスポート値の取得

/etc/postfix/transport.cf

server_host = localhost
server_host = 192.168.1.1, 192.168.1.2 <---LDAPサーバが2台ある場合
search_base = ou=Mail,o=unixlife,c=JP
query_filter = (&(objectClass=mailUser)(|(mail=%s)(mailAlias=%s))(accountActive=TRUE))
result_attribute = transport

 

メールの配送アドレスを取得

/etc/postfix/account.cf

server_host = localhost
server_host = 192.168.1.1, 192.168.1.2 <---LDAPサーバが2台ある場合
search_base = ou=Mail,o=unixlife,c=JP
query_filter = (&(objectClass=mailUser)(|(mail=%s)(mailAlias=%s))(accountActive=TRUE))
result_attribute = mail, mailForward

メールの所属ドメインを取得

/etc/postfix/vdomain.cf

server_host = localhost
server_host = 192.168.1.1, 192.168.1.2 <---LDAPサーバが2台ある場合
search_base = ou=Mail,o=unixlife,c=JP
query_filter = (domainName=%s)
result_attribute = domainName

これで、Postfixの設定は終了です。

 

 

Dovecot

今回は、POP、IMAPサーバにDovecotを利用します。RedHatやCentOSでは5系から、標準パッケージとして提供されています。

インストールは、以下のコマンドで。

yum install dovecot

 

Dovecotの設定

Dovecotの設定は、基本設定の/etc/dovecot.confとLDAP連携用の/etc/dovecot-ldap.confで行います。

ここでは、DovecotのSASLとQuotaプラグインも一緒に設定しています。

doveot.confの設定

## Dovecot configuration file

protocols = imap pop3 <---利用プロトコルを指定
mail_location = maildir:%h/Maildir

syslog_facility = mail <---ログをsyslogで管理

ssl_disable = yes

protocol imap { <---プロトコル毎の設定
	mail_plugins = quota imap_quota <---Quotaの有効化
}
protocol pop3 { <---プロトコル毎の設定
	pop3_uidl_format = %v-%u
	mail_plugins = quota <---Quotaの有効化
}
protocol lda {
        postmaster_address = root@localhost
        mail_plugins = quota <---Quotaの有効化
        syslog_facility = mail
}

auth default { <---認証の設定
 mechanisms = plain
 socket listen {
  master {
        path = /var/run/dovecot/auth-master
        mode = 0600
        user = vmail
        group = vmail
  }
  client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
   }
 }
 passdb ldap {
        args = /etc/dovecot-ldap.conf
 }
 userdb ldap {
        args = /etc/dovecot-ldap.conf
 }
}

 

dovecot-ldap.confの設定

# This file is opened as root, so it should be owned by root and mode 0600.
hosts = localhost <---LDAPサーバを指定
hosts = 192.168.1.1,192.168.1.2 <---LDAPサーバが2台ある場合

# Use TLS to connect to the LDAP server.
tls = no <---LDAP接続時にTLSを利用するかどうか指定
auth_bind = yes <---LDAPサーバにbindし利用する

# LDAP protocol version to use. Likely 2 or 3.
ldap_version = 3 <---LDAPのバージョンを指定

# LDAP base. %variables can be used here.
base = ou=Mail,o=unixlife,c=JP <---LDAPのベースDNを指定

# Dereference: never, searching, finding, always
deref = never

# Search scope: base, onelevel, subtree
scope = subtree

# User attributes are given in LDAP-name=dovecot-internal-name list. The
# internal names are:
#   uid - System UID
#   gid - System GID
#   home - Home directory
#   mail - Mail location
#
user_attrs = homeDirectory=home,mailQuota=quota=maildir:storage

# Filter for user lookup. Some variables can be used (see
# http://wiki.dovecot.org/Variables for full list):
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if user there's no domain
user_filter = (&(objectClass=mailUser)(uid=%u)(accountActive=TRUE))

# If you wish to avoid two LDAP lookups (passdb + userdb), you can use
# userdb prefetch instead of userdb ldap in dovecot.conf. In that case you'll
# also have to include user_attrs in pass_attrs field prefixed with "userdb_"
# string. For example:

# Filter for password lookups
pass_filter = (&(objectClass=mailUser)(uid=%u)(accountActive=TRUE))

#default_pass_scheme = MD5

user_global_uid = 500
user_global_gid = 500

Dovecotの設定は以上です。

 

 

バーチャル環境の配送ユーザと配送先ディレクトリの作成

バーチャル環境では、実際にメール配送するユーザアカウントは1つです。

そこで、このメール配送用アカウントとメールの配送先ディレクトリを先に作成します。

メール配送ユーザの作成

グループの作成

groupadd -g 500 vmail

ユーザの作成

useradd -g 500 -s /sbin/nologin -u 500 vmail

 

配送先ディレクトリの作成

ここでは、2つのドメインを扱うため、それぞれのディレクトリを作成します。

mkdir -p /home/vmail/unixlife.jp
mkdir -p /home/vmail/examples.com
chmod -R 700 /home/vmail
chown -R vmail.vmail /home/vmail

 

 

動作確認

ここでは、メールの配送、POPサーバへのログインなどの動作確認を行います。

 

メールの配送確認

設定が終了したら、メール配送のテストをしてください。

メールの配送テストは、”telnet”コマンドを利用すると良いでしょう。

なお、Postfixでは、配送時に配送ディレクトリが無ければ、Postfixが作成してくれます。

telnetコマンドを利用したメール配送テストは以下の用に利用します。

%telnet localhost 25 <---telnetでSMTP(25)へ接続
Trying 127.0.0.1...
Connected to rx7 (127.0.0.1).
Escape character is '^]'.
220 mail.unixlife.jp ESMTP Postfix
helo examples.com  <---helo 接続元ドメイン
250 mail.unixlife.jp
mail from: user1@unixlife.jp <---メール送信元(mail from:)
250 Ok
rcpt to: user1@examples.com <---メール送信先(rcpt to:)
250 Ok
data  <---メール本文を入力するため"data"を入力
354 End data with .
Subject: TEST   <---メール件名を入力

Test Mail.  <---メール本文を入力
.   <---"."で入力終了

250 Ok: queued as D47GB7A2172
quit   <---telnet終了
220 Bye

これで、配送の確認ができればOKです。

 

 

SMTP認証の動作確認

SMTP認証と機構が想定通り機能しているか試します。

これは、SMTPサーバが不正中継などに利用されない為にも、必要な作業です。

 

SMTP認証機構の確認

SMTP認証が機能しているか確認します。これは”telnet”から行います。

%telnet localhost 25 <---ローカルホストの25番ポートに接続
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.example.jp.
Escape character is '^]'.
220 mail.unixlife.jp ESMTP Postfix
ehlo unixlife.jp <---ehloを発行
250-mail.unixlfie.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-XVERP
250 8BITMIME
auth plain <---認証方式を指定
334

250-AUTH LOGIN PLAINが出力されれば、SMPT-AUTHは動作しています。

 

SMTP認証確認の動作確認

実際にSMTP認証を有効にしてSMTPサーバに接続できるか試してください。

また、SMTP認証を利用しない場合、SMTPサーバを利用出来ない事を確認してください。

これには、適当なメールクライアントを利用するのが最もお手軽です。

 

不正中継の確認

不正中継も確認しておきましょう。

いくつかのサイトに、メールの不正中継チェックをしてくれる所がありますので、それを利用すると良いでしょう。

 

 

POP,IMAPの動作確認

POP、IMAPの動作確認を行ってください。

なお、認証の確認はtelnetで行う事ができます。

telnet localhost 110 <---telnetでPOPに接続
rying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
user ユーザID <---ユーザIDを入力
+OK
pass パスワード <---パスワードを入力
+OK Logged in.
quit <---接続を切断
+OK Logging out.
Connection closed by foreign host.

ここでは、POPS、IMAPSの設定は行っていませんが、これは後ほど追加します。

 

 

SSLの設定

ここでは、SMTP、SMTP-AUTH、POP、IMAPをSSLに対応させます。

具体的には、PostfixとDovecotにSSLの設定を入れて行きます。

SSLに必要なファイル

SSLの設定をするのに必要なファイルを列挙します。

サーバの証明書

サーバの秘密鍵

CAの証明書

なお、証明書の作成方法は、こちらをご覧ください。

 

PosfixのSSL対応

PostfixのSSL対応用の設定をしていきます。

/etc/postfix/main.cfに以下を追加

# SSL Configuration
smtpd_tls_cert_file = /etc/pki/SERVER/cert.pem
smtpd_tls_key_file = /etc/pki/SERVER/serverkey.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
smtpd_use_tls = yes

 

/etc/postfix/master.cfで以下の行のコメントを外します。

smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
tlsmgr    unix  -       -       n       1000?   1       tlsmgr

設定が完了したら、Postfixを再起動します。

 

なお、Postfixの設定はこれで終了ですので、main.cfの設定を掲載します。

#inet_interfaces = localhost
myhostname = mail.unixlife.jp
mydomain = unixlife.jp
mynetworks = 127.0.0.0/8
mydestination = $myhostname, localhost.$mydomain, localhost, ldap:/etc/postfix/vdomain.cf

message_size_limit = 10240000
mailbox_size_limit = 512000000

dovecot_destination_recipient_limit = 1
transport_maps = ldap:/etc/postfix/transport.cf
virtual_alias_maps = ldap:/etc/postfix/account.cf

local_transport = local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

unknown_local_recipient_reject_code = 550

# SSL Configuration
smtpd_tls_cert_file = /etc/pki/SERVER/cert.pem
smtpd_tls_key_file = /etc/pki/SERVER/serverkey.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache

# Dovecot-SASL Enable
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# Relay Settings on Dovecot-SASL
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

 

 

DovecotのSSL対応

/etc/dovecot.confに以下の行を追加、変更します。

## Dovecot configuration file

protocols = imap imaps pop3 pop3s <---imaps pop3sを追加
mail_location = maildir:%h/Maildir

ssl_disable = no <---SSLの設定を追加
ssl_cert_file = /etc/pki/SERVER/cert.pem
ssl_key_file = /etc/pki/SERVER/serverkey.key
ssl_ca_file = /etc/pki/CA/cacert.pem
ssl_verify_client_cert = no
----------- 以下略 ---------------

Dovecotを再起動すれば、POPS、IMAPSも利用出来るようになっています。

これで、Postfix+Dovecot+OpenLDAPによるメールサーバの構築は終了です。

なお、追加でウィルス対策やスパムメール対策も行う事が可能です。

その場合は、Postfix+Clamav+Spamassassinの設定を参照ください。

 

 

簡易メーリングリスト機能の追加

OpenLDAPを利用して簡易メーリングリスト機能を追加する方法を記載します。

簡易メーリングリストとは、Mailmanなどの一般的なメーリングリストサーバの様な多機能な物ではなく、あるメールアドレス宛のメールを複数のメールアドレス宛に送信するだけの物ですが、以外と重宝します。

これを、PostfixとOpenLDAPに設定を追加し実現して行きたいと思います。

 

OpenLDAPのschema設定

まずは、簡易メーリングリストで利用するスキーマ設定を追記します。

追記するのは、先ほど作成したmail.schemaファイルです。

このファイルに、必要なデータ型とオブジェクトクラスの設定を行います。

データ型の定義(ML参加者のメールアドレスを格納する)
attributetype (1.1.2.1.1.11 NAME 'mailDrop'
    DESC 'drop address'
    EQUALITY caseExactIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

オブジェクトクラス(inetOrgPersonも利用する)
objectClass (1.1.2.2.1.1 NAME 'mailGroup'
   DESC 'ML Group Account Object'
   SUP inetOrgPerson
   MUST ( accountActive $ domainName $ mailDrop ))

追記が終了したら、OpenLDAPを再起動します。

 

Postfixの設定

Postfixでは、virtual_alias_maps = で、簡易メーリングリストのデータを参照出来るようにします。

そのために、OpenLDAPからデータを検索する為のgroup.cfファイルを作成し設定します。

/etc/postfix/group.cf

server_host = localhost
server_host = 192.168.1.1, 192.168.1.2 <---LDAPサーバが2台ある場合
search_base = ou=Mail,o=unixlife,c=JP
query_filter = (&(objectClass=mailGroup)(mail=%s)(accountActive=TRUE))
result_attribute = mailDrop

ファイルを作成したら、Postfixが読み込めるように設定します。

 

設定は、main.cfのvirtual_alias_maps =に追加します。

transport_maps = ldap:/etc/postfix/transport.cf
virtual_alias_maps = ldap:/etc/postfix/account.cf,ldap:/etc/postfix/group.cf

設定が終了したら、Postfixを再起動しておきます。

 

簡易メーリングリスト用LDIFの作成

簡易メーリングリストを利用するための、OpenLDAPに登録するLDIFファイルの設定例です。

オブジェクトクラスのmailGorupでは、mailDropの他にinetOrgPersonのデータが必要になります。

dn: uid=info@unixlife.jp, dc=unixlife.jp,ou=Mail,o=unixlife,c=JP
objectClass: mailGroup
mail: info@unixlife.jp
uid: info@unixlife.jp
cn: ml-group
sn: ml-group
domainName: unixlife.jp
accountActive: TRUE
mailDrop: user1@unixlife.jp
mailDrop: user2@unixlife.jp

これを、OpenLDAPに登録し設定は終了です。

簡易メーリングリストでは、属性mailの値にあるアドレスにメールを送信すると、属性mailDropに設定されているアドレスにメールを配送します。

 

 

Dovecot Sieveによるメール振り分け

DovecotのSieveプラグインを利用してメールの振り分けを行います。Sieveプラグインを利用する事により、バーチャルドメイン環境でもメールの振り分けが手軽に行えます。

なお、DovecotのSieveプラグインを利用するには、DovecotにSieveパッチを適用する必要があります。今回は本サイトで公開しているSieveパッチ適用版のDovecotのRPMをyumからインストールします。

 

Dovecot(Sieveパッチ適用版)のインストール

リポジトリ設定用RPMの取得とインストール

・i386(32bit)用パッケージの取得とインストール

wget http://unixlife.jp/rpmrepos/centos/5/unixlife/i386/unixlife-release-0.1.0-1UL01.i386.rpm
rpm -ivh unixlife-release-0.1.0-1UL01.i386.rpm

 

・x86_64(64bit)用パッケージの取得とインストール

wget http://unixlife.jp/rpmrepos/centos/5/unixlife/x86_64/unixlife-release-0.1.0-1UL01.x86_64.rpm
rpm -ivh unixlife-release-0.1.0-1UL01.x86_64.rpm

 

リポジトリを更新します。

yum update

Dovecotをインストールします。

yum install dovecot

 

Dovecot Sieveの設定

Dovecot Sieveを利用出来るように、dovecot.confに設定を追加します。

protocol lda {
        postmaster_address = webmaster@unixlife.jp
        mail_plugins = cmusieve,quota <---追加
        syslog_facility = mail
}
plugin {
        sieve = %h/.sieve <---追加
}

これで、DovecotのSieveプラグインの設定は終了です。

 

振り分けの設定

メールの振り分け設定をするには、%h/.sieveファイルに振り分けルールを記述します。

例えば、ヘッダーにX-Spam-Flag YESの文字が含まれるメールをJunkフォルダに振り分けるには以下のようにします。

require ["fileinto"];
# rule:[X-Spam]
if anyof (header :contains "X-Spam-Flag" "YES")
{
	fileinto "Junk";
	stop;
}

Sieveの設定には、PHP環境で動作するWebmailソフト、Roundcubeのmanagesieveプラグインを利用すると便利です。

なお、Roundcubeのインストールについては、こちらを参照ください。

 

 

参考資料:

http://www.dovecot.org/download.html

http://wiki.dovecot.org/LDA/Postfix

http://wiki.dovecot.org/LDA/Sieve/CMU

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">