| 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 フォルダを作成しておくといちいち、後からディレクトリを作ったり、アクセス権を
変更する手間が省かれます。
| Postfixのリビルド |
Vine標準でインストールされているPostfixではSMTP-AUTHが使えませんので、SRPMをリビルドしてアップグレードと
いうかたちでインストールすることにします。
# apt-get build-dep postfix ← リビルドに必要なファイルをインストール
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
MySQL-devel openldap-devel postgresql-devel postgresql-libs
アップグレード: 0 個, 新規インストール: 4 個, 削除: 0 個, 保留: 1 個
2285kB のアーカイブを取得する必要があります。
展開後に 6653kB のディスク容量が追加消費されます。
続行しますか? [Y/n]y ← y応答
取得:1 http://updates.vinelinux.org 3.2/i386/plus postgresql-libs 7.4.10-0vl1 [163kB]
取得:2 http://updates.vinelinux.org 3.2/i386/plus MySQL-devel 4.0.25-0vl0 [930kB]
取得:3 http://updates.vinelinux.org 3.2/i386/plus openldap-devel 2.1.30-0vl1 [536kB]
取得:4 http://updates.vinelinux.org 3.2/i386/plus postgresql-devel 7.4.10-0vl1 [656kB]
2285kB を 1s 秒で取得しました (1816kB/s)
変更を適用しています...
準備中... ########################################### [100%]
1:postgresql-libs ########################################### [ 25%]
2:MySQL-devel ########################################### [ 50%]
3:openldap-devel ########################################### [ 75%]
4:postgresql-devel ########################################### [100%]
完了
ここからの作業(リビルド)は一般ユーザーで行います。 $ apt-get source postfix ← ソースパッケージのダウンロード パッケージリストを読みこんでいます... 完了 依存情報ツリーを作成しています... 完了 1721kB のソースアーカイブを取得します。 取得:1 http://updates.vinelinux.org 3.2/i386/main postfix 2.0.20-0vl5.1 (srpm) [1721kB] 1721kB を 0s 秒で取得しました (2064kB/s) 1:postfix ########################################### [100%] $ vi rpm/SPECS/postfix.spec ← SPECSファイル編集 i キー(入力モード) Release: 0vl5.1sasl ← saslを追記(AUTHバージョン)
112行目付近
%build
make tidy
make makefiles \
CCARGS="-DMAX_DYNAMIC_MAPS \
-DUSE_SASL_AUTH -I/usr/include/sasl \ ← 追記
-DHAS_LDAP \
-DHAS_PCRE -I/usr/include/pcre \
-DHAS_MYSQL -I/usr/include/mysql \
-DHAS_PGSQL -I/usr/include/pgsql" \
AUXLIBS="-L/usr/lib/sasl2 -lsasl2" ← 追記
記載したら Esc キー(コマンドモード) :wq で保存$ rpmbuild -bb rpm/SPECS/postfix.spec ← ビルド開始 リビルドは結構時間がかかりますので気長に待ちましょう(^^♪ $ cd rpm/RPMS/i386 ← リビルドしたファイルがある場所に移動 $ su ← rootになる Password: # rpm -Uvh postfix-2.0.20-0vl5.1sasl.i386.rpm ← インストール(アップグレード) 準備中... ########################################### [100%] 1:postfix ########################################### [100%] Shutting down Postfix: [ OK ] Starting Postfix: [ OK ] |
※注意!!
リビルドで作製したPostfixは、Aptでアップグレードした場合、送受信が上手く出来なくなります。
各種対処方法のページを参考に、Aptのアップグレード対象から除外して下さい。
リビルドに失敗する場合は、YosiがリビルドしたSMTP-AUTH対応Postfixをこちらからダウンロードする事が可能です。
postfix-2.0.20-0vl5.1sasl.i386
| Postfixのチェック |
Postfixの再インストール後にパーミッションが変わっていることがあるので、チェックと再設定を行います。
# /usr/sbin/postfix check ← チェック 何も表示されなければOK Yosiの場合、下記のようなエラーが出ました。 postfix/postfix-script: warning: not owned by root: /var/spool/postfix /var/spool/postfix (main.cfのqueue_directory) はrootがオーナーでないと駄目らしいです。 # chown -R root:root /var/spool/postfix ← rootをオナーに変更 /var/spool/postfix 以下のディレクトリはpostfixがオーナでないと駄目なので変更 # chown -R postfix /var/spool/postfix/* ← postfixをオーナーに変更 # /usr/sbin/postfix check ← チェック これでいけると思ったのですが今度は下記のエラーが… postfix/postfix-script: warning: not owned by group postdrop: /var/spool/postfix/public postfix/postfix-script: warning: not owned by group postdrop: /var/spool/postfix/maildrop 下記コマンドでグループを変更 # chgrp postdrop /var/spool/postfix/maildrop # chgrp postdrop /var/spool/postfix/public # /usr/sbin/postfix check ← チェック 何も表示されなくなりました(^^♪ 正しいパーミッションはこんな感じです # ls -la /var/spool/postfix/ ← パーミッションをチェック 合計 60 drwxr-xr-x 15 root root 4096 Mar 23 12:52 ./ drwxr-xr-x 9 root root 4096 Mar 20 18:53 ../ drwx------ 17 postfix root 4096 Mar 23 12:52 active/ drwx------ 5 postfix root 4096 Mar 23 12:52 bounce/ drwx------ 2 postfix root 4096 Mar 23 12:52 corrupt/ drwx------ 2 postfix root 4096 Mar 23 12:52 defer/ drwx------ 2 postfix root 4096 Mar 23 12:52 deferred/ drwx------ 2 postfix root 4096 Mar 23 12:52 flush/ drwx------ 2 postfix root 4096 Mar 20 18:53 hold/ drwx------ 17 postfix root 4096 Mar 23 15:17 incoming/ drwx-wx-wt 2 postfix postdrop 4096 Mar 23 12:52 maildrop/ drwx------ 2 postfix root 4096 Mar 23 12:52 pid/ drwx--x--- 2 postfix root 4096 Mar 23 13:29 private/ drwx--x--- 2 postfix postdrop 4096 Mar 23 13:29 public/ drwx------ 2 postfix root 4096 Mar 23 12:52 saved/ |
| 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.