実践Linux
CentOS5/6.5 CentOS5/6.5 目次へ TOP(HOME)へ
Mailサーバー/実際の運用(CentOS 6.5) 2014年9月
333.333.333.210(ns1.my-dom.xxx)にはDNSで別名mail.my-dom.xxxが設定されているものとする。
さらに、新しいドメインnew-dom.xxxも追加され、別名mail.new-dom.xxxが設定されているものとする。(ドメインの追加参照)
設定については、外部からの送信要求を想定し、バーチャルメールボックスとSMTP/Submission Over SSL/TLSを使用した設定にする。
バーチャルメールボックスについてはメールサーバー(基本)のページ参照。
SMTP/Submission Over SSL/TLSについてはSSL/TLSのページ参照。
SMTP認証(SMTP-AUTH)は、SASLライブラリを用いて実現するが、Cyrus-SASLとDovecot SASLというライブラリが主に利用される。PostfixとDovecotは親和性が高いので、ここではDovecot
SASLを利用する(Dovecotとアカウントを共用できる)。
PostfixがDovecot SASLライブラリに対応しているか確認
# postconf -a dovecotが表示されればOK
dovecotの設定
/etc/dovecot/dovecot.conf
protocols = pop3 pop3sにするとサービスの起動で固まってしまうので注意。
listen = * デフォルトの「listen = *, ::」ではエラーがでる。IPV6の設定が余計。
!include conf.d/*.conf
/etc/dovecot/conf.d/10-ssl.conf
ssl = yes 強制する場合は、ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.crt
ssl_key = </etc/pki/dovecot/private/dovecot.key
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/spool/mail/vhosts/%u/Maildir
/etc/dovecot/conf.d/15-lda.conf (dovecotがエラーメールを送信するとき使用するアドレスの設定)
postmaster_address = postmaster@mail.my-dom.xxx
/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no Plaintextでの認証の有効化
auth_mechanisms = plain login cram-md5 平文パスワードと暗号化パスワード
#!include auth-system.conf.ext コメントアウト(これは使わない=pam認証を無効にする)
!include auth-passwdfile.conf.ext コメントアウトをはずす(こちらを使う)
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb {
driver = passwd-file
#args = scheme=CRYPT username_format=%u /etc/dovecot/users コメントアウト
args = /etc/dovecot/passwd 追加
}
userdb {
driver = passwd-file
#args = username_format=%u /etc/dovecot/users コメントアウト
args = /etc/dovecot/passwd 追加
}
●Dovecot用証明書の作成
既存の/etc/pki/dovecot/certs/dovecot.pem、/etc/pki/dovecot/private/dovecot.pemを使ってもよいかもしれないが、ここでは作り直す。
# cd /etc/pki/tls/certs
Makefileの編集 有効期限が365日に設定されているので、-days 365を3650(10年)等に変更しておく。3カ所ある。
# make dovecot.crt 名称はなんでもよい
パスフレーズの入力(2回)。秘密鍵を暗号化するために利用される。
再度、パスフレーズの入力。
証明書の情報を入力。(適当に入力)
国名
都道府県名
市区名
組織名
部署名
サーバーFQDN名
監理者のメールアドレス
以上で、サーバーの秘密キー(/etc/pki/tls/certs/dovecot.key)と証明書(/etc/pki/tls/certs/dovecot.crt)が作成される。
これらを/etc/pki/dovecot/certs/、/etc/pki/dovecot/private/に移動しておく。
# mv /etc/pki/tls/certs/dovecot.key /etc/pki/dovecot/private/
# mv /etc/pki/tls/certs/dovecot.crt /etc/pki/dovecot/certs/
秘密鍵からのパスフレーズの削除
# cd /etc/pki/dovecot/private
# mv dovecot.key dovecot.key.org
# openssl rsa -in dovecot.key.org -out dovecot.key
# chmod 700 dovecot.key
●virtualグループとユーザーの作成
# groupadd -g 5000 virtual
# useradd -g 5000 -u 5000 -s /sbin/nologin -d /var/spool/mail/vhosts virtual
●パスワードファイル /etc/dovecot/passwdの作成
ここでは暗号化したパスワードを使う。
まず、パスワードを決めてdoveadmコマンドで暗号化。(# doveadm pw -s 認証スキーム。スキームを省くとCRAM-MD5になる。スキームの種類は、# doveadm pw -l)
# doveadm pw
{CRAM-MD5}abcdefg・・・・・・・・・・・・・・・・・・・・・・ これをコピーして/etc/dovecot/passwdに貼り付ける
/etc/dovecot/passwdの作成 (dovecot.confをコピーして作成するとよい。権限、Selinuxを引き継げる。)
tarou@my-dom.xxx:{CRAM-MD5}abcdefg・・・・・・・・・・・・・・・・・・・・:5000:5000::/var/spool/mail/vhosts/tarou@my-dom.xxx/Maildir
hanako@new-dom.xxx:{CRAM-MD5}hijklmn・・・・・・・・・・・・・・・・・・・・:5000:5000::/var/spool/mail/vhosts/hanako@new-dom.xxx/Maildir
書式 (ユーザー名):{CRAM-MD5}abcdefg123456....:(uid):(gid):::::(メールボックスへのパス)
これで、tarou@my-dom.xxx等のアカウント名を使って、指定ディレクトリのメールを取りに行けるようになる。
ポート110(POP)が開いていれば閉じ、995(POPS)(TCP/INPUT)を開いておく。
dovecotの設定つづき(PostfixでDovecot SASL認証を利用できるようにする)
/etc/dovecot/conf.d/10-master.conf
service auth {
# auth_socket_path points to this userdb socket by default. It's typically
# used by dovecot-lda, doveadm, possibly imap process, etc. Its default
# permissions make it readable only by root, but you may need to relax
these
# permissions. Users that have access to this socket are able to get a
list
# of all usernames and get results of everyone's userdb lookups.
unix_listener auth-userdb {
#mode = 0600
#user =
#group =
}
# Postfix smtp-auth 以下を編集
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
# Auth process is run as this user.
#user = $default_internal_user
}
Dovecotを再起動すると、/var/spool/postfix/private/authが作成される。
Postfixの設定
/etc/postfix/main.cfを編集・追加
myhostname = mail.my-dom.xxx
mydomain = my-dom.xxx
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 192.168.7.0/24, 127.0.0.0/8
home_mailbox = Maildir/
バーチャルメールボックス形式ではmydestinationには取得したドメイン関係は基本的には指定しない。(virtual_mailbox_domainsに指定。)
以下を追加
############################ Dovecot SASLを利用した認証 ####################################
smtpd_sasl_auth_enable = yes SASL認証を有効にする
smtpd_sasl_authenticated_header = yes 認証されたユーザー名を表示する(必須ではない)
broken_sasl_auth_clients = yes OutlookExpress4等のSASL認証「AUTH=PLAIN」でも利用できるようにする
smtpd_sasl_type = dovecot SASLプラグインタイプ
smtpd_sasl_path = private/auth 認証ソケットファイル(Postfixのキューディレクトリ/var/spool/postfixからの相対パス[/etc/postfix/main.cf
queue_directory=/var/spool/postfix]。先のようにdovecot.confを変更してdovecotを再起動するとこのファイルが作成される。このソケットをDovecotとPostfixで共有することで、ユーザアカウントを共用できるようになる。)
############################ TLS暗号化 ####################################
smtpd_use_tls = yes TLSを使用する
#smtpd_enforce_tls = yes TLSを使用できないクライアントを拒否する場合。ここではコメントアウト。master.cfのsubmissionの方でTLS強制にし(587使用に対してのみ強制)、ポート25使用に対しては強制しないようにする。
smtpd_tls_loglevel = 1 ログレベルの設定
smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.crt 証明書を指定 ※
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key 秘密鍵を指定 ※
#smtpd_tls_CAfile = /etc/pki/CA/cacert.pem 認証局によるCAファイルの場合
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache 接続キャッシュファイル
smtpd_tls_session_cache_timeout = 3600s キャッシュの保存時間
############################ リレー許可 ####################################
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_recipient_restrictions = のデフォルトは、smtpd_recipient_restrictions = permit_mynetworks,
reject_unauth_destination
ここに"permit_sasl_authenticated"を追加してやればSMTP認証を通過したものはリレーが許可される。
############################ バーチャルメールボックス ####################################
virtual_mailbox_domains = $mydomain,new-dom.xxx バーチャルメールボックスを利用するドメインを指定
virtual_mailbox_base = /var/spool/mail/vhosts バーチャルメールボックスの場所を指定 。バーチャルメールボックスはこのフォルダ配下になる。
virtual_mailbox_maps = hash:/etc/postfix/vmailbox メールアドレスとそれに対する配送先を記したテーブル
virtual_minimum_uid = 5000 virtual_uid_mapsから受け取るuidの最小値
virtual_uid_maps = static:5000 配送エージェントがメールボックスの書き込みに使用するユーザーID
virtual_gid_maps = static:5000 配送エージェントがメールボックスの書き込みに使用するグループID
#virtual_alias_domains = これは指定しない
virtual_alias_maps = hash:/etc/postfix/virtual 転送リスト
virtual_mailbox_domainsに指定したドメインはmydestinationやvirtual_alias_domainsには指定しないように注意。
SMTP/Submission Over SSL/TLSの設定
ここでは、OP25B対策を含めてPort 587の設定にする(ここではポート25も利用できるようにしておいた)。
/etc/postfix/master.cf
smtp inet n - n - - smtpd ←ポート25用
submission inet n - n - - smtpd ←ポート587用
-o smtpd_tls_security_level=encrypt TLSを強制使用する
-o smtpd_sasl_auth_enable=yes SASL認証を有効にする
-o smtpd_client_restrictions=permit_sasl_authenticated,reject SASL認証できないクライアントは拒否
#-o milter_macro_daemon_name=ORIGINATING コメントアウトのまま
ポート25(TCP/INPUT,OUTPUT)と同時に、ポート587(TCP/INPUT)を開いておく。
●postfix用の自己署名証明書の作成
# cd /etc/pki/tls/certs
# make postfix.crt
パスフレーズの入力(2回)。
再度、パスフレーズの入力。
証明書の情報を入力。
国名
都道府県名
市区名
組織名
部署名
サーバーFQDN名
監理者のメールアドレス
以上で、サーバーの秘密キー(/etc/pki/tls/certs/postfix.key)と証明書(/etc/pki/tls/certs/postfix.crt)が作成される。
秘密キーは/etc/pki/tls/private/に移動しておく。
# mv /etc/pki/tls/certs/oostfix.key /etc/pki/tls/private/
秘密鍵からのパスフレーズの削除
# cd /etc/pki/tls/private
# mv postfix.key postfix.key.org
# openssl rsa -in postfix.key.org -out postfix.key
# chmod 700 postfix.key
●/etc/postfix/vmailboxを作成(同じディレクトリ内のファイルをコピーして作成するとよい。権限、Selinuxを引き継ぐ。)
受信するメールアドレスとそれに対する配送先ディレクトリを記述。配送先の指定が / で終わっているとMaildir形式となる。
tarou@my-dom.xxx tarou@my-dom.xxx/Maildir/
hanako@new-dom.xxx hanako@new-dom.xxx/Maildir/
vmailboxファイルをデータベース化
# postmap /etc/postfix/vmailbox
●/etc/postfix/virtualを編集(最後に追加)
エイリアスの設定 受信するメールアドレスとその転送先。
postmaster@my-dom.xxx postmaster (これはさらにroot→tarou@my-dom.xxxと転送される。/etc/aliases)
postmaster@new-dom.xxx hanako@new-dom.xxx
tarou@mail.my-dom.xxx tarou@my-dom.xxx
hanako@mail.new-dom.xxx hanako@new-dom.xxx
foo@my-dom.xxx ***@*****.ne.jp fooは仮想でかまわない
データベース化
# postmap /etc/postfix/virtual
●/etc/aliasesを編集(最後に追加)
root: tarou@my-dom.xxx
データベース化
# postalias /etc/aliases
●クライアント(アカウント設定)
以上の設定で、25ポートは内部=mynetworksからのものは認証、TLSなしでも送信を受け付けるが、外部からのものはプロバイダが25ブロックしている場合がほとんどなのでアクセスに失敗する。アクセスできたとしても、送信には認証が必要となる(前の「リレーの許可」参照。TLSは必ずしも必要としない)。
587ポートは、認証とTLS両方が強制されるが、こちらは内部、外部からの送信に使える。
ここでは暗号化パスワードを使ったが、クライアントが暗号化パスワードに対応していない場合でも、dovecot.confの「mechanisms = 」に「plain login」を加えておけば問題なく使えるようだ。
Thunderbird
受信(サーバー設定)
ユーザー名 tarou@my-dom.xxx
ポート番号を995番にする。
セキュリティ設定では、「SSL/TLS」、「暗号化されたパスワード認証」を選択。
「ダウンロード後もサーバーにメッセージを残す」のチェックをはずす。(適宜)
送信(送信サーバー)
外部からの送信接続では、POPと同じアカウントとパスワードを使うことになる。ポート=587、セキュリティ=「STARTTLS」、「暗号化されたパスワード認証」、ユーザー名=tarou@my-dom.xxx。
内部からの送信には、25ポートを使用し、接続の保護は「なし」、認証は「認証なし」で使うとよい。
Outlook
暗号化パスワードには対応していないがdovecot.confの「mechanisms = 」に「plain login」が加えてあれば使えるようだ。
名前 hanako@new-dom.xxx
電子メールアドレス hanako@new-dom.xxx
受信メールサーバー mail.new-dom.xxx
送信メールサーバー mail.new-dom.xxx
アカウント名 hanako@new-dom.xxx
パスワード ************
詳細設定/送信サーバー
認証が必要をチェック
次のアカウントとパスワードでログオンする
アカウント名 hanako@new-dom.xxx
パスワードは、同じ。
詳細設定/詳細設定
受信サーバー ポート=995 SSLが必要をチェック
送信サーバー
【外部から接続する場合】 ポート=587 暗号化接続の種類=TLS(古いOutlookではSSLしかないが、それでもかまわないようだ。)
【内部から接続する場合】 ポート=25 暗号化接続の種類=なし
TOP(HOME)へ