メールシステムの設定メールの流れの概要を図示すると次のようになります。
smtp:Simple Mail Transfer Protocol pop3:Post Office Protocol-3 IMAP4:Internet Message Access Protocol-4 このように、メールシステムを構築するためには、サーバ間でメールの送受信をおこなう仕組みと、サーバからメールを取り出す仕組みの両方が必要です。 apopPOP3は、ユーザの認証にパスワードを使います。 しかしこのパスワード、ネットワーク上を平文で流れます。 自宅内のネットワークからメールを読み出すのであれば、盗聴の心配はありませんが、外部からメールを取り出そうとした場合、パスワードを盗まれる危険性が大きくなります。 そこで、パスワードを暗号化して認証を行うプロトコルapop(Authentified Post Office Protocol)が考え出されました。 暗号化の仕組みは下記の通りです。
筆者のシステムでもapopを使うことにします。 apop before smtpsmtpは、認証の仕組みを持っていません。 設定次第では、第3者がメール送信をできてしまいます。 これが、今問題となっているSPAMに悪用されたりします。 smtpの設定ファイルを編集することで、メール送信は制限できます。 例えば、192.168.0.*からのメール送信要求は受理するが、その他IPアドレスからの送信要求は拒否するなどです。 しかし、送信制限をIPアドレスで決めてしまうと、外部からメールの送信が出来ません。 例えば、外出先で携帯電話とノートPCをつないで、自宅サーバのメールシステムを使ったメール送信を行うような状況を考えて見ましょう。 送信要求を行う機器のIPアドレスは、携帯電話に割り当てられたIPアドレスとなります。smtpの設定を前述のように、192.168.0.*以外からの送信要求を拒否する設定にしていると、メールの送信はできません。 第3者が勝手にメールサーバを使えないように設定したのですから、当然の結果です。 第3者ではなく、あなたが携帯電話を使って接続しているのが、サーバには判断できないのです。 apopは、暗号によるパスワード認証がなされることを説明しました。 この認証システムをsmtpに流用し擬似的にsmtpの認証システムを作ります。 この仕組みが、apop before smtpと呼ばれる方法です。 apop before smtp は、apopで認証が成功したIPアドレスからのメール送信要求は許可します。 <apop before smtpのメール送信までの流れ> メールシステムのインストールDebian-GNU/Linuxのデフォルトのsmtpサーバは、eximです。 smtpサーバの有名どころとしては下記の3つが挙げられます。 ・sendmail ・qmail ・postfix eximの日本での普及率は、かなり低いといえるでしょう。 筆者もeximは使ったことがありませんし、情報の収集が、困難そうだったので別のsmtpサーバを使います。 sendmailは、筆者には使いこなせそうにありません。 そうなると、qmailかpostfixのどちらかと言うことになりますが、postfixを使うことにしました。 「選んだ理由は、XXXだ!」と言いたいのですが、理由は特にありません。 postfixのインストール# apt-get update
筆者の場合次のようにインストールしましたが、後での設定でどうにでもなります。 |
編集前 |
smtpd_banner = $myhostname ESMTP $mail_name
(Debian/GNU) biff = no append_dot_mydomain = no readme_directory = no smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache myhostname = sys1.alk.dip.jp alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = sys1.alk.dip.jp, localhost.alk.dip.jp, localhost relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = loopback-only default_transport = error relay_transport = error |
編集後 |
command_directory = /usr/sbin daemon_directory = /usr/lib/postfix program_directory = /usr/lib/postfix smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no myhostname = alk.dip.jp ←ホスト名 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = alk.dip.jp, localhost.alk.dip.jp, localhost ←このシステムの最終到着地のドメイン名 relayhost = mynetworks = 127.0.0.0/8,192.168.0.0/24 ←自身のネットワークアドレス smtpd_recipient_restrictions = ←中継の条件を指定 permit_mynetworks ←自身のネットワークアドレスからの中継を許可 check_client_access btree:/var/lib/drac/dracd ←apopでログインされたIPアドレスを許可 reject_unauth_destination ←宛先が自身以外は拒否 message_size_limit = 10240000 ←1メールの最大容量(Byte) |
更新日:2009/11/3