メールサーバを動かしたい〜Postfix編〜
インターネット上でメールサーバソフトといえば,Sendmailが最もスタンダードな存在である。しかし,柔軟な設定が可能な反面難解さがあり,中途半端な状態で動かしては自らセキュリティホールを作ってしまう。
ここで紹介するPostfixは,設定の容易さとセキュリティ強化,高速化を持ち備えているSendmail互換のメールサーバ(Mail Transport Agent)だ。ほかにも最近ではqmailに人気が集まっているが,PostfixはSendmailとの互換性が高いため,qmailよりも移行が楽である。後述するが,/etc/aliasesファイルなどを共有できるのもメリットの1つだろう。
まず最初に次のサイトから最新のソースをダウンロードしよう。
・国内のリングサーバ
ftp://ftp.ring.gr.jp/pub/net/mail/postfix/
2001年8月1日現在,オフィシャルなリリースバージョンは2000年10月に公開された「postfix-20010228-pl03.tar.gz」だ。wgetなどでダウンロードをしたら,次のように操作しよう。
$ tar zxfv postfix-20010228-pl03.tar.gz $ cd postfix-20010228-pl03 $ make |
次にユーザーとグループに「postfix」を作成しておこう。セキュリティ上,root権限でデーモン起動するのを避けるためだ。下記を見ると分かるように,ここでは「12345」という数値になっている。これは,ほかの行の数値と重ならないものであれば任意で構わない。
# vipw 〜中略〜 postfix:*:12345:12345:Postfix owner:/nonexistent:/sbin/nologin 〜中略〜 |
続いて,/etc/groupファイルを編集してpostfixグループを作成する。
# vi /etc/group 〜中略〜 postfix:*:12345: 〜中略〜 --------------------- # make install ←ユーザーとグループを作成後に |
make installを実行すると,次のようにインストール先ディレクトリを問われる。ここでは,ディレクトリの基本ポリシーに沿いつつほぼ標準設定のまま次のようにしてみた。このインストール先は,後々起動時や設定時に必要になるため忘れないよう記録しておこう。
install_root: [/] tempdir: [/tmp/release-20010228] config_directory: [/etc/postfix] daemon_directory: [/usr/postfix/bin] command_directory: [/usr/postfix/bin] queue_directory: [/var/spool/postfix] sendmail_path: [/usr/sbin/sendmail] newaliases_path: [/usr/bin/newaliases] mailq_path: [/usr/bin/mailq] mail_owner: [postfix] setgid: [no] manpages: [/usr/local/man] |
Postfixの基本設定ファイルは,「config_directory」で指定したディレクトリ先に保存される。ここではセキュリティを確保しつつ動作するために必要な設定を挙げよう。
メインとなるmain.cfファイルの設定は,自分の環境に沿って太字の個所が有効になっているよう確認すればよい。ここでは,DDNSのno-ip.comで取得した「yoshi.sytes.net」というドメイン名を基に設定している。
# vi /etc/postfix/main.cf # queue_directory = /var/spool/postfix command_directory = /usr/postfix/bin daemon_directory = /usr/postfix/bin mail_owner = postfix default_privs = nobody # myhostname = speed.yoshi.sytes.net mydomain = yoshi.sytes.net myorigin = yoshi.sytes.net #myorigin = $mydomain inet_interfaces = all #inet_interfaces = $myhostname, localhost #mydestination = $myhostname #mydestination = $myhostname, localhost.$mydomain mydestination = $myhostname, localhost.$mydomain $mydomain # mail.$mydomain, www.$mydomain, ftp.$mydomain #local_recipient_maps = $alias_maps unix:passwd.byname # #alias_maps = dbm:/etc/aliases #alias_maps = hash:/etc/postfix/aliases alias_maps = hash:/etc/aliases #alias_maps = netinfo:/aliases #alias_database = dbm:/etc/aliases #alias_database = dbm:/etc/mail/aliases alias_database = hash:/etc/aliases #alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases virtual_maps = hash:/etc/postfix/virtual allow_mail_to_commands = alias,forward,include # recipient_delimiter = + # mail_spool_directory = /var/mail mail_spool_directory = /var/spool/mail #mailbox_command = /some/where/procmail #mailbox_command = /some/where/procmail -a "$EXTENSION" #mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME #mailbox_transport = cyrus #fallback_transport = # luser_relay = $user@other.host # luser_relay = $local@other.host # luser_relay = admin+$local #header_checks = regexp:/etc/postfix/filename #header_checks = pcre:/etc/postfix/filename #relay_domains = $mydestination mynetworks = 192.168.0.0/24, 127.0.0.0/8 #mynetworks = $config_directory/mynetworks #smtpd_banner = $myhostname ESMTP $mail_name smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) (Vine Linux) local_destination_concurrency_limit = 2 default_destination_concurrency_limit = 10 debug_peer_level = 2 # debug_peer_list = 127.0.0.1 # debug_peer_list = some.domain # debugger_command = PATH=/usr/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 # Other configurable parameters. allow_percent_hack = no |
この中でも,ピンク字の「mynetworks」の個所は,リレーを許可するマシンを指定する設定になる。ここでは,インターネット上からのリレーは許可せず自分のLAN環境からのみ受け付けるようにしている。特に理由がない限り,外部からのリレーは許可すべきではないだろう。
今回は触れないが,イエロー字の個所はバーチャルホストでメールを受け取る際の設定になる。また,Sendmail互換の.forwardを有効にする場合には,このように「allow_mail_to_commands」で定義しておかなければならない。
以上の設定を終えたら,デーモン起動をさせてみよう。ディレクトリは,make installした際の「daemon_directory」になる。ここでは,「/usr/postfix/bin/」だ。また,Sendmailが起動していれば「/etc/rc.d/init.d/sendmail stop」または「ps ax」で停止させておく必要がある。
# /usr/postfix/bin/postfix start |
プロンプトからps axを実行してみて,次のようにプロセスが確認できればOKだ。
528 ? S 0:01 /usr/postfix/bin/master 534 ? S 1:34 qmgr -l -t fifo -u |
動作が確認できたら,「Eメールの不正中継がされていないかチェックしたい」Tipsを参考にして外部からのリレーチェックをしよう。全項目で「OK」が表示されれば問題がないだろう。
最後にエイリアスについても触れておこう。次のように/etc/aliasesを編集してDBファイルを更新しておけば,特定のユーザー宛に幾つものアドレスから回送させることもできる。
# vi /etc/aliases # Basic system aliases -- these MUST be present. MAILER-DAEMON: postmaster webmaster: ykida postmaster: root postfix: root 〜中略〜 # Person who should get root's mail root: ykida yoshi: ykida speed: ykida # newaliases ←データベースファイル更新のために忘れずに |
上記の例では,「root」や「webmaster」,「yoshi」,「speed」アカウント宛がすべてが「ykida」のメールボックスに回送される。
ここまでで,メールサーバを動作させることができた。しかし,この状態はインターネット上でメールを受け渡しするための環境構築ができただけであり,パソコン上のOutlookやBekey!でメールを送受信することはできない。
このためには,POPサーバと呼ばれるソフトウェアをさらにインストールする必要がある。詳しくは,「POPサーバでメールソフトから受信〜qpopperインストール〜」Tipsを参考にしてほしい。