Dell Optiplex GXa | Solaris 8 x86 6/00 |
1. BerkeleyDB.4.1.25のインストール 2. drac-1.12のインストール 3. qpopper4.0.5のインストール 4. smtpfeed-1.18のインストール 5. sendmail-8.12.10のインストール 6. sendmail-8.12.10の設定 6-2 (バーチャルドメインの設定) |
sendmail-8.12.10の設定 バーチャルドメイン編 sendmailをPOP Before SMTPとsmtpfeedと、 バーチャルドメイン対応で使用するための設定。 Domain 例: Domain1 = domain1.com Domain2 = domain2.tv ※要m4インタプリタ ディレクトリを移動する。 $ cd /opt/src/sendmail-8.12.10/sendmail-8.12.10/cf/cf Solaris用の見本ファイルをコピーする。 $ cp generic-solaris.mc sendmail.mc コピーした見本ファイルを編集する。 $ vi sendmail.mc 以下のように書き換えて、保存する。 ============================================================== divert(0)dnl VERSIONID(`$Id: generic-solaris.mc,v 8.13 2001/06/27 21:46:30 gshapiro Exp $') OSTYPE(solaris8)dnl define(`MAIL_SETTINGS_DIR', `/etc/mail/')dnl Dwmail Dmdomain.com define(`confDOMAIN_NAME', `$w.$m')dnl FEATURE(`mailertable')dnl define(`confMIN_QUEUE_AGE', `15m')dnl define(`confTO_QUEUEWARN', `1h')dnl define(`confTO_QUEUERETURN', `1d')dnl define(`confTO_IDENT', `0s')dnl MASQUERADE_AS(`$m')dnl FEATURE(`masquerade_envelope')dnl FEATURE(`drac')dnl define(`confPRIVACY_FLAGS', `goaway,restrictmailq')dnl define(`confSMTP_LOGIN_MSG', `$j Domain YOU/Original; $b')dnl define(`confOPERATORS', `.:@!^/[]+')dnl VIRTUSER_DOMAIN_FILE(`-o /etc/mail/virtuser-domains')dnl FEATURE(`virtusertable', `hash /etc/mail/virtusertable.db')dnl DOMAIN(generic)dnl FEATURE(nocanonify)dnl MAILER_DEFINITIONS Msmtpf, P=/usr/lib/smtpfeed, F=mDFMuXz!_, S=11/31, R=21, E=\n, L=990, T=DNS/RFC822/SMTP, M=5000000, A=smtpfeed MAILER(smtp)dnl define(`SMART_HOST', `smtpf:LMTP')dnl MAILER(local)dnl ============================================================== 上記各新規記述行の簡単な説明 OSTYPE(solaris8)dnl デフォルトでSolaris2用の見本ファイルなので、Solaris8に書き換える。 define(`MAIL_SETTINGS_DIR', `/etc/mail/')dnl コンフィグファイルなどを格納するディレクトリを/etc/mail/に指定 Dwmail この(自分の)メールサーバーのホスト名を「mail」(例)として指定。 Dmdomain.com この(自分の)ドメイン名を「domain.com」(例)として指定。 define(`confDOMAIN_NAME', `$w.$m')dnl この(自分の)FQDNを「mail.domain.com」(例)として指定。 FEATURE(`mailertable') 特定のドメイン宛のメールをDNSのMXレコードから引けるサーバー宛で はなく、固定的に任意のメールサーバーに宛てるように振り向けること が出来るようにする。(通常はほとんど必要ない設定)(qmailでいうところの smtproutesの事) define(`confMIN_QUEUE_AGE', `15m')dnl 何らかの原因で受け取ったメールが送信・転送できなかった場合(相手の メールサーバーが止まっていたり、忙しかった場合など)、一時的に メールを/var/spool/mqueue/に溜めこみ、あるタイミングで再送信を試 みる。この再送信のタイミングを指定することが出来る。設定できる時間 単位にはm(分) h(時間) d(日) の3種類がある。この例では短めの15分に 指定している。 特に携帯電話にメールを送る場合に一発で送信できない事が多いようだ。 携帯ユーザーが多すぎてdocomoやauのメールサーバーは忙しいらしい。 最近docomoは利用料金を支払えば送信元を「支払ったサーバーに限定」 する特別なメールサーバーのサービスを始めたらしい。つまり、一般的 なMXレコードを引いて得られるサーバー以外に有料の受信サーバーを立 てたって事。 これは、「業務の都合上、どうしてもすぐに携帯のメールが 配信されないと困る」外部サーバーを運営している人に有効。例えばSPAM (迷惑メール)を送るのを生活の糧にしてるブラックな広告業者とかね。 でも、そもそも携帯ユーザーに正常に(すぐに)メール送信ができない可能 性がある(っていうか出来ないことが多い)こと自体が、受信者である携帯 電話ユーザーに対して失礼だと思うんだが。。。 define(`confTO_QUEUEWARN', `1h')dnl メールが配送できなかったために、「今から何日間か配送を試みます」と いう旨のメールを送信者に自動通知する。この例ではキューに溜めた時点 から1時間後に送信者に自動通知させている。 define(`confTO_QUEUERETURN', `1d')dnl キューに溜め込んだメールをどれ位の期間保存しておくかを指定させる。 ここで指定した時間を過ぎると、メールは消去され、送信者にその旨 報告するメールを送る。 この例では1日(24時間)に指定している。 つまり、キューに溜まったメールは上記3行の指定で、 ・15分毎に再送信を試み ・1時間後に送信者に「相手のメールサーバーに未だ送信できない」 旨の報告をして ・24時間後に再送信を諦めメールを消去の上、送信者に「送信できなかっ た」と報告のメールを送ることになる。 define(`confTO_IDENT', `0s')dnl IDENT認証を行わない。IDENT認証はあまり効果的な認証とは思えないので、 使用しない。 第一ルーターでポート113は閉じてあるし。 この例でタイムアウトを0秒にすることで、応答待ち時間を省略することが出来 る。(デフォルトでは30秒) MASQUERADE_AS(`$m')dnl 送信者のFrom:のドメイン名を書き換える。この例では「xxx@domain.com」 に書き換えさせている。 FEATURE(`masquerade_envelope')dnl エンベロープ送信者mail from:も書き換える。この例では 「xxx@domain.com」に書き換えさせている。 FEATURE(`drac')dnl POP Before SMTP(drac)を使用する。 define(`confPRIVACY_FLAGS', `goaway,restrictmailq')dnl SMTPは相手のサーバーにどのようなユーザーがいるかを調べ るVRFYコマンドや、メーリングリストにはどのようなメンバー がいるかを調べるEXPNコマンドがある。これらのプライバシー に関するコマンドを制限するため「goaway」を指定する。 また、一般ユーザーにmailqコマンドを実行させないために restrictmailqを指定する。 define(`confSMTP_LOGIN_MSG', `$j Domain YOU/Original; $b')dnl SMTPでメールサーバーにアクセスすると、サーバーが使用して いるメールデーモンの名前とバージョン名が表示される。 もしも自分が使用しているsendmailにセキュリティホールが 見つかってしまっていた場合、クラッカーはこの情報を元に 攻撃を仕掛けてくる可能性がある。この例のように表示させ る内容を変えることによって、使用しているバージョンを秘 匿することが出来る。 define(`confOPERATORS', `.:@!^/[]+')dnl この例のように、使用できる特殊記号の中に「%」を記述しない ことでソースルーティングを禁止することができる。 VIRTUSER_DOMAIN_FILE(`-o /etc/mail/virtuser-domains')dnl バーチャルドメインで使用するドメイン名が記述(後述)されているファイルを指定。 FEATURE(`virtusertable', `hash /etc/mail/virtusertable.db')dnl バーチャルドメインで受信する受信者名と、実際の受信先を指定(後述)している データベースファイルを指定。 FEATURE(nocanonify)dnl MAILER_DEFINITIONS Msmtpf, P=/usr/lib/smtpfeed, F=mDFMuXz!_, S=11/31, R=21, E=\n, L=990, T=DNS/RFC822/SMTP, M=5000000, A=smtpfeed smtpfeedを有効にする ============================================================== cfファイルを作成する。 $ ./Build sendmail.cf セキュリティを高めるため、このサーバーを経由して配信されたメール のヘッダ部分に表示されるバージョン番号(8.12.10/8.12.10)を変える。 もしも自分が使っているバージョンにセキュリティホールが見つかってし まった場合、クラッカーはその情報を元に攻撃を仕掛けてくる可能性があ るので、出来上がったsendmai.cfを少々書き換えて表示させるバージョン を架空のものにしてしまう。 (コンパイル前のversion.cの書き換えも忘れずに) 出来上ったsendmail.cfをviで開く。 $ vi sendmail.cf DZ8.12.10と書かれた部分を検索(163行目あたり)して以下のように適当に 書き換えて保存する。 ##### 変更前 ##### # Configuration version number DZ8.12.10 ##### 変更後例 ##### # Configuration version number DZ2008 SuperUserになって、作成したcfファイルをコピーする。 $ su password: # cp ./sendmail.cf /etc/mail/ 受信すべき自分のドメイン名を設定する。(これはテキストベースなので、内容を変更した 場合は、sendmailを再起動させる必要がある。) # vi /etc/mail/virtuser-domains 受信するドメイン名を各行に記述して保存する。 domain1.com domain2.tv 受信する受信者アドレスと実際の配送先を指定するデータベースファイルの元テキスト を作成する。 # vi /etc/mail/virtusertable.txt 受信アドレスとそれに対応する配送先を1行に記述する。(#はコメントアウトとして使える) 下記のようにメールアカウントなしの「@domain1.com」という記述にエラーを指定しておく ことで、ユーザーテーブルに存在しないユーザー宛のメールは、全てUnknown Userエラー として送信者に返すことが出来る。 ##### domain1.com User ##### you@domain1.com you user2@domain1.com user2 user3@domain1.com user3@docomo.ne.jp fml@domain1.com fml root@domain1.com root postmaster@domain1.com postmaster @domain1.com error:5.5.1:Unknown user ##### domain1.com ML ##### info@domain1.com info info-admin@domain1.com info-admin ml@domain.com ml ml-admin@domain.com ml-admin ##### domain2.tv User ##### user4@domain2.tv user4 user5@domain2.tv user5@pdx.ne.jp fml@domain2.tv fml root@domain2.tv root webmaster@domain2.tv webmaster @domain2.tv error:5.5.1:Unknown user ##### domain2.tv ML ##### info@domain2.tv info-domain2.tv info-admin@domain2.tv info-admin 作成したvirtusertable.txtを元にデータベースファイルを作成する。 ここで作成するファイルはデータベース形式なので、ユーザーの追加等で内容を変更しても このデータベースさえ正常に作成できればsendmailの再起動は必要ない(らしい) # makemap hash virtusertable.db < virtusertable.txt #####↓↓↓↓↓ (通常はほとんど必要ない設定) ↓↓↓↓↓##### 特定のドメイン宛のメールをDNSのMXレコードから得られるサーバーアドレスへではなく、 任意のメールサーバーに固定的に配送するように設定する。(qmailでいうところのsmtproutesの事) 新規ファイルmailertable.txtをviで作成する。 # vi mailertable.txt 例えば以下のような記述をして保存する。 domain.ne.jp smtp:[192.168.0.100] 作成したmailertable.txtを元にDBファイルを作成する。 # makemap hash mailertable.db < mailertable.txt #####↑↑↑↑↑ (通常はほとんど必要ない設定) ↑↑↑↑↑##### sendmailデーモンを再起動させる。 # /etc/init.d/sendmail stop # /etc/init.d/sendmail start 他の端末からPOPを引く前に送信が拒否され、POPを引いた後は許可されるかどうかをテストする。 (この時、宛先は他のドメイン宛(他のメールサーバー宛)にしないと、テストの意味がないので注意) 他のメールサーバー(プロバイダとか勤務先とか)から自ホストのMailAddress宛のメールが受信 できるかどうかをテストする。