PODOMA

Postfix + Dovecot + Mailmanで構築したメールサーバー環境を勝手にPODOMAと呼んでいるだけなのだが(笑)

このページ(いや、このページだけではないけど)は編集中です
中途半端な情報の場合がありますので注意願います < だったらUPするなって言わないでね

さて、いつものように環境はCentOSと言いたい所ではあるが…実際のところCentOS内部がゴタゴタしててCentOS6.1など出てこない(2011年8月30日)

そこで、今回はScientific Linux 6.1(さいえんてぃふぃっく りなっくす でいいのかな?)に構築してみる事にする。

環境は以下のような感じ

OS      : Scientific Linux 6.1
Postfix : 2.6.6-2.2.el6.i686(自前でReBUILDしたの。理由は本文で)
Dovecot : 2.0.9-2.el6.i686
Mailman : 2.1.12-14.el6_0.2.i686

構築条件

データベースは使いたくない!(テキストファイルでの管理)
バーチャルドメインで運用がしたい
各バーチャルドメインでメーリングリストを運用したい
容量制限がしたい

Postfixインストール

Scientific Linux(SL)やCentOSなどのリポジトリにあがっているPostfixではquotaを制御できない。もうね、いい加減Postfixが取り込んでくれないかと思うが、なぜか取り込まれない。む~ん、そういう需要がないのかなぁ??

なので、SRPMを落としてきてPATCHをあててRPMを自作する。※自作方法は後で別ページに書く予定(2011年8月30日)

SL 6.1やCentOS6ではデフォルトMTAがPostfixに変更されているはずなので、まずは既存のPostfixをアンインストールする

一応、確認
rpm -qa | grep postfix

yum remove postfix*

インストールはrpmコマンドを実行

rpm -ivh postfix*

てな感じかな。yumでupdateされないようにPostfixをupdateから外すように設定をしておく必要あり。

バーチャルドメインで運用するので、バーチャル用のグループとユーザを作成する

groupadd -g 5000 vuser
useradd -g vuser -u 5000 vuser

UIDとGIDは5000以外でも構わないが他で使われていない事を確認が必要

作成したvuserのホームディレクトリのオーナー権限とパーミッションを設定

chown -R vuser:vuser /home/vuser
chmod -R 771 /home/vuser/

useraddコマンドでディレクトリを作ってるのでオーナー権限は大丈夫かもしれないが、パーミッションは700なので必須

main.cfを編集(オリジナルはもしもの場合の為、コピーして保存しておく)

cd /etc/postfix
cp -p main.cf main.cf.org

vi main.cf

編集は以下の所

myhostname = サーバーホスト名
#inet_interfaces = localhost
inet_interfaces = all

#inet_protocols = all
inet_protocols = ipv4
#mydestination = $myhostname, localhost.$mydomain, localhost
mydestination = $myhostname

#alias_maps = hash:/etc/aliases
alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases

home_mailbox = Maildir/

smtpd_banner = $myhostname ESMTP unknown

最低限これくらい修正をしておけば問題ないと思う

さらにSMTP-AUTHやバーチャルドメインの設定をmain.cfに追加(最後に追加すればOK)

# SMTP-AUTHの設定
#
smtpd_sasl_security_options = noanonymous
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = hash:/etc/postfix/virtual_domains
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions =
  permit_mynetworks
  permit_sasl_authenticated
  reject_unauth_destination
# バーチャルドメインの設定
virtual_mailbox_domains = hash:/etc/postfix/virtual_domains
virtual_mailbox_base = /home/vuser/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual, hash:/etc/mailman/virtual-mailman

# QUOTA

virtual_create_maildirsize = yes
virtual_maildir_extended = yes
virtual_mailbox_limit_maps = hash:/etc/postfix/vquota
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = no

# SMTPSの設定 デフォルトはNO

#
smtpd_use_tls = no
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache

SMTPSの設定はとりあえず入れてるけど、有効化してない

master.cfを修正してSUBMISSIONを有効にする

vi master.cf

submission inet n       -       n       -       -       smtpd

submissionの#を外して有効化します

起動する前に、ドメインやメールアドレスを設定したテキストファイルを作成する

1.バーチャルドメインの設定ファイル
  /etc/postfix/virtual_domains

フォーマットは以下の通り
  ドメイン名  required to prevent relay access denied errors

2.メールアドレスの設定ファイル
  /etc/postfix/vmailbox

フォーマットは以下の通り
  メールアドレス  ドメイン名/アカウント名/Maildir/

3.転送アドレスの設定ファイル
  /etc/postfix/virtual

フォーマットは以下の通り
  メールアドレス  転送先1,転送先2

この時、
  メールアドレス  転送先1,&メールアドレス(左辺の転送元と同じアドレス)
と書く事で転送元にもメールを残すように設定が可能(実メールアカウントがある場合)

4.容量制限の設定ファイル
  /etc/postfix/vquota

フォーマットは以下の通り
  メールアドレス  制限値(単位はバイト10GB=10240000000とするとだいたいあってる)

この時
  @ドメイン名  制限値
と書く事でドメイン単位での容量制限値となる 

mailmanのaliasファイルも指定してるので必要ではあるが、それはmailmanの項目を参照

作成したテキストファイルのままではPostfixは読込めないのでhashデータベースに変換をする

postmap 変換したい設定ファイル

全ての設定ファイルをhashデータベース化したらPostfixの設定は完了なはず・・・

ちなみに…
設定するファイルが多くいちいちviで編集するのが面倒なのでオリジナルのコマンドを作成
するのが管理には楽かもしれない。
以下は実際に作成したオリジナルコマンドの為の設定なので、テキストファイルを直接書換えて
管理する場合は不要です

cd /etc/postfix
mkdir vhosts
mkdir aliases
mkdir quota

cd /home/vuser
mkdir bin
cd bin

オリジナルコマンドをダウンロード

chmod 775*

デフォルトmtaにSendmailがインストールされている場合は以下の手順でデフォルトmtaをpostfizに変更する

service sendmail stop
chkconfig sendmail off

alternatives --config mta

2をインプットしてください
chkconfig postfix on
service postfix start

Dovecotインストール

インストールはyumでOK

yum install dovecot
chkconfig dovecot on
エンタープライズ系LINUXではdovecotのバージョンが2にあがっている。
1系では/etc/dovecot.confだけで設定されていたのが、細かく分割されている。
おそらく今後のバージョンアップで設定ファイルの修正をわかりやすくする為と思われる。

もともと1系で検証してたので2系になって面倒と思ったが、基本的な書き方は同じで1ファイルか複数ファイルで管理しているかの違いと思う。

今回はSL6.1ベースなので2系の設定方法を記載しているが、1系の場合は/etc/dovecot.confで該当する部分を見つけて修正してやれば問題ないかと思う・・・。たぶんね。

1.IPv6を利用しない
編集するファイル
  /etc/dovecot/dovecot.conf
サーバーをIPv6を利用しない設定にしてあるので、postfixやdovecotもIPv6を利用しないように
設定してやらないとerrorやwarningとなる
#listen = *, ::
  ↓
listen = *
2.認証方法とセキュリティの設定
編集するファイル
  /etc/dovecot/conf.d/10-auth.conf
md5とloginを追加。認証はテキストファイルで行うのでauth-passwdfile.conf.extを有効にする。
デフォルトをはっきり覚えてないのだが、確かauth-system.conf.extが有効になってたので無効かする。

auth_mechanisms = plain
  ↓
auth_mechanisms = digest-md5 cram-md5 plain login

#!include auth-passwdfile.conf.ext

  ↓
!include auth-passwdfile.conf.ext

!include auth-system.conf.ext

  ↓ 
#!include auth-system.conf.ext
3.メールディレクトリの指定
編集するファイル
  /etc/dovecot/conf.d/10-mail.conf

posutofixで指定したディレクトリを指定する。
  %dはドメイン名
  %nはユーザ名
にそれぞれ置き換わる。

#mail_location =
  ↓
mail_location = maildir:/home/vuser/vhosts/%d/%n/Maildir
4.Postfixとの連携を設定する(SMTP-AUTHの認証をdovecotのユーザーで行う為)
編集するファイル
  /etc/dovecot/conf.d/10-master.conf

81行目あたりからを以下の修正(元の状態を忘れた^^;)

#unix_listener auth-userdb {
  #mode = 0600
  #user =
  #group =
#}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
  mode = 0660
  user = postfix
  group = postfix
}
# Auth process is run as this user.
#user = $default_internal_user
5.認証用ファイルを設定する
編集するファイル
  /etc/dovecot/conf.d/auth-passwdfile.conf.ext

以下のように修正する。
passdb {
  driver = passwd-file
  # args = scheme=CRYPT username_format=%u /etc/dovecot/users
  args = /home/vuser/dovecot-passwd
}
userdb {
  driver = passwd-file
  #args = username_format=%u /etc/dovecot/users
  args = /home/vuser/dovecot-passwd
}

ユーザーの作成

こちらもデータベースなど使わずテキストファイルで管理する。
先ほど認証用ファイルで設定した以下のファイルに1ユーザ1行で追加していく
この時、Postfix側のユーザー登録がされていないとユーザーディレクトリが見つからなくてエラーとなる
(んじゃないかな・・・試してないけど)

編集するファイル
  /home/vuser/dovecot-passwd

フォーマットは以下の通り
  メールアドレス:{セキュリティ}暗号化されたパスワード:5000:5000::/home/vuser/vhosts/%d/%u/Maildir/

5000:5000は最初に作成したvuserのUIDとGIDを指定する

パスワードの作成

説明が後になったが、ユーザーを作成する際に指定したセキュリティで暗号化されたパスワードを
生成する必要がある。
2系の場合は以下のようにして生成する事ができる

  doveadm pw -s CRAM-MD5 -p パスワード

CRAM-MD5で暗号化されたパスワードが表示されるので、それをそのままユーザー設定ファイルに設定してやればOK
dovecotの1系を利用の場合はdoveadmコマンドが存在しません
1系の場合はdovecotpwというコマンドを利用して同じようにパスワードを生成する事が可能

  dovecotpw -s CRAM0MD5 -p パスワード

dovecotを起動する

デフォルトの設定のままなのでPOP3とIMAPとLMTPがオープンsれます……ん?LMTPってなんぞや?
dovecot1系じゃなかったと思うぞ

どうやら、ESMTPの代替プロトコルでLocal Mail Transfer Protocolの頭文字を取ってLMTPのようだ
ローカルにメールを配送する為のプロトコルって事だろうね(読んだままやん)

ESMTPはSMTP拡張して転送を効率化するプロトコル群の総称。

よし、とりあえずあげておこう(ぇ

設定ファイル
  /etc/dovecot/dovecot.conf

変更箇所
  protocols = imap pop3 lmtp

mailmanインストール

Postfix+dovecotの環境でmailmanも独自ドメインで運用するには少し面倒だったりする

mailmanにPostfixからメールを渡す際にaliasesを利用する必要があるのだがPostfixとしてのaliasesではプログラムにパイプ(|)でメールを渡す事ができない。

その為、ローカルのaliasesを利用するのだが、/etc/aliasesに書くとごちゃごちゃになるので/etc/mailman/aliasesを利用する。

Postfixのmain.cfをその様に設定変更する必要があるのだが、上記のPostfixの設定通りに構築がされていればすでにその設定になっているw

さて、そうすると困った事がおこる。

バーチャルドメインで運用しているのに、ml-info@ドメイン1とml-info@ドメイン2が1台のサーバー上では共存が出来ないのである。

このサーバーで運用するドメイン全てを同じ人が管理するのであれば上記注意点を理解してメーリングリストを作成すれば良いのだけど、ドメイン毎に管理者が違う場合、メーリングリスト名が早い者勝ちとなってしまう。

それを回避する一つの方法として、メーリングリストの実態はユニークなリスト名にして、各ドメインでそのリストに転送をする。

インストールはyumでOK

yum install mailman

コンフィグファイルを修正

編集ファイル
  /usr/lib/mailman/Mailman/mm_cfg.py

変更箇所
  #DEFAULT_URL_HOST   = fqdn
  #DEFAULT_EMAIL_HOST = fqdn
    ↓
  DEFAULT_URL_HOST   = fqdn
  DEFAULT_EMAIL_HOST = fqdn
  
  #add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
    ↓
  add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
以下を追加(一部、個人的なデフォルト設定の変更ありw)
  MTA                                   =       'Postfix'
  DEFAULT_SERVER_LANGUAGE               =       'ja'
  DEFAULT_REQUIRE_EXPLICIT_DESTINATION    =       0
  DEFAULT_SUBJECT_PREFIX                        =       "[%(real_name)s:%%d]"
  DEFAULT_LIST_ADVERTISED               =       No
  OWNERS_CAN_DELETE_THEIR_OWN_LISTS     =       Yes
  DEFAULT_REPLY_GOES_TO_LIST            =       1
  ## DEFAULT_GENERIC_NONMEMBER_ACTION   =       2
  
  
ドメインを追加
  POSTFIX_STYLE_VIRTUAL_DOMAINS        =       [
  'ドメイン1'
  'ドメイン2'
                                                ]
                                                
                                                
  add_virtualhost('ドメイン1','ドメイン1')
  add_virtualhost('ドメイン2','ドメイン2')
  
  ドメインを追加する度に設定を追加してmailmanをリロードする必要があります

service mailman start

chkconfig mainman on

メーリングリストの追加コマンド

newlist -q リスト名 管理者メールアドレス 管理パスワード

メーリングリストの削除コマンド

rmlist -a リスト名

まぁ、aliasesファイルの編集やhashデータベース化も必要なのだが、それはわかるでしょ?

linux/podoma.txt · 最終更新: 2011/08/31 04:46 by miyako
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0