FreeBSD に付いてくる Sendmail 向け設定です。(FreeBSD 5.4以降向け) 分かり次第、順次記入。
目次
ローカル配送以外のデフォルト経路を指定。(MX に依存しない)
===< hostname.mc >=== define(`SMART_HOST',`mail1')
SMART_HOST が複数有る場合「:」で繋ぎ
===< hostname.mc >=== define(`SMART_HOST', `mx1:mx2')
と書いておくと、先ず mx1 に接続を試し、失敗したら mx2 に繋ぎに行きます。 IPアドレスの場合は [] で囲んで書きます。(MX レコードでなく A レコードを引いて欲しいときも [] で囲みます)
===< hostname.mc >=== define(`SMART_HOST', `[192.168.0.2]:[192.168.0.3]')
define(`SMART_HOST', `hostname')
define(`MAIL_HUB', `hostname.')
define(`LOCAL_RELAY', `hostname.')
FEATURE(`nullclient', `hostname.')
mai.1yen.cx の上で define(`SMART_HOST', `mx1:mx2') を指定したときの確認方法。 *.mc ファイルから *.cf ファイルを作成。
make cf
できた hostname.cf を食わせてテスト(-bv)を行う。
% sendmail -bv -Chostname.cf mio mio... deliverable: mailer local, user mio % sendmail -bv -Chostname.cf mio@mai mio@mai... deliverable: mailer local, user mio % sendmail -bv -Chostname.cf mio@mai.1yen.cx mio@mai.1yen.cx... deliverable: mailer local, user mio % sendmail -bv -Chostname.cf mio@other.host mio@other.host... deliverable: mailer relay, host mx1:mx2, user mio@other.host
上記より mio, mio@mai, mio@mai.1yen.cx は、ユーザー mio 宛に local 配送を行い、mio@other.host の場合は mio@other.host のままで mx1, mx2 へ転送されることが分かる。正しいことが確認できれば、*.cf のインストールと再起動を行って反映する。
make install ; make restart
mailertable は、MX を無視し送り先によってメールサーバーを変える事ができる。 ISP-1 と ISP-2 のマルチホームの時、@isp-1.net は、smtp.isp-1.net 宛に @isp-2.net は、smtp.isp-2.net 宛に送る場合 (指定がない場合には SMART_HOST, DNS の MX に従う)
===< hostname.mc >=== FEATURE(`mailertable')
===< mailertable >=== isp-1.net smtp.isp-1.net isp-2.org smtp.isp-2.net
となる。テスト方法は上を参照。プロトコルを明示して以下のようにも書ける。
===< mailertable >=== isp-1.net esmtp:smtp.isp-1.net isp-2.org esmtp:smtp.isp-2.net
SMART_HOST と同様に「:」で送り先を複数繋げて書くことも可能で、
===< mailertable >=== isp-1.net [esmtp:smtp.isp-1.net]:[esmtp:smtp.isp-2.net] isp-2.org [esmtp:smtp.isp-2.net]:[esmtp:smtp.isp-1.net]
(「:」を区別するために [] で囲んでいます。)
また、ISP内で @A.isp.net, @B.isp.net, @C.isp.net とあり MX は 全て mail.isp.net の時、mail.isp.net のホスト上全てのメールを 受けた後に、それぞれのホストへメールを振り分ける必要がある場合、 mail.isp.net の設定を
===< mailertable >=== A.isp.net A.isp.net B.isp.net B.isp.net C.isp.net C.isp.net
と書けば、DNS(MX) に関係なくそれぞれのホストへ振り分けることができる。
SMART_HOST の設定にあるテストの項と同様 sendmail -bv にて確認ができます。
cf を直接書き換えるしか無いっぽい。現在調査中。
===<hostname.mc>=== GENERICS_DOMAIN_FILE(`-o /etc/mail/generics-domains')
===<generics-domains>=== mai.int.1yen.cx bun.int.1yen.cx ten.int.1yen.cx ren.int.1yen.cx
===<hostname.mc>=== GENERICS_DOMAIN(`mai.int.1yen.cx bun.int.1yen.cx') GENERICS_DOMAIN(`ten.int.1yen.cx') GENERICS_DOMAIN(`ren.int.1yen.cx')
===<hostname.mc>=== FEATURE(`genericstable')ファイル名も指定するなら
===<hostname.mc>=== FEATURE(`genericstable', `hash -o /etc/mail/genericstable')
===< genericstable >=== root mio@mai.1yen.cx postmaster taiichirou@bun.1yen.cx abouse shinichirou@ten.1yen.cx user1 risa@ren.1yen.cx user2 edamon@dokodemo.1yen.cx ...
make maps ; make cfls -ltr 等で、どのファイルが更新/作成されたか確認。 genericstable.db, hostname.cf, hostname.submit.cf 等ができている。(alias ファイルも更新されていれば aliases.db が更新される)
# sendmail -bt -Chostname.cf ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > /map generics root map_lookup: generics (root) returns mio@mai.1yen.cx (0)root を与えてみたところ、genericstable 通り mio@mai.1yen.cx が 帰ってくることが確認できた。以下同様に、他のユーザーも書き換えられるか確認する。
make install
make restart
いじょ
===< /etc/rc.conf >=== sendmail_enable="YES" # 外部からのメールを受ける sendmail_submit_enable="YES"
sendmail_enable は、外向けのポートを開くかどうかを決定する。YES: 外部からのメールを受け取る。NO: 外部からのメールを受け取らない。 sendmail_submit_enable は sendmail_enable が NO であるときのみ意味を持ち sendmail_submit_enable が YES であれば localhost:25 のみ LISTEN し、外部へ配送を行う。 see rc.sendmail(8)
netstat -na | grep 25
で、25番ポートが LISTEN しているか確認できる。また、telnet で 25 番ポートをたたいて確認することも可能。
===< hostname.mc >=== FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
/etc/mail/access.sample があるのでそれを参考に。
===< /etc/mail/access >=== 192.168 RELAY
書き換えたら「make maps」を実行して access.db をアップデートしてください。場合によってはパケットフィルタ ipfw(4)/ipf(4)/pf(4) や、/etc/hosts.allow の設定も確認する必要があるかもしれません。
ユーザ「ossan」が
sendmail -f <from@1yen.cx> <to@1yen.cx>
とコマンドを実行すると、Env From が from@1yen.cx に偽装できますが、代わりに
X-Authentication-Warning: mai.1yen.cx: ossan set sender to from@1yen.cx using -f
という警告が出ます。これを消すには、「チェックしなくする方法(薦められません。confPRIVACY_FLAGS の authwarnings あたりかな?)」と、「信頼できるユーザの場合警告を表示させない方法」というがあります。信頼できるユーザが trusted user で、以下のように指定します。
直接 cf に書く場合 (書き換え時に、sendmail の再起動が必要)
===< hostname.mc >=== define(`confTRUSTED_USERS', `majordom postmaster ossan')
外部ファイルに書く場合 (書き換え時に、sendmail の再起動不要だと思う...)
===< hostname.mc >=== define(`confCT_FILE', `-o /etc/mail/trusted-users')
===< trusted-users >=== majordom root postmaster mai ...
hostname は、そのホストのホスト名で、/etc/make.conf 中の SENDMAIL_MC で任意の名前に定義可能。 例えば以下のように定義を追加する。
===< make.conf >=== .if ${.CURDIR} == /etc/mail HOSTNAME!= uname -n | sed -e 's/^\([^\.]*\).*/\1/' SENDMAIL_MC= $(HOSTNAME).mc SENDMAIL_SUBMIT_MC= $(HOSTNAME).submit.mc .endif
この場合の動作は、ホスト名からドメイン名部分が削除される。
% uname -n hinako.1yen.cx % cd /etc/mail ; make -VSENDMAIL_SUBMIT_MC -VSENDMAIL_SUBMIT_MC hinako hinako
hostname.mc, hostname.submit.mc が無い場合は freebsd.mc, freebsd.submit.mc が使われるので、これを直接書き換えることも可能だが、mergemaster(8) がかなり大変になるのでお勧めしない。(自分では絶対やりたくない)
&color():Invalid color: #123;