このページではLinux構築した自宅サーバーで、メールサーバーを用いたメールの転送を行う方法について初心者向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
メールサーバーの構築

メールサーバーについて

電子メールシステムについて

メールアカウントの作成

POP/IMAPサーバーの設定

Sendmailの設定

Postfixの設定

ユーザー認証によるメール送信

SMTP AUTHの設定

POP/IMAP before SMTP

dracによるPBS構築
(WBEL3,CentOS3(i386))

Pop-before-smtpの設定
(WBEL3,4_CentOS3,4+UW IMAP)

Pop-before-smtpの設定
(WBEL4_CentOS4,5+Dovecot)

SquirrelMailの設定

サブミッションポートの設定

メールの転送設定のコツ

メールサーバーのコントロール

メールサーバーの動作チェック

ポートフォワーディングの設定


メールを自由に転送する方法

MTA の付加機能で最も重要なものの一つが メールの転送機能 です。

例えば、 "k_tanaka@obenri.com" や、 "webmaster@obenri.com" といったアドレス宛てのメールを ユーザーアカウント "tanaka" へ転送、あるいは ISP の自分のメールアドレス宛に転送、という使い方をすると非常に便利です。

もちろん1対1の転送だけではなく、複数の宛先に転送したり、コピーとして配信することもできます。

この機能は、 テキスト ファイルである "/etc/aliases" へ設定を記述し、 データベース 処理を行うことで実現することができます。

この仕組みはもともと Sendmail が実装していたものなのですが、その互換 アプリケーション である Postfix では、その機能を拡張する形で利用できるようになっています。

従って、この コンテンツ に従ってSendmailとPostfixが設定されていれば、どちらでも"/etc/aliases"を参照して動作しますので、どちらを利用する場合でも以下の設定方法を参照してください。

ただし、このパートで説明する "/etc/aliases" によるメールの転送は、受信するメールの "@" 以降の違いによる振分け、つまり複数の ホスト名 の運用である バーチャルホスト での運用には残念ながら対応していません。

これを行うには"/etc/aliases"による設定ではなく、Sendmail、Postfixの独自の設定を行う必要があります。

この機能を実装させたいときは、Sendmailをお使いの場合は /etc/mail/virtusertableの設定 、Postfixをお使いの場合は virtual_alias_mapsディレクティブの設定について を参考にそれぞれ設定を行ってください。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

"/etc/aliases"の設定

まず、 サブネット 内の適当な クライアント機 から SSHクライアント 構築中のLinuxサーバー ログイン します SSHクライアントでサーバーに接続する(WBEL3) SSHクライアントでサーバーに接続する(CentOS3) SSHクライアントでサーバーに接続する(WBEL4) SSHクライアントでサーバーに接続する(CentOS4) SSHクライアントでサーバーに接続する(CentOS5)

それから su コマンド アカウント "root" に変更し、 cp コマンドでバックアップを作成した後、 nano エディタで "/etc/aliases" を開きます nanoエディタでファイルを開く

[tanaka@web1 ~]$ su -Enter
Password: "root"のパスワードを入力します。 Enter
[root@web1 ~]# cp /etc/aliases /etc/aliases.orgEnter
[root@web1 ~]# nano /etc/aliasesEnter

デフォルト "/etc/aliases" には、既に WBEL CentOS 自身に必要な多くの転送設定が記述されています。

以下にその一部を抜粋してみます。

最後の行は、 システム管理用メールの転送設定 で設定を修正しているはずです。
#
# Aliases in this file will NOT be expanded in the header from
# Mail, but WILL be visible over networks or from /bin/mail.
#
#    >>>>>>>>>>   The program "newaliases" must be run after
#    >> NOTE >>   this file is updated for any changes to
#    >>>>>>>>>>   show through to sendmail.
#

# Basic system aliases -- these MUST be present.
mailer-daemon: postmaster
postmaster:   root

# General redirections for pseudo accounts.
bin:      root
daemon:     root
adm:      root
lp:       root
sync:      root
shutdown:    root
halt:      root
mail:      root

中略

manager:    root
dumper:     root
abuse:     root

# mailman aliases
mailman:    postmaster
mailman-owner: mailman

newsadm:    news
newsadmin:   news
usenet:     news
ftpadm:     ftp
ftpadmin:    ftp
ftp-adm:    ftp
ftp-admin:   ftp

# trap decode to catch security attacks
decode:     root

# Person who should get root's mail
root:      tanaka

"/etc/aliases"では、 "#" で始まる行はコメント行として設定からは無視されます。

一般書式は、

[転送元]:  [転送先1],[転送先2],...

となります。

後で データベース 化処理を行うときに順序は適切に変更されますので、記述する順序は気にする必要はありません。

もちろん、これらの全てアプリケーションが動作している訳ではありませんし、動作をしていても必要なときしかレポートを送らないアプリケーションが大部分です。レポートメールであなたのメールボックスが溢れることはありません。

さて、既存の転送設定の大部分は、WBELやCentOS上で動作する アプリケーション が、動作レポートを "root" 宛てに送るためのものです。

もちろんこの部分には修正は不要ですから、必要な設定はファイルの末尾に追加してゆくようにします。

例えば、 "webmaster@obenri.com" 宛てのメールをすべて "tanaka@obenri.com" のメールボックスに転送してしまう場合は、

転送先が自 ホスト 宛ての場合、通常は "@obenri.com" は記述不要です。
webmaster:  tanaka

と追加記述します。複数のメールボックスに転送する場合は、

webmaster:  tanaka,suzuki

のように、転送先を ",(カンマ)" で区切って設定します。

また、 ISP などから提供されているメールアドレス(つまり、 構築中のLinuxサーバー 宛てではないメール)へ転送する場合は、

webmaster:  tanaka,tanaka@ispdomain.com

と、完全なメールアドレスで記述します。

編集が終わったら、ファイルを保存してnanoエディタを終了してください nanoエディタを終了する

"/etc/aliases"を保存したら、 プロンプト から次の コマンド を実行してください。"/etc/aliases.db"が再構築されます。

[root@web1 ~]# newaliasesEnter
/etc/aliases: 70 aliases, longest 10 bytes, 689 bytes total
[root@web1 ~]#

"/etc/aliases.db"は、 Sendmail あるいは Postfix が一つの動作を行う毎に参照されますから、データベースの再構築後にこれらの MTA は再起動する必要はありません。データベースを再構築すると、直ぐに転送設定は反映されます。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

危険なメール転送設定

メールの転送設定で注意しなければならないのは、 「メールループ」 です。

カンの良い方はもうお解かりかもしれませんが、例えば "/etc/aliases" で、

yamada:   tanaka
tanaka:   suzuki
suzuki:   yamada

のような設定を行ってしまうと、この三つのアカウントのいずれかに送られたメールは、延々と転送を繰り返してしまうことになります。

もちろん、こういう設定は絶対行ってはいけません。

また、転送元と同名の アカウント のメールボックスにも同じメールを保存したい場合は注意が必要です。例えば、

webmaster:  webmaster,tanaka

のように記述すると、webmasterのみで上と同じようなメールループ現象が起こってしまいます。

こういう場合は転送元の同名の アカウント の先頭に "\" を付けて、

先頭に "\" が付けられた転送先のアカウントは、 "/etc/aliases.db" データベース 中で、同名の他のアカウントへの連携が行われなくなります。
webmaster:  \webmaster,tanaka

のように記述してください。

もちろんこれは 苦肉の策 に過ぎず、根本的なメールループの対策にはなっていませんし、将来メールの利用者が増え、色々なパターンの転送設定を繰り返しすうちに「ついうっかりメールループになってしまった」ということにもなりかねません。

以下に、安全で管理のしやすいメールのアカウントの設定の方法を説明しましょう。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

メール転送設定を前提とした運用方針

メールの転送設定で、設定ミスによる 「メールループ」 を起こさない最も確実な方法は、

「メールアドレスの名前には ユーザーアカウント の名前を直接使わない。」

ということに尽きるでしょう。

ここで注意しておくべきことは、作成したユーザーアカウント"00kimura"には、 SSH SSHサーバーの設定 による ログイン や、ローカルユーザーでの FTPサーバー へのログイン FTPサーバーの設定 許可してはいけない ということです。
その理由については、以下のパートで説明します。

例えば、 "kimura@obenri.com" というメールアドレスを設定する場合、 "kimura" というユーザーアカウントを作成するのではなく、例えば "00kimura" のような別の名前のユーザーアカウントを作成しておき useraddコマンドについて "/etc/aliases" で、

kimura:  00kimura

のように設定します。

"kimura" という名称は、 "00kimura" というユーザーアカウントへメールを転送するための 窓口 に過ぎませんから、この場合 構築中のLinuxサーバー に"kimura"というユーザーアカウントを作成する必要はありません。

さてこの場合、 MUA では次のようにメールアカウントを設定することになります。

メールアドレス: kimura@obenri.com

受信メールサーバー(POP3): mail.obenri.com

送信メールサーバー(SMTP): mail.obenri.com

アカウント名またはユーザー名: 00kimura

パスワード: web1.obenri.comシステム上の00kimuraのパスワード passwdコマンドについて

例えば、 Outlook Express の場合は、以下のように設定します。


MUAの設定例(Outlook Express「全般」)


MUAの設定例(Outlook Express「サーバー」)

つまり、MUAに設定するメールアドレスの名前の部分と、 MRA でメールを受信するためのアカウント名が異なるわけですが、実用上は何の問題もありません。

この方法でメールアドレス用のアカウントを作成する場合少々手間がかかります。しかし、そのひと手間を惜しまないことで得られるいくつかのメリットがあります。

メールループに陥りにくいルールが作りやすい

先頭に "00" の付いた ユーザーアカウント を、 「受信したメールの保存用アカウント」 として扱うように心がけることで、うっかりミスによるメールループを回避しやすくなります。

つまり、 "/etc/aliases" の記述で、

「転送元には絶対に"00"で始まるユーザーアカウントを記述せず、転送先には必ず"00"で始まるユーザーアカウントのみを記述する。」

という自分なりのルールを作ってしまうわけです。具体的には、

hogehoge:  00hogehoge,00ugeuge

のように、記述の向かって左側には"00"で始まらない名前を、向かって右側には"00"で始まるユーザーアカウントを記述するようにルールを定めることになります。

このようにしてしまえば、メールは必ず [転送元]→[転送先]の一回限りの転送 で終了しますから、メールループを確実に回避することができるはずです。

ユーザーが勝手に転送設定を行うことができない

メールの転送設定は、 "/etc/aliases" だけで行われるものではありません。

もちろん、この方法で転送できるのは、そのユーザーアカウント宛てのメールだけです。

実は、各 ユーザーアカウント ホームディレクトリ 以下に、転送先の アカウント やメールアドレスを記述した ".forward" という テキスト ファイルを置いておくことでも転送が可能になります。

各ユーザーは、 SSHクライアント などから 構築中のLinuxサーバー へのリモート ログイン 、あるいはローカルユーザーとして FTPクライアント からのデータの アップロード が許可されていれば、自分のホームディレクトリに".forward"ファイルを設置することが可能です。

つまりこの仕組みはメールを利用する各ユーザーが、管理者に依頼することなく転送設定を行えるようにするためのものです。

ただし、今説明中の方法に従えば、 構築中のLinuxサーバー のシステム上には "kimura" というユーザーアカウントは存在せず、ホームディレクトリそのものがありませんから、"kimura"に対しての転送設定はできません。

従って転送設定はユーザーアカウント "00kimura" に対してのみ可能ということになります。

例えば、 "/home/00kimura/.forward"

".forward" の書式は、 [転送元] を省く以外は "/etc/aliases" と同じです。
kimura@ispdomain.com

と記述すれば、 kimura@obenri.com 宛てに送られてきたメールは、"/etc/aliases"の設定に従って"00kimura"を経由し、更にこの設定で kimura@ispdomain.com に全て転送されることになります。

ただ、このユーザーが「kimura@obenri.comにもメールを保存したい。」と考え、本来ならば、

\00kimura,kimura@ispdomain.com

と記述しなければならないところを、

00kimura,kimura@ispdomain.com

と記述してしまったり、更にうっかりが重なって、

kimura,kimura@ispdomain.com

とでも記述しようものなら間違いなくメールループが発生してしまうことになります。

こういったトラブルを未然に防ぐ最も良い方法は、 「ユーザーにメール転送の設定を任せない」 ことです。

ただ、".forward"の利用を完全に禁止してしまうと、その利用方法がよく解っている人にとっては不便です。

また、何よりもあなた自身がこの便利な仕組みを利用できなくなってしまいます。

そこで、利便性と セキュリティ を両立するために、"00"で始まるユーザーアカウントは、 「メールの受信専用のアカウント」 と決めて、 SSH によるリモートログインや、 FTP によるアップロードの許可を与えないようにしてしまいます SSHサーバーのログイン可能アカウントの設定 FTPサーバーのアクセス可能アカウントの設定

要するに、信頼の置けないユーザーに対しては、".forward"を設置する手段を与えないようにするわけです。

これで".forward"の機能は有効にしたまま、メールループの危険を避けることができようになります。

ところが逆に、web コンテンツ のスペースを貸し出すような場合には、そのユーザーアカウントに対してFTPによるデータアップロードの許可は最低限与えなければなりません。

例えばそういう目的でユーザーアカウント "nakai" を作成した場合でも、自動的にメールアドレス nakai@obenri.com が設定されてしまうことになります。

当然このユーザーはFTPを使って".forward"の設置が可能ですから、同じメールループの問題を抱えることになってしまいます。

こういう場合には、"nakai"が書き換えできない パーミッション で、予めホームディレクトリに、空白の".forward"ファイルを作成しておけば安心です。

こうすれば、"nakai"はどうがんばってもメールの転送設定ファイルを設置することができなくなります。

ファイルは "root" アカウントから作成するのが簡単です。

[root@web1 ~]# echo > /home/nakai/.forwardEnter echoコマンドについて
[root@web1 ~]# ls -la /home/nakai/Enter lsコマンドについて
-rw-r--r--  1 root   root      1 3月 8 13:10 /home/nakai/.forward
         ↑".forward"は、"nakai"には書き換え権限がありません。
[root@web1 ~]#

他にもいくつか対処方法はありますが、これが一番簡単で確実な方法だと思います。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System