「[お名前.com] サービスを構築するまでに行ったサーバー設定作業もろもろ 」の続き。
次は、メール関係の設定です。
Postfixを使ってSMTP-Authによるメール送信とメール転送設定を行います。
メールサーバーの設定作業
・ 必要なパッケージのインストール
メール送信には、Postfixを使います。
また、SMTP-Authに対応するためにcyrus系のパッケージを追加インストールします。
# yum install postfix.x86_64 # yum install cyrus-sasl-devel.x86_64 # yum install cyrus-sasl-plain.x86_64 # yum install cyrus-sasl-md5.x86_64
・ main.cfファイル編集
メールを送信するためのPostfix設定作業を行います。
なお、メールのリレー先のサーバーなど、お名前.com用の設定が混じってます。
下記、詰めて編集箇所のみを書いてますので、実際の設定ファイル(/etc/postfix/main.cf)内から、適宜該当箇所を修正してください。
また、設定箇所が無い場合は追記します。
myhostname = smtp.example.jp mydomain = example.jp myorigin = $myhostname inet_interfaces = all #inet_interfaces = localhost mydestination = localhost.$mydomain, localhost, $myhostname mynetworks = 127.0.0.0/8 home_mailbox = Maildir/ #virtualmailbox setting virtual_mailbox_base = /var/vmail virtual_uid_maps = static:6001 virtual_gid_maps = static:1000 virtual_mailbox_domains = hash:/etc/postfix/virtual_domain_maps virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox_maps virtual_alias_maps = hash:/etc/postfix/virtual_alias_maps #smtpauth setting smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_invalid_hostname, reject_non_fqdn_recipient, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining smtpd_sasl_type = cyrus smtpd_sasl_path = smtpd #ssl smtpd_use_tls = yes smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem smtpd_tls_cert_file= /etc/pki/tls/certs/mail.pem smtpd_tls_loglevel = 1 smtpd_tls_recived_header = yes smtpd_tls_session_cache_timeout = 3600s broken_sasl_auth_clients = yes relayhost = [mailgw.vps.gmoserver.jp]
・ vmailユーザーの作成
main.cfファイルの「#virtualmailbox setting」の項目で記載しているvmailユーザーを作成します。
なお、ユーザーIDとグループIDは予め指定して作成します。
# groupadd -g 1000 vmail # useradd -u 6001 -g 1000 -d /var/vmail -s /sbin/nologin vmail
・ virtual_alias_maps、virtual_domain_maps、virtual_mailbox_mapsファイルの作成
main.cfファイルの「#virtualmailbox setting」の項目で記載しているvirtual_alias_maps、virtual_domain_maps、virtual_mailbox_mapsの3ファイルを作成します。
virtual_alias_mapsファイルでは、バーチャルユーザーのメールの転送設定(メールのエイリアス設定)を行います。
##### virtual email alias list ##### webmaster@example.jp itboy.org@gmail.com
上記のように設定することで、webmaster@example.jp 宛のメールを別の個人のメールアドレスへ転送することができます。
virtual_domain_mapsファイルでは、バーチャルドメインのリストを記述しておきます。
##### virtual domain list ##### example.jp OK
最後のvirtual_mailbox_mapsでは、バーチャルユーザーのメールボックスのパスを指定します。
##### virtual email mailbox list ##### webmaster@example.jp example.jp/webmaster/Maildir/
ファイルの作成後は、postmapコマンドを利用してDBファイルを作成します。
# postmap virtual_alias_maps virtual_domain_maps virtual_mailbox_maps
これで、virtual_xxxx_maps.dbファイルが作成されます。
・ 証明書および秘密鍵の作成
main.cfファイルの「#ssl」の項目で設定した独自の証明書と秘密鍵ファイルを作成します。
# cd /etc/pki/tls/certs # make mail.pem
下記のように証明書に埋め込む情報を幾つか質問されるので、適宜情報を入力します。
Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:Tokyo Locality Name (eg, city) [Newbury]:Shibuya Organization Name (eg, company) [My Company Ltd]:Foo Organizational Unit Name (eg, section) []:Bar Common Name (eg, your name or your server's hostname) []:example.jp Email Address []:webmaster@example.jp
・ master.cfファイルの編集
Postfixのもう1つの重要な設定ファイルであるmaster.cfファイルを編集します。
master.cfファイルでは接続方式やデーモンの挙動を定義するファイルになっています。
submission inet n - n - - smtpd -o smtpd_enforce_tls=no -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject #cyrus unix - n n - - pipe # user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
・ smtpd.confファイルの編集
SASLの設定ファイル「/usr/lib64/sasl2/smtpd.conf」を編集して、SASLのパスワードファイルを利用するように設定します。
pwcheck_method: auxprop
・ ユーザーとパスワードの設定
メールアカウントとそのパスワードを設定します。
# saslpasswd2 -u example.jp webmaster
メールアカウントが作成されたか確認しておきます。
# sasldblistusers2 webmaster@example.jp: userPassword
ユーザーリストを作成すると/etc/sasldb2ファイルが出来上がるので、権限を変更しておきます。
# chown root:postfix /etc/sasldb2
・ デーモンの起動
一通り設定が終わったのでPostfixとSASLのデーモンを起動します。
# /etc/init.d/postfix start # /etc/init.d/saslauthd start
自動起動するように設定するのもお忘れなく。
# chkconfig --level 3 postfix on # chkconfig --level 3 saslauthd on
・ メールサーバーへの接続確認
最後に、メールサーバーへの接続確認を行います。
まずは、telnetを使った接続・認証テストです。
# telnet localhost 587 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 smtp.example.jp ESMTP Postfix EHLO localhost 250-smtp.exapmle.jp 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN CRAM-MD5 LOGIN DIGEST-MD5 250-AUTH=PLAIN CRAM-MD5 LOGIN DIGEST-MD5 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH CRAM-MD5 334 PDIxNzY5NTM1MTUuMTM1MjY4MzdAc210cC5pbmRvZy5qcD4= d2VibWFzdGVyQGV4YW1wbGUuanAgN2FjOGIxNGQ5YzQxZGUzZTI4MDc3ZDYxOTlkYzgzMzI 235 2.0.0 Authentication successful
※ ハイライト箇所は手動で入力した箇所です。
ちゃんと認証が成功しました。
CRAM-MD5による認証方法(MD5ダイジェストの作成)に関しては、下記のサイトを参考にさせていただきました。
コードは、「AUTH CRAM-MD5」と入力した後に返ってくる「334 XXXXX」の部分(334以降)を指定します。
なので、2つ端末を開いて一方でtelnet接続し、もう一方で上記サイトで紹介されているPerlスクリプトのコード部分に埋め込んで結果を貼り付けたりすればよいかと思います。
次に、PHPからメール送信テストを行います。
SMTP-AUTHを通して、メールを送信するためPEARパッケージを使います。
# pear install Mail pear install Net_SMTP
メールを送信するPHPプログラムは、下記のサイトを参考にしました。
How to Send Email from a PHP Script Using SMTP Authentication @ about.com
<?php require_once "Mail.php"; $from = "webmaster <webmaster@example.jp&>"; $to = "Foo <foo@bar.com>"; $subject = "Hi!"; $body = "hello world"; $host = "smtp.example.jp"; $username = "webmaster@example.jp"; $password = "HogeHoge"; $port = "587"; $headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject); $smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'port' => $port, 'username' => $username, 'password' => $password)); $mail = $smtp->send($to, $headers, $body); if (PEAR::isError($mail)) { echo("<p>" . $mail->getMessage() . "</p>"); } else { echo("<p>Message successfully sent!</p>"); }
長くなってしまいましたが、これで一通り設定完了です。
[PR]
[PR]