※注意
Vine3の場合は、SMTP-AUTHの導入のページを参考にしてください。
| SMTP-AUTHとは? |
メールサーバーを構築する場合、送信メールサーバー(SMTPサーバー)と受信メールサーバー(POP/IMAPサーバー)の構築が必要です。
Postfix を外部から利用する為には、POP before SMTP か、SMTP-AUTH のどちらかの送信認証機能が、必要です。
SMTP-AUTH とはメール送信時にSMTPサーバーによってユーザーの認証を行うシステムです。
デメリットとしてはメールソフトがSMTP-AUTHに対応していない場合は利用できません。
ここでは、送信メールサーバーには Postfix 受信メールサーバーには courier-imap(Maildir方式) を採用する。
| Maildir とは? |
MTA(主にsendmail,postfix,qmailなど)のメールの格納方式には Mailbox方式とMaildir方式があります。
Mailbox方式
/var/spool/mail/ユー ザー名というファイルにメールを蓄える方式で、1つの ファイルに複数のメールを蓄えます。
Maildir方式
/home/ユーザー名/Maildir/newとい言うディレクトリの中に、1つのメールにつき1つのファイルを使用する方式です。
| Maildir にする理由 |
Mailbox形式だと、1人のユーザー宛のメールは全て1つのファイルに格納される為、
ファイルが壊れると全てのメールが読めなくなる可能性があります。
しかしMaildir形式では、ファイルが壊れても1通のメールが読めなくなるだけで被害を最小限に抑える事が可能です。
また、Mailbox形式の場合、あるユーザーのメールでディレクトリが一杯になると、他のユーザーのメールが配送できなくなる可能性があります。
しかしMaildirならば、ユーザーのホームディレクトリに容量制限(quota)で制限をかけてしまえば事前に被害を防ぐ事が可能です。
上記の理由でYosi はMaildir をお勧めし、当サイトでは Maildir にて構築して行きます。
| Maildir を作製する |
Maildir方式を使用するにあたり /home/ユーザー名 の中にMaildir と言うディレクトリを作成する必要があります。
| # mkdir /home/ユーザー名/Maildir /home/ユーザー名/Maildir のアクセス権を変更 # chown -R 所有者:グループ名 /home/ユーザー名/Maildir 例) # chown -R yosi:yosi /home/yosi/Maildir ← 所有者、グループ名が yosi の場合 ※ 当サイト ユーザーの追加と削除 に記載の方法でユーザーを作成した場合、所有者、グループ名は同じになります。 |
※ Maildir を自動作製する
/etc/skel/の中身のディレクトリがユーザーを追加した時に自動で作成されます
なので skel の中に Maildir フォルダを作成しておくといちいち、後からディレクトリを作ったり、アクセス権を
変更する手間が省かれます。
| Cyrus SASLのインストールと設定 |
SMTP-AUTHを導入するには Cyrus SASLが必要ですが、Yosiの場合は最初からcyrus-saslだけインストールされていました。
# apt-get install cyrus-sasl cyrus-sasl-devel cyrus-sasl-md5 cyrus-sasl-plain db4-devel ← インストール パッケージリストを読みこんでいます... 完了 依存情報ツリーを作成しています... 完了 * db4-devel は既に最新バージョンがインストールされています。 以下のパッケージが新たにインストールされます: cyrus-sasl-devel cyrus-sasl-md5 cyrus-sasl-plain アップグレード: 0 個, 新規インストール: 3 個, 削除: 0 個, 保留: 1 個 643kB のアーカイブを取得する必要があります。 展開後に 1809kB のディスク容量が追加消費されます。 取得:1 http://updates.vinelinux.org 3.2/i386/devel cyrus-sasl-devel 2.1.18-0vl3 [560kB] 取得:2 http://updates.vinelinux.org 3.2/i386/updates cyrus-sasl-md5 2.1.18-0vl3 [58.7kB] 取得:3 http://updates.vinelinux.org 3.2/i386/updates cyrus-sasl-plain 2.1.18-0vl3 [24.5kB] 643kB を 1s 秒で取得しました (451kB/s) 変更を適用しています... 準備中... ########################################### [100%] 1:cyrus-sasl-devel ########################################### [ 33%] 2:cyrus-sasl-md5 ########################################### [ 66%] 3:cyrus-sasl-plain ########################################### [100%] 完了 # /etc/rc.d/init.d/saslauthd start ← saslの起動 saslauthdを起動中: [ OK ]# /sbin/chkconfig saslauthd on ← sasl自動起動設定 # /sbin/chkconfig --list saslauthd ← 自動起動設定の確認 saslauthd 0:off 1:off 2:off 3:on 4:on 5:on 6:off ← ランベル3〜5 が on か確認 |
| 認証ユーザーの登録と削除 |
※ ユーザ名IDは実在するユーザ名を指定 # /usr/sbin/saslpasswd2 -u xxxxx.com -c ユーザーID ← ユーザー登録 Password: ← パスワード Again (for verification): ← パスワード確認 1度目の登録でエラーがでる場合はもう一度登録を行って下さい。 2度目で多分いけると思います。 設定したユーザ名・パスワードを削除する場合 # /usr/sbin/saslpasswd2 -u xxxxx.com -d ユーザーID ← ユーザー削除 登録している認証ユーザーの確認 # /usr/sbin/sasldblistusers2 ← 認証ユーザー確認 yosi@xxxxx.com: userPassword ← このように表示されればOK |
| saslデータベースの設定 |
# vi /usr/lib/sasl2/smtpd.conf ← 新規作成 i キー(入力モード) 下記を追記します pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: cram-md5 digest-md5 plain login 記載したら Esc キー(コマンドモード) :wq で保存 Postfixがsasldbを利用できるようにグループ、パーミッションを変更します。 ※ ファイルやディレクトリが無いというエラーが出る場合は認証ユーザーの登録後に行ってください。 # chown -R root:postfix /etc/sasldb2 # chmod 640 /etc/sasldb2 # /etc/rc.d/init.d/saslauthd restart ← saslの再起動 saslauthdを停止中: [ OK ] saslauthdを起動中: [ OK ] |
| Postfixの設定 |
# vi /etc/postfix/main.cf ← 設定ファイル編集 myhostname = server.xxxx.net ←ホスト名.ドメイン名を指定 mydomain = xxxx.net ← ドメイン名を指定 myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.$mydomain $mydomain # 550を指定し、存在しないユーザー宛てのメールを拒否し、即座にエラーメッセージを返すようします unknown_local_recipient_reject_code = 550 ← コメントにする (# があれば削除) #unknown_local_recipient_reject_code = 450 ← # をつけてコメントアウト mynetworks = 192.168.0.0/24, 127.0.0.0/8 ← 内部ネットワークアドレスとローカルホストアドレスを指定 relay_domains = $mydestination alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases home_mailbox = Maildir/ ← メールボックスをMaildir方式を指定 ※ メールボックスと、メールに容量制限する場合以下の二項目を追記します mailbox_size_limit = 30720000 ←メールボックスの容量制限(例 30Mb) message_size_limit = 1024000 ←メールのサイズ容量制限(例 1Mb) smtpd_banner = $myhostname ESMTP unknown ← メールサーバー名を隠す ※メールボックスをMaildir方式を使用するので以下の二項目をコメントアウト #mail_spool_directory = /var/spool/mail #mailbox_command = /some/where/procmail -a "$EXTENSION" allow_percent_hack = yes smtpd_sasl_auth_enable = yes ← 追記(cyrus-saslによるSMTP認証機能を有効に) smtpd_sasl_local_domain = $mydomain ← 追記(ローカル認証のREALMの指定) broken_sasl_auth_clients = yes ← 追記(Outlook Expressの認証でlogin可能) フィルタをかけるの設定をまだしていない場合は下記を追記 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, ← SMTP_AUTHに認証されたクライアントを許可 reject_unauth_destination フィルタをかけるの設定をしている場合はSMTP-AUTHの記述のみ追記 smtpd_recipient_restrictions = permit_mynetworks, regexp:/etc/postfix/recipient_checks.reg, reject_non_fqdn_recipient, permit_sasl_authenticated, ← 追記(SMTP_AUTHに認証されたクライアントを許可) reject_unauth_destination# /etc/rc.d/init.d/postfix restart ← 設定終了後に再起動 |
| SMTP-AUTHの動作と認証テスト |
SMTP-AUTH 動作テスト # telnet localhost 25 ← 25番ポートに接続 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 server.xxxxx.com ESMTP unknown ← メールサーバー名が非表示になっている事を確認(main.cfの設定) EHLO localhost ← EHLO localhostと入力 250-server.xxxxx.com 250-PIPELINING 250-SIZE 1024000 250-ETRN 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 ← この2行の表示でSMTP-AUTHの動作はOK 250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250-XVERP 250 8BITMIME quit ← 終了 221 Bye Connection closed by foreign host. SMTP-AUTH 認証テスト # perl -MMIME::Base64 -e 'print encode_base64("ユーザID\0ユーザID\0パスワード");' ← ユーザーID、パスワードを入力 dGVzdAB0ZXN0AHRlc3QyMjI= ← エンコードされたパスワードが表示される # telnet localhost 25 ← 25番ポートに接続 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 server.xxxxx.com ESMTP unknown EHLO localhost ← EHLO localhostと入力 250-server.xxxxx.com 250-PIPELINING 250-SIZE 1024000 250-ETRN 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250-XVERP 250 8BITMIME AUTH PLAIN dGVzdAB0ZXN0AHRlc3QyMjI= ← AUTH PLAIN の後ろにエンコードしたパスワードを入力 235 Authentication successful ← 認証に成功 quit ← 終了 221 Bye Connection closed by foreign host. 認証に失敗した場合のメッセージ 大体、誤ったユーザ名やパスワードを入力した場合に出ます。 535 Error: authentication failed |
| Courier-IMAPの導入と設定 |
※注意!!
今まで、当サイトのcourier-imapでPOP before SMTPを行っていた場合は各種対処方法のページの、
Aptのアップグレード対象から除外にcourier-imapを登録していたと思いますが登録を削除して下さい。
# rpm -e qpopper ← courier-imapをインストールするので削除 # rpm -e imap ← courier-imapと競合するので削除 # apt-get install courier-imap ← インストール パッケージリストを読みこんでいます... 完了 依存情報ツリーを作成しています... 完了 以下の追加パッケージがインストールされます: courier-authlib 以下のパッケージが新たにインストールされます: courier-authlib courier-imap アップグレード: 0 個, 新規インストール: 2 個, 削除: 0 個, 保留: 0 個 0B/852kB のアーカイブを取得する必要があります。 展開後に 2169kB のディスク容量が追加消費されます。 続行しますか? [Y/n]y ← y応答 変更を適用しています... 準備中... ########################################### [100%] 1:courier-authlib ########################################### [ 50%] 2:courier-imap ########################################### [100%] 完了 ※ ここは特に設定する必要がないです。 参考までに記載していますが、設定したい方は各自の環境で設定してください。 POP3 を使用しない場合 # vi /etc/courier-imap/pop3d ← 設定ファイル編集 POP3DSTART=NO ← NOに変更 POP3 over SSL を使用しない場合 # vi /etc/courier-imap/pop3d-ssl ← 設定ファイル編集 POP3DSSLSTART=NO ← NOに変更 IMAP を使用しない場合 # vi /etc/courier-imap/imapd ← 設定ファイル編集 IMAPDSTART=NO ← NOに変更 MAP over SSL を使用しない場合 # vi /etc/courier-imap/imapd-ssl ← 設定ファイル編集 IMAPDSSLSTART=NO ← NOに変更 各ソフトを起動させる # /etc/rc.d/init.d/courier-imap start ← 起動 Starting Courier-IMAP server: imap imap-ssl pop3 pop3-ssl # /etc/rc.d/init.d/courier-authlib start ← 起動 Starting Courier authentication services: authdaemond 自動起動設定の確認 # chkconfig --list courier-imap ← 確認 courier-imap 0:off 1:off 2:on 3:on 4:on 5:on 6:off # chkconfig --list courier-authlib ← 確認 courier-authlib 0:off 1:off 2:on 3:on 4:on 5:on 6:off自動起動設定になっていない場合(設定後にもう一度確認) # chkconfig ソフト名 on |
POP使用の場合は110番ポート、IMAP使用の場合は143番ポートを使用します。
まずルータの設定で25番ポート、110番(POPの場合)または143番(IMAPの場合)ポートを空けます。
次にここのサイトでポートがきちんと空いているかチェックします。
| メールソフト(Outlook Express)でSMTP-AUTHの設定 |
![]() |
ユーザー登録時、各自の環境に合わせて POP3かIMAPを選択します。 |
![]() |
@登録したユーザーの「プロパティー」を表示します。 A「サーバー」タブを選択 Bこのサーバーは認証が必要(V)にチェックを入れる C「設定」タブをクリック |
![]() |
D次のアカウントとパスワードでログオンする(O)にチェックを入れる E登録した認証ユーザーとパスワードを記入 F「OK」をクリック G「適用」をクリック H「OK」をクリック |
Copyright c Vine Linuxで自宅サーバー. 2004 All Rights Reserved.