Dell Optiplex GXa |
SolarisTM 9 x86 9/04 |
POP Before SMTP with sendmail-8.13.3 + smtpfeed
こちら に引っ越します。今後このページの更新はありません。
sendmail-8.13.3の設定
sendmailをPOP Before SMTPと、stmpfeed対応で使用するための設定。
※要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(`drac')dnl
FEATURE(`access_db', `hash -o -T<TMPF> /etc/mail/access')
define(`confPRIVACY_FLAGS', `goaway,restrictmailq,restrictqrun')dnl
define(`confSMTP_LOGIN_MSG', `$j Domain YOU/Original; $b')dnl
define(`confOPERATORS', `.:@!^/[]+')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(solaris9)dnl
デフォルトでSolaris2用の見本ファイルなので、Solaris9に書き換える。
define(`MAIL_SETTINGS_DIR', `/etc/mail/')dnl
コンフィグファイルなどを格納するディレクトリを/etc/mail/に指定
Dwhost
この(自分の)メールサーバーのホスト名を「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(`drac')dnl
POP Before SMTP(drac)を使用する。
FEATURE(`access_db', `hash -o -T<TMPF> /etc/mail/access')
spam対策(迷惑メール対策)のためaccess.dbによるSMTP接続アクセス制限を有効にする。
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を閉じることにした)
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ファイルを作成する。
$ make 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/
受信すべき自分のドメイン名を設定する。
# vi /etc/mail/local-host-names
自ドメイン名を入力して保存する。
domain.com
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宛の
メールが受信できるかどうかをテストする。