Dell Optiplex GXa SolarisTM 9  x86  9/04

POP Before SMTP with sendmail-8.13.3 + smtpfeed

戻る
こちら に引っ越します。今後このページの更新はありません。

1. BerkeleyDB.4.2.52のインストール
2. drac-1.12のインストール
3. qpopper4.0.5のインストール
4. smtpfeed-1.18のインストール
5. sendmail-8.13.3のインストール
6. sendmail-8.13.3の設定
6-2. (バーチャルドメインの設定)
sendmail-8.13.3の設定 バーチャルドメイン編
sendmailをPOP Before SMTPと、stmpfeedと、 バーチャルドメイン対応で使用するための設定。 Domain 例:
Domain1 = domain1.com Domain2 = domain2.tv
※要m4インタプリタ ディレクトリを移動する。
$ cd /opt/src/sendmail-8.13.3/sendmail-8.13.3/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(solaris9)dnl define(`MAIL_SETTINGS_DIR', `/etc/mail/')dnl Dwhost Dmdomain.com define(`confDOMAIN_NAME', `$w.$m')dnl FEATURE(`mailertable')dnl define(`confMAX_MESSAGE_SIZE', `5242880') 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(`access_db', `hash -o -T<TMPF> /etc/mail/access') FEATURE(`drac')dnl define(`confPRIVACY_FLAGS', `goaway,restrictmailq,restrictqrun')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 FEATURE(`no_default_msa')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 LOCAL_RULESETS SLocal_check_relay R$* $: $&{client_resolve} RTEMP $#error $@ 4.7.1 $: "450 Access denied. Cannot resolve PTR record for " $&{client_addr} RFAIL $#error $@ 4.7.1 $: "450 Access denied. IP name lookup failed " $&{client_name} RFORGED $#error $@ 4.7.1 $: "450 Access denied. IP name possibly forged " $&{client_name} ==============================================================
上記各新規記述行の簡単な説明
OSTYPE(solaris8)dnl
デフォルトでSolaris2用の見本ファイルなので、Solaris9に書き換える。
define(`MAIL_SETTINGS_DIR', `/etc/mail/')dnl
コンフィグファイルなどを格納するディレクトリを/etc/mail/に指定
Dwmail
この(自分の)メールサーバーのホスト名を「host」(例)として指定。
Dmdomain.com
この(自分の)ドメイン名を「domain.com」(例)として指定。
define(`confDOMAIN_NAME', `$w.$m')dnl
この(自分の)FQDNを「host.domain.com」(例)として指定。
FEATURE(`mailertable')
特定のドメイン宛のメールをDNSのMXレコードから引けるサーバー宛で はなく、固定的に任意のメールサーバーに宛てるように振り向けること が出来るようにする。(通常はほとんど必要ない設定)(qmailでいうところの smtproutesの事)
define(`confMAX_MESSAGE_SIZE', `5242880')
1通のメールの最大サイズを制限する。 この例は約5MBに制限している(単位はバイト)
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(`access_db', `hash -o -T<TMPF> /etc/mail/access')
access.dbによるSMTP接続アクセス制限を有効にする。
FEATURE(`drac')dnl
POP Before SMTP(drac)を使用する。
define(`confPRIVACY_FLAGS', `goaway,restrictmailq,restrictqrun')dnl
SMTPは相手のサーバーにどのようなユーザーがいるかを調べ るVRFYコマンドや、メーリングリストにはどのようなメンバー がいるかを調べるEXPNコマンドがある。これらのプライバシー に関するコマンドを制限するため「goaway」を指定する。 また、一般ユーザーにmailqコマンドを実行させないために restrictmailqを。sendmail -qを実行させないために、 restrictqrun指定する。
define(`confSMTP_LOGIN_MSG', `$j Domain YOU/Original; $b')dnl
SMTPでメールサーバーにアクセスすると、サーバーが使用して いるメールデーモンの名前とバージョン名が表示される。 もしも自分が使用しているsendmailにセキュリティホールが 見つかってしまっていた場合、クラッカーはこの情報を元に 攻撃を仕掛けてくる可能性がある。この例のように表示させ る内容を変えることによって、使用しているバージョンを秘 匿することが出来る。
define(`confOPERATORS', `.:@!^/[]+')dnl
この例のように、使用できる特殊記号の中に「%」を記述しない ことでソースルーティングを禁止することができる。
FEATURE(`no_default_msa')dnl
RFC 2476で定義されているMessage Submission Agentを使用しない。 (これを使用しない定義にすることで、Port587を閉じることにした)
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を有効にする
LOCAL_RULESETS SLocal_check_relay R$* $: $&{client_resolve} RTEMP $#error $@ 4.7.1 $: "450 Access denied. Cannot resolve PTR record for " $&{client_addr} RFAIL $#error $@ 4.7.1 $: "450 Access denied. IP name lookup failed " $&{client_name} RFORGED $#error $@ 4.7.1 $: "450 Access denied. IP name possibly forged " $&{client_name}
SMTP接続してきたホストIPアドレスのホスト名を逆引きして、逆引きできなかった場合は 接続を拒否する。また、逆引きと正引きの回答内容が異なる場合も同様に接続を拒否する。 ・RTEMP は担当DNSすら登録されていない場合。 ・RFAIL は担当DNSからの答えがない(設定されていない)場合。 ・RFORGED は逆引きできたホスト名に対して正引きを行ったが、答えが一致しない場合。 access.dbで過去に送られてきた様々なspamの送信元を拒否しているが、「イタチごっこ」状態。 spamの送信元は80%近くが逆引きできない事と、正常な受信メールは99%以上が逆引きできる 事からこの対策に踏み切った。(注:TABあり) (参考:http://networking.ringofsaturn.com/Unix/sendmailtips.php) この設定を行って、実際に接続拒否が出来た場合のログの実例は以下。 Dec 5 19:54:52 GXa-FC2 sendmail[3781]: ruleset=check_relay, arg1=[220.194.61.111], arg2=220.194.61.111, relay=[220.194.61.111], reject=450 4.7.1 Access denied. Cannot resolve PTR record for 220.194.61.111 Dec 5 21:22:57 GXa-FC2 sendmail[3959]: ruleset=check_relay, arg1=[61.248.217.207], arg2=61.248.217.207, relay=[61.248.217.207], reject=450 4.7.1 Access denied. IP name lookup failed [61.248.217.207] Dec 10 13:29:47 GXa-FC2 sendmail[19784]: ruleset=check_relay, arg1=[200.66.45.193], arg2=200.66.45.193, relay=customer-GYS-45-193.megared.net.mx [200.66.45.193] (may be forged), reject=450 4.7.1 Access denied. IP name possibly forged [200.66.45.193]
============================================================== cfファイルを作成する。
$ ./Build sendmail.cf
セキュリティを高めるため、このサーバーを経由して配信されたメール のヘッダ部分に表示されるバージョン番号(8.13.3/8.13.3)を変える。 もしも自分が使っているバージョンにセキュリティホールが見つかってし まった場合、クラッカーはその情報を元に攻撃を仕掛けてくる可能性があ るので、出来上がったsendmai.cfを少々書き換えて表示させるバージョン を架空のものにしてしまう。 (コンパイル前のversion.cの書き換えも忘れずに) 出来上ったsendmail.cfをviで開く。
$ vi sendmail.cf
DZ8.13.3と書かれた部分を検索(173行目あたり)して以下のように適当に 書き換えて保存する。
##### 変更前 ##### # Configuration version number DZ8.13.3 ##### 変更後例 ##### # 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
spam対策(迷惑メール対策)のためaccess.dbを設定する。 DBの元となるファイルaccess.txtを記述する。
# vi /etc/mail/access.txt
過去に受信したspamの送信元ネットワークを以下のようにREJECTをつけて羅列する。 (以下は実際に当サイトで受信した悪質な送信元ネットワーク。主に韓国・米国・中国 だが、日本国内の場合はOCNやInfoSphereなどのNTT系が多い。)
# Check the /opt/src/sendmail-8.13.3/sendmail-8.13.3/cf/README file for a description # of the format of this file. (search for access_db in that file) # The /opt/src/sendmail-8.13.3/sendmail-8.13.3/cf/README is part of the sendmail-doc # package. # # by default we allow relaying from localhost... 127.0.0.1 RELAY 4.29.156 REJECT 4.30.46 REJECT 24.19.108 REJECT 24.60 REJECT 24.61 REJECT 24.62 REJECT 24.65.11 REJECT 24.177.130 REJECT 24.194.68 REJECT 24.205.69 REJECT 24.240.36 REJECT 60.38.199 REJECT 61.81.156 REJECT 61.197.117 REJECT 61.197.118 REJECT 61.197.119 REJECT 61.197.120 REJECT 61.197.121 REJECT 61.197.122 REJECT 61.210.37 REJECT 62.37.98 REJECT 63.80.70 REJECT 63.196.240 REJECT 63.196.241 REJECT 63.196.242 REJECT 63.196.243 REJECT 63.196.244 REJECT 63.196.245 REJECT 63.196.246 REJECT 63.196.247 REJECT 63.196.248 REJECT 63.196.249 REJECT 66.31.151 REJECT 67.64.157 REJECT 67.112.89 REJECT 68.66.182 REJECT 68.92.32 REJECT 68.184.182 REJECT 69.6.66 REJECT 69.36.35 REJECT 80.18.225 REJECT 80.34.153 REJECT 81.19.240 REJECT 81.60 REJECT 81.172.4 REJECT 81.218 REJECT 82.166.60 REJECT 82.166.61 REJECT 82.166.62 REJECT 82.166.63 REJECT 82.166.64 REJECT 82.166.65 REJECT 82.166.66 REJECT 82.166.67 REJECT 82.166.68 REJECT 82.166.69 REJECT 82.166.70 REJECT 82.166.71 REJECT 82.166.72 REJECT 82.166.73 REJECT 82.166.74 REJECT 82.166.75 REJECT 82.166.76 REJECT 82.166.77 REJECT 82.166.78 REJECT 82.166.79 REJECT 82.166.80 REJECT 82.166.81 REJECT 82.166.82 REJECT 82.166.83 REJECT 82.166.84 REJECT 82.166.85 REJECT 82.166.86 REJECT 82.166.87 REJECT 82.166.88 REJECT 82.166.89 REJECT 82.166.90 REJECT 82.166.91 REJECT 82.166.92 REJECT 82.166.93 REJECT 82.166.94 REJECT 82.166.95 REJECT 82.166.96 REJECT 82.166.97 REJECT 82.166.98 REJECT 82.166.99 REJECT 82.166.100 REJECT 82.166.101 REJECT 82.166.102 REJECT 82.166.103 REJECT 82.166.104 REJECT 82.166.105 REJECT 82.166.106 REJECT 82.166.107 REJECT 82.166.108 REJECT 82.166.109 REJECT 82.166.110 REJECT 82.166.111 REJECT 82.166.112 REJECT 82.166.113 REJECT 82.166.114 REJECT 82.166.115 REJECT 82.166.116 REJECT 82.166.117 REJECT 82.166.118 REJECT 82.166.119 REJECT 82.166.120 REJECT 82.166.121 REJECT 82.166.122 REJECT 82.166.123 REJECT 82.166.124 REJECT 82.166.125 REJECT 82.166.126 REJECT 82.166.127 REJECT 82.166.128 REJECT 82.166.129 REJECT 82.166.130 REJECT 82.166.131 REJECT 82.166.132 REJECT 82.166.133 REJECT 82.166.134 REJECT 82.166.135 REJECT 82.166.136 REJECT 82.166.137 REJECT 82.166.138 REJECT 82.166.139 REJECT 82.166.140 REJECT 82.166.141 REJECT 82.166.142 REJECT 82.166.143 REJECT 82.166.144 REJECT 82.166.145 REJECT 82.166.146 REJECT 82.166.147 REJECT 82.166.148 REJECT 82.166.149 REJECT 82.166.150 REJECT 82.166.151 REJECT 82.166.152 REJECT 82.166.153 REJECT 82.166.154 REJECT 82.166.155 REJECT 82.166.156 REJECT 82.166.157 REJECT 82.166.158 REJECT 82.166.159 REJECT 82.166.160 REJECT 82.166.161 REJECT 82.166.162 REJECT 82.166.163 REJECT 82.166.164 REJECT 82.166.165 REJECT 82.166.166 REJECT 82.166.167 REJECT 82.166.168 REJECT 82.166.169 REJECT 82.166.170 REJECT 82.166.171 REJECT 82.166.172 REJECT 82.166.173 REJECT 82.166.174 REJECT 82.166.175 REJECT 82.166.176 REJECT 82.166.177 REJECT 82.166.178 REJECT 82.166.179 REJECT 82.166.180 REJECT 82.166.181 REJECT 82.166.182 REJECT 82.166.183 REJECT 82.166.184 REJECT 82.166.185 REJECT 82.166.186 REJECT 82.166.187 REJECT 82.166.188 REJECT 82.166.189 REJECT 82.166.190 REJECT 82.166.191 REJECT 82.166.192 REJECT 82.166.193 REJECT 82.166.194 REJECT 82.166.195 REJECT 82.166.196 REJECT 82.166.197 REJECT 82.166.198 REJECT 82.166.199 REJECT 82.166.200 REJECT 82.166.201 REJECT 82.166.202 REJECT 82.166.203 REJECT 82.166.204 REJECT 82.166.205 REJECT 82.166.206 REJECT 82.166.207 REJECT 82.166.208 REJECT 82.166.209 REJECT 82.166.210 REJECT 82.166.211 REJECT 82.166.212 REJECT 82.166.213 REJECT 82.166.214 REJECT 82.166.215 REJECT 82.166.216 REJECT 82.166.217 REJECT 82.166.218 REJECT 82.166.219 REJECT 82.166.220 REJECT 82.166.221 REJECT 82.166.222 REJECT 82.166.223 REJECT 82.166.224 REJECT 82.166.225 REJECT 82.166.226 REJECT 82.166.227 REJECT 82.166.228 REJECT 82.166.229 REJECT 82.166.230 REJECT 82.166.231 REJECT 82.166.232 REJECT 82.166.233 REJECT 82.166.234 REJECT 82.166.235 REJECT 83.83.131 REJECT 193.77.253 REJECT 193.80.50 REJECT 193.194.79 REJECT 195.146.59 REJECT 199.0.65 REJECT 200.79.246 REJECT 202.111.170 REJECT 203.150.224 REJECT 203.162.207 REJECT 203.240.179 REJECT 207.200.31 REJECT 209.161.204 REJECT 210.197.109 REJECT 210.218.229 REJECT 211.203.198 REJECT 211.204.238 REJECT 211.212.131 REJECT 211.245.185 REJECT 216.179.239 REJECT 217.141.212 REJECT 217.217.1 REJECT 218.2.107 REJECT 218.48.27 REJECT 218.72.196 REJECT 218.88.104 REJECT 218.148.247 REJECT 218.153.195 REJECT 218.233.22 REJECT 219.186.114 REJECT 219.209.128 REJECT 220.76.61 REJECT 220.77.45 REJECT 220.94.191 REJECT 220.146.158 REJECT 220.146.159 REJECT 220.146.160 REJECT 220.146.161 REJECT 220.146.162 REJECT 220.146.163 REJECT 220.146.164 REJECT 220.146.165 REJECT 220.146.166 REJECT 220.146.167 REJECT 220.146.168 REJECT 220.146.169 REJECT 220.146.170 REJECT 220.146.171 REJECT 220.146.172 REJECT 220.146.173 REJECT 221.142.72 REJECT 221.165.107 REJECT 222.65.101 REJECT 222.65.113 REJECT 222.148.229 REJECT
接続拒否ネットワークを羅列したaccess.txtからDBテーブルを作成する。
# /usr/sbin/makemap hash /etc/mail/access.db < /etc/mail/access.txt この接続拒否が効いた場合、ログには以下の実例のようなものが残る。
Dec 1 10:50:19 NS1 sendmail[7232]: ruleset=check_relay, arg1=ionlinemail.net, arg2=69.6.66.33, relay=ionlinemail.net [69.6.66.33], reject=550 5.7.1 Access denied
#####↓↓↓↓↓ (通常はほとんど必要ない設定) ↓↓↓↓↓##### 特定のドメイン宛のメールを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宛のメールが受信 できるかどうかをテストする。