メールサーバを立てたいからに決まってます(笑)
メールサーバを立てると、
- 自分で好きにメールアドレスを作れる
- spam 対策をサーバレベルで行える
- メーリングリストとかも好きに作れる
- IMAP サーバだって立てられる
などなど、メール関係の大抵の事が出来るようになります。
何でも出来るメールサーバを Windows で作るには、
Cygwin 上の exim ぐらいしか選択肢は無いと思います。
なお、exim は MTA であって、POP サーバや IMAP サーバとは別物です。
混乱しないようにちゃんと別のサイトで違いを調べておいてくださいね。
私のページのインストール方法を使用した人は
特に確認する必要はありませんが、
それ以外の方法でインストールした人は Cygwin 本体以外に
以下のパッケージをインストールしておく必要があるので確認してください。
インストールは Cygwin 標準の setup.exe から実施しましょう。
mail を受信するには DNS に MX レコードと、
MX レコードに登録しているホストの A レコードが必要です。
これは直接 MTA とは関係ありませんので、
詳しく解説はしませんが、
subdomain1.doman.local 宛てのメールを受け取るには、
とりあえずこんな感じで必要です。
$ nslookup -querytype=mx subdomain1.doman.local. 2> /dev/null | grep MX
subdomain1.doman.local MX preference = 10, mail exchanger = mail.subdomain1.doman.local
$ nslookup mail.subdomain1.doman.local. 2> /dev/null
(snip)
Name: mail.subdomain1.doman.local
Address: 203.180.111.111
後は実際に設定して起動するだけで、exim は動作をはじめます。
exim は普通に設定するだけで、open relay などが起こらないようになっていて、
かなり楽なことは楽なのですが、
情報が少なすぎてどう設定すればいいかわかりにくいと思います。
そのため、私の /etc/exim.conf を例に、ある程度説明しようと思います。
ですが、まずはその前に SYSTEM アカウント以外でも /etc/exim.conf が
編集できるようにパーミッションを修正しましょう。
これで Administrators に所属している人物が /etc/exim.conf が
修正できるようになります。
$ chgrp 544 /etc/exim.conf
$ chmod 664 /etc/exim.conf
編集する準備ができたら、参考になる Web サイトを読んだ上で、
http://www.exim.org/exim-html-4.20/doc/html/
http://washitake.com/mail/
http://www.pen-chan.jp/net/set/exim.html
http://www.big.or.jp/~mio/ca/ex/
http://www.mars.sphere.ne.jp/tbs-i/tech/exim/check.html
以下の私の exim.conf の意味を理解しながら読めば、
結構分かりやすいと思います。
virtual domain 対応の config ですので、それなりに参考になるでしょう。
ちなみに上記 URL の中で一番役立つのはやはり、exim のリファレンスページ (一番上) です。
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
# 相手の smtp サーバに対して必須なので設定すること。
primary_hostname = mail.subdomain1.doman.local ← メールサーバの FQDN ( A レコード必須のハズ) を設定
domainlist local_domains = subdomain1.doman.local : subdomain2.doman.local ← メールを受け取るドメインをコロンで区切って記述
domainlist relay_to_domains =
hostlist relay_from_hosts = 127.0.0.1 : 192.168.0.0/16 ← MTA を使ってメールを出せるホストを設定
acl_smtp_rcpt = acl_check_rcpt
gecos_pattern = (.*?)(,U-|,S-|$)
gecos_name = $1
host_lookup = !127.0.0.0/8 : !192.168.0.0/16 : *
rfc1413_hosts = !127.0.0.0/8 : *
rfc1413_query_timeout = 30s
ignore_bounce_errors_after = 2d
timeout_frozen_after = 7d
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
acl_check_rcpt:
accept hosts = :
deny local_parts = ^.*[@%!/|] : ^\\.
accept local_parts = postmaster
domains = +local_domains
require verify = sender
#############################################################################
# There are no checks on DNS "black" lists because the domains that contain
# these lists are changing all the time. However, here are two examples of
# how you could get Exim to perform a DNS black list lookup at this point.
# The first one denies, while the second just warns.
#
# deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
# dnslists = black.list.example
#
# warn message = X-Warning: $sender_host_address is in a black list at $dnslist_domain
# log_message = found in $dnslist_domain
# dnslists = black.list.example
#############################################################################
accept domains = +local_domains
endpass
message = unknown user
verify = recipient
accept domains = +relay_to_domains
endpass
message = unrouteable address
verify = recipient
accept hosts = +relay_from_hosts
accept authenticated = *
deny message = relay not permitted
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
# THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! #
######################################################################
begin routers
# 自分のドメイン宛てじゃなければ上位の smtp サーバに丸投げ
# 失敗した場合は、次の router で自分で DNS を引く。
send_to_smart_host:
driver = manualroute
route_list = !+local_domains smtp.smarthost.com ← 上位の smtp サーバを指定
transport = remote_smtp
# 自分のドメイン宛てじゃない場合に
# 普通に DNS を引いて mx にしたがって smtp サーバに投げる
# smart_host が失敗するとこれになり、これが失敗するとエラーを返す。
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16
no_more
# 自分のドメイン宛ての場合に aliases をみてリダイレクトする
# この際に virtual ドメインを使えるように設定
virtual:
driver = redirect
domains = +local_domains
pipe_transport = address_pipe
data = ${lookup{$local_part}lsearch{/etc/mail/$domain}} ← この設定で /etc/mail/subdomain1.doman.local /etc/mail/subdomain2.doman.local がそれぞれ virtual host の /etc/aliases 扱いとなる
# 各ユーザが作成した .forward ファイルを読む
userforward:
driver = redirect
check_local_user
file = $home/.forward
no_verify
no_expn
check_ancestor
allow_filter ← ユーザの ~/.forward にフィルタ設定を可能にする
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
# 最終的にメールボックスに保存する場合
localuser:
driver = accept
check_local_user
transport = local_delivery
no_more
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
# ORDER DOES NOT MATTER #
# Only one appropriate transport is called for each delivery. #
######################################################################
begin transports
remote_smtp:
driver = smtp
# Maildir 形式に変更した上でパーミッション設定を実施
local_delivery:
driver = appendfile
# file = /var/spool/mail/$local_part
delivery_date_add
envelope_to_add
return_path_add
initgroups = no
mode = 0600
directory_mode = 700
mode_fail_narrower = no
check_group = no
check_owner
maildir_format ← Maildir 形式を設定
directory = /home/${local_part}/Maildir/
address_pipe:
driver = pipe
return_output
use_shell ← aliases 内でシェルスクリプトなどをパイプで呼び出せるようにする
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
address_reply:
driver = autoreply
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry
# ------ ----- -------
* * F,2h,5m; G,16h,1h,1.5; F,4d,6h
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators
######################################################################
# CONFIGURATION FOR local_scan() #
######################################################################
私の設定を参考にして virtual domain を構築したりしたばあい、
aliases の設定で注意する必要があります。
というのは、"@" 以降を省略した場合は、
primary のドメイン名が補完されるということです。
そのため、
基本的にメールアドレスにユーザ名だけの表記は出来ません。
つまり、/etc/mail/subdomain1.doman.local は
以下のように
記述してはいけません。
# Person who should get root's mail. Don't receive mail as root!
root: k-square@yotta-zetta.com
# Basic system aliases -- these MUST be present
MAILER-DAEMON: root
postmaster: root
以下のように記述しましょう。
# Person who should get root's mail. Don't receive mail as root!
root: k-square@yotta-zetta.com
# Basic system aliases -- these MUST be present
MAILER-DAEMON: root@subdomain1.doman.local
postmaster: root@subdomain1.doman.local