実践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)へ

目 次

特別企画
Raspberry Piで遊ぶ

HOME(全体のシステム構成&目次)

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
  Wordpressでブログ構築
FTPサーバー
FTPS(FTP over SSL/TLS)
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー
ストリーミングサーバーRed5
ドメインの追加

CentOS5〜6
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
  WebDAVによるファイル共有
  Webでファイルのやり取り
  アクセス解析ツールawstats
  namazuで全文検索
  WordPressブログサイト構築
  EC-CUBEショッピングサイト構築
FTPサーバー
ファイルサーバー・Samba
データベースpostgreSQL
  ExcelからpostgreSQLを操作
データベースMySQL
SSHサーバー
VNC
SSL/TLSを利用した暗号化通信
openVPN
ストリーミングサーバー
    C++ RTMP Server
    Helix server Basic
ドメインの追加
Xen・仮想化
特定ディレクトリに容量制限

SELinux
SELinux基本設定
新しいタイプとポリシー・モジュールを作成してみる
マクロを利用したteファイルの記述
新しいドメインを導入してみる

coLinux
Fedora11で試す

Cプログラミング目次
X11プログラム
サイエンス・プログラム

計測・プログラム
秋月電子のデーターロガーpico ADC-16
「今すぐ使えるパソコン計測USBマイコン基板」に付属のTRZ1102
センサーの使用例

Glade2/GTK+を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画
放物線運動(pango、cairoも試してみる)
これらを、GTK+のみで書き出す

フォントについて
ネットワーク・プログラミング
postgreSQL接続
CGI
ファイル操作

●その他
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く