15-5. sendmail から qmail へ `02/07 (1) qmail の概要 * やっと分かった よっしゃ−、やっと分かった。qmail は設定簡単、速い、安全という触れ込みだが、それ がどうしてなかなか分からなかった。qmail の全体像が見えてこないのだ。メ−ルリレ− の構成はとれるのか。sendmail と qmail でちゃんとメ−ルのやりとりができるのか。な んや maildir 形式にせないかんのか。その場合の POP サ−バはどうなるのか、疑問だら けで。しかし qmail までやるつもりはなかった。 今の sendmail だと SPAM チェックに ひかっかっている?。SPAM の警告メ−ルみたいなのが英文で来たのだ。こりゃ sendmail は限界だバイ、 もう qmail にするしかないかとあわてくさってやったけど、現状でも特 に問題なかったみたい。 /etc/tcp.smtp : メ−ルリレ− --------------------------------- □ □ qmail + tcpserver |192.10.10.2:allow,RELAYCLIENT="" | | |:allow --------------------- nix.co.jj | ../rcpthosts ../smtproutes □ □ sendmail メ−ル ------------ ------------------------ | |192.10.10.2 サ−バ |nix.co.jj |nix.co.jj:[192.10.10.2] --------------------- 内部ネットは DNS なし もう最初に分かったこと書いておこう。多分これでいいと思う。本書でのメ−ルシステム の構成で説明しよう。どうも qmail は、 メ−ルやりとりの TCP/IP ポ−トである25番 を見張るのは qmail-smtpd デ−モンのようである。 ドキュメントの通り設定していくと、 この qmail-smtpd は inetd 管理におく。そして自ドメイン宛のメ−ルしか受け付けない ように qmail の /var/qmail/controls/rcpthosts 制御ファイルに、nix.co.jj と記述す る。しかしこの rcpthosts はまずいことに、内から外への nix.co.jj ドメイン以外のメ −ルもシャットアウトしてしまうのだ。そこで qmail-smtpd を tcpserver というアクセ ス制御用デ−モンの管理下におくようにする。tcpserver はアクセス元のIPアドレスを 見てフィルタリングするソフトである。 tcpserver ソフトは qmail でのメ−ルシステム構築には必須なのである。 その制御ファ イルは /etc/tcp.smtp で、最初のル−ルが 192.10.10.2:allow,RELAYCLIENT="" であり、 192.10.10.2 からのメ−ルは受け付けるようにする。 この時 rcpthosts は見ないように という指示が RELAYCLIENT である。次のル−ルは :allow だが、 tcpserver としてはあ らゆるIPアドレスからのアクセスを許可する、が qmail の rcpthosts は有効だよとい う意味になる。:allow の後ろに RELAYCLIENT の文字がないと、そう判断するようになっ ているとのことだ。smtproutes ファイルは、 そうして許可されたメ−ルを内部のメ−ル サ−バに送れということになる。nix.co.jj ドメイン宛のメ−ルは、メ−ルサ−バのIP アドレス 192.10.10.2 に送る設定になっている。 * qmail の特徴 -------------------------------------------------------------------------------- メ−ルサ−バの sendmail は永い間、インタ−ネットの電子メ−ルの配送に使われてきた。 しかしセキュりティ上のバグの発見、バ−ジョンアップ、その繰り返しで常に問題をはら んでいた。 そうした背景を元に sendmail にかわる qmail というメ−ル配送プログラム、 MTA( Message Transfer Agent )が作られた。 D.J.Bernstein 1人によって作られ97年 2月に正式公開され、それ以後問題は生じていない。 SetUID や root 権限実行部分を極 力減らし、基本的にセキュリティに穴があきにくい設計にしたとのことである。現在のバ −ジョンは98年6月頃出た 1.03 となっている。 -------------------------------------------------------------------------------- ・sendmail は来たメ−ル全部を1つのファイルで管理する mbox 形式。qmailは1通ずつ 管理する maildir 形式。ただし qmail のデフォルトは maildir 形式になっている。 ・メ−ルサ−バを qmail にして、maildir 形式にすると POP サ−バもそれに応じたもの にする必要がある。それは qmail の配布の中に入っている。qmail-pop3d という。 ・qmail は sendmail と違い、幾つものデ−モンで処理するようになっている。メ−ルを 受けるのは qmail-smtpd、メ−ルを送るのは qmail-remote、溜めるのは qmail-queue。 ・qmail ではSPAMメ−ルは、デフォルトで対策されている。qmail の制御ファイルを 作る際に rcpthosts ファイルに自マシンの FQDN が入ることによる。 ・tcpserver は ucspi-tcp と言うパッケ−ジに入っている。 http://www.jp.qmail.org/ の tools からダウンロ−ドできる。ucspi-tcp は qmail と同じ人が作ったもの。 ・tcpserver を使う場合は /etc/inetd.conf の smtp のところはいらない。qmail-smtpd を inetd 管理下から tcpserver デ−モン管理下にするということ。 ・qmail は制御ファイル rcpthostsに書かれているドメイン宛のメ−ルだけ受け取る。た だし環境変数 RELAYCLIENT が設定されていると rcpthosts を無視する。 ・RELAYCLIENT 環境変数は tcpserver の設定ファイル /etc/tcp.smtp に記述する。メ− ルを受け付けるアドレスを列挙する。始めから一致したル−ルが適用される。 ・qmail は仮想ドメインとやらもサポ−トする。ezmlm というメ−リングリストのソフト もある。これも簡単、速いということらしい。 ・qmail は sendmail よりも高速に大量のメ−ルを処理するという触れ込み。sendmailで はまれに起こる可能性のあるファイル・ロックも起きないという。 * 参考 http://www.jp.qmail.org/ qmail の公式ホ−ムペ−ジ。 > ここの内容は少し分かりにくい。プログラムの入手もここから。 http://www.y-min.or.jp/~nob/qmail/index.html > ここも参考になります。見てください。 「UNIX USER」Vol.7 No.7 JUL.1 1998, P.67〜74 FreeeBSD での qmail 導入記事。 > "管理者編第9回、安全で高速な qmail を導入しよう"、'98/05 時点で qmail 1.02。 以下2002年3月に追加、本章記述の後に出てきた。qmail の参考書も2冊出ていた。 「Software Design」 2001/04, P.117〜126。柴崎文一氏。 > "qmail を極める−基本設定から実践まで"。 「Software Design」 2000/02, P.28〜37。石田晃氏。 > "qmail によるメ−ルサ−バの管理術"、メ−リングリストの ezmlm。 * sendmail から qmail へ 適当な時期をみて、できればかえた方がいいかもしれない。qmail はまだセキュリティホ −ルが1個も見つかってない。sendmail の使用はそろそろ潮時かも知れない。 筆者の入 っているプロバイダもちょっと前 qmail に変更した。 何かだいぶ手こずっていたようだ。 どうも98年秋ぐらいから、インタ−ネット・コミュニティでは sendmail に見切りをつ け、qmail に移行する雰囲気が強くなった。しかし大方 sendmail もクリティカルなバグ は出つくしたのでないか。できれば qmail へ変更するのが望ましいのだろうが、 本書の システムではとりあえず今は、DNS ともに現行のバ−ジョンでよしとしよう。`25/09追記、 qmail はその後、全然メンテナンスもバ−ジョンアップもないので、だんだん MTAとして は人気が落ちてきているとのこと。 qmail にするなら Postfix を選んだ方が無難かなと いう感じ。でもシェアが一番多いのは、多分6割ぐらいは sendmail みたいです。 (2) qmail の入手とコンパイル * INDY IRIX 5.3 へのインスト−ル % cd /usr/local/source % zcat qmail-1.03.tar.gz | tar xvf - % cd qmail-1.03 << 展開するとサブディレクトリなしで全部のファイルがはいる。 % cat /etc/group << 先ずこれらのグル−プとユ−ザを作っておくこと。 ないと下記 qmail:*:2107: で % make setup のところで失敗する。 nofiles:*:2108: % cat /etc/passwd alias:*:7790:2108::/var/qmail/alias:/bin/true qmaild:*:7791:2108::/var/qmail:/bin/true qmaill:*:7792:2108::/var/qmail:/bin/true qmailp:*:7793:2108::/var/qmail:/bin/true qmailq:*:7794:2107::/var/qmail:/bin/true qmailr:*:7795:2107::/var/qmail:/bin/true qmails:*:7796:2107::/var/qmail:/bin/true % mkdir /var/qmail % make << /etc/group, passwd をちゃんと設定したら、なにも問題なくできた。 % make setup << /var/qmail にモジュ−ルが入っていく。IRIX 5.3 には nroff が入 ってなくて、マニュアルができないとワ−ニングがでるが問題ない。 % make check ./instcheck instcheck: warning: .../man/cat5/addresses.0 does not exist instcheck: warning: .../man/man5/envelopes.5 does not exist | % ./config << これでは /var/qmail/control にファイルはできなかった。 Your hostname is indy2. hard error Sorry, I couldn't find your host's canonical name in DNS. You will have to set up control/me yourself. 次のようにやると /var/qmail/control 以下に qmail の制御ファイルができる。qmailの 設定はデフォルトでは、DNSが引けることが前提になっている。 % ./config-fast indy2.nix.co.jj Your fully qualified host name is indy2.nix.co.jj. Putting indy2.nix.co.jj into control/me... Putting nix.co.jj into control/defaultdomain... Putting co.jj into control/plusdomain... Putting indy2.nix.co.jj into control/locals... Putting indy2.nix.co.jj into control/rcpthosts... Now qmail will refuse to accept SMTP messages except to indy2.nix.co.jj. Make sure to change rcpthosts if you add hosts to locals or virtualdomains! # cd ~alias << root ユ−ザ用のメ−ル・エリアを作っておく。 # pwd /var/qmail/alias # touch .qmail-postmaster .qmail-mailer-daemon .qmail-root # chmod 644 ~alias/.qmail* 続いて以下の手続きも当時やったもよう、一応参考まで。`2h/08/E ---------------------------------------------------------------------- 6. Read INSTALL.mbox and INSTALL.vsm. 7. Read INSTALL.maildir. 8. Copy /var/qmail/boot/home (or proc) to /var/qmail/rc. To test qmail deliveries (won't interfere with sendmail): 9. Enable deliveries of messages injected into qmail: # csh -cf '/var/qmail/rc &' 10. Read TEST.deliver. To upgrade from sendmail to qmail: 11. Read SENDMAIL. This is what your users will want to know about the switch from sendmail to qmail. 12. Read REMOVE.sendmail. You must remove sendmail before installing qmail. 13. Read REMOVE.binmail. 14. Add csh -cf '/var/qmail/rc &' to your boot scripts, so that the qmail daemons are restarted whenever your system reboots. Make sure you include the &. 15. Make qmail's ``sendmail'' wrapper available to MUAs: # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail /usr/sbin might not exist on your system. 16. Set up qmail-smtpd in /etc/inetd.conf (all on one line): smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd 17. Reboot. (Or kill -HUP your inetd and make sure the qmail daemons are running.) 18. Read TEST.receive. ---------------------------------------------------------------------- * インスト−ル後の状態 % cd /var/qmail; ls -F alias/ bin/ boot/ control/ doc/ man/ queue/ users/ % ls bin bouncesaying mailsubj qmail-local qmail-qmtpd qmail-start condredirect pinq qmail-lspawn qmail-qread qmail-tcpok datemail predate qmail-newmrh qmail-qstat qmail-tcpto elq preline qmail-newu qmail-queue qreceipt except qail qmail-pop3d qmail-remote qsmhook forward qbiff qmail-popup qmail-rspawn sendmail maildir2mbox qmail-clean qmail-pw2u qmail-send splogger maildirmake qmail-getpw qmail-qmqpc qmail-showctl tcp-env maildirwatch qmail-inject qmail-qmqpd qmail-smtpd % ls doc FAQ INSTALL.mbox PIC.local2virt REMOVE.sendmail INSTALL INSTALL.vsm PIC.nullclient SENDMAIL INSTALL.alias PIC.local2alias PIC.relaybad TEST.deliver INSTALL.ctl PIC.local2ext PIC.relaygood TEST.receive INSTALL.ids PIC.local2local PIC.rem2local UPGRADE INSTALL.maildir PIC.local2rem REMOVE.binmail % ls boot binm1 binm2 binm3 home proc binm1+df binm2+df binm3+df home+df proc+df % ls control defaultdomain locals me plusdomain rcpthosts locals -- indy2.nix.co.jj ファイルの中身です。 rcpthosts -- indy2.nix.co.jj me -- indy2.nix.co.jj plusdomain -- co.jj defaultdomain -- nix.co.jj * Apollo ヘのインスト−ルの注意 $ /bin/start_csh とやってCシェルに入り $ make、$ make setup とやっていく。nroff は /usr/bin/nroff にちゃんと入っているのでマニュアルも作られる。 $ make setup の ./install プログラムは注意が必要である。 Apollo の BSD は 4.3 で fchdir がサポ− トされていないのだ。SunOS 4.1.x にもあったのだが。 それで chdir で代わりをさせる ことにした。下記のように変更するとよい。ここはただ /usr/local/source/qmail-1.03/ にできた実行モジュ−ルを /var/qmail/ にコピ−しているだけである。 /usr/local/source/qmail-1.03/install.c --------------------------------------------- |/* if (fchdir(fdsourcedir) == -1) | strerr_die2sys(111,FATAL,"unable to switch back to source directory: "); |*/ | if ( chdir( "/usr/local/source/qmail-1.03" ) == -1) | strerr_die2sys(111,FATAL,"unable to switch back to source directory: "); | | $ /etc/edrgy edrgy=> v root[.staff.none]:w0UuY0sQV7sAI:0:10::/:: daemon[.none.none]:w0UuY0sQV7sAI:1:12::/:: none[.none.none]:w0UuY0sQV7sAI:12:12::/:: user[.none.none]:w0UuY0sQV7sAI:14:12::/:: lp[.bin.none]:w0UuY0sQV7sAI:16:3::/:: admin[.none.none]:w0UuY0sQV7sAI:15:12::/:: sys_person[.none.none]:w0UuY0sQV7sAI:13:12::/:: | qmaill[.nofiles.none]::7792:2108::/usr/qmail:/bin/true: これらは自分で記述した qmailp[.nofiles.none]::7793:2108::/usr/qmail:/bin/true: と思う。Apolloでは自動 qmailq[.qmail.none]::7794:2107::/usr/qmail:/bin/true: でアカウントは入ったり qmailr[.qmail.none]::7795:2107::/usr/qmail:/bin/true: しないはずだから。 qmails[.qmail.none]::7796:2107::/usr/qmail:/bin/true: alias[.nofiles.none]::7790:2108::/usr/qmail/alias:/bin/true: qmaild[.nofiles.none]::7791:2108::/usr/qmail:/bin/true: edrgy=> q * 当時こんなコマンドも試しに叩いていた `2h/08/E # ./qmail-showctl qmail home directory: /usr/qmail. user-ext delimiter: -. paternalism (in decimal): 2. silent concurrency limit: 120. subdirectory split: 23. user ids: 7790, 7791, 7792, 0, 7793, 7794, 7795, 7796. group ids: 2108, 2107. badmailfrom: (Default.) Any MAIL FROM is allowed. bouncefrom: (Default.) Bounce user name is MAILER-DAEMON. bouncehost: (Default.) Bounce host name is node_abcd.nix.co.jj. concurrencylocal: (Default.) Local concurrency is 10. concurrencyremote: (Default.) Remote concurrency is 20. databytes: (Default.) SMTP DATA limit is 0 bytes. defaultdomain: Default domain name is nix.co.jj. defaulthost: (Default.) Default host name is node_abcd.nix.co.jj. doublebouncehost: (Default.) 2B recipient host: node_abcd.nix.co.jj. doublebounceto: (Default.) 2B recipient user: postmaster. envnoathost: (Default.) Presumed domain name is node_abcd.nix.co.jj. helohost: (Default.) SMTP client HELO host name is node_abcd.nix.co.jj. idhost: (Default.) Message-ID host name is node_abcd.nix.co.jj. localiphost: (Default.) Local IP address becomes node_abcd.nix.co.jj. locals: Messages for node_abcd.nix.co.jj are delivered locally. me: My name is node_abcd.nix.co.jj. percenthack: (Default.) The percent hack is not allowed. plusdomain: Plus domain name is co.jp. qmqpservers: (Default.) No QMQP servers. queuelifetime: (Default.) Message lifetime in the queue is 604800 seconds. rcpthosts: SMTP clients may send messages to recipients at node_abcd.nix.co.jj. morercpthosts: (Default.) No effect. morercpthosts.cdb: (Default.) No effect. smtpgreeting: (Default.) SMTP greeting: 220 node_abcd.nix.co.jj. smtproutes: SMTP route: nix.co.jj:[192.10.10.1] timeoutconnect: (Default.) SMTP client connection timeout is 60 seconds. timeoutremote: (Default.) SMTP client data timeout is 1200 seconds. timeoutsmtpd: (Default.) SMTP server data timeout is 1200 seconds. virtualdomains: (Default.) No virtual domains. me.bak: I have no idea what this file does. smtproutes.bak: I have no idea what this file does. (3) qmail のテスト * 自マシン INDY 内でのテスト root% cd /var/qmail/boot root% home & root% ps -ef | grep qmail qmailr 4581 4578 0 10:23:39 pts/8 0:00 qmail-rspawn root 4580 4578 0 10:23:39 pts/8 0:00 qmail-lspawn ./Mailbox qmailq 4582 4578 0 10:23:39 pts/8 0:00 qmail-clean qmails 4578 22704 0 10:23:39 pts/8 0:00 qmail-send qmaill 4579 4578 0 10:23:39 pts/8 0:00 splogger qmail katou% echo to: jiro | /var/qmail/bin/qmail-inject これで同じマシンのユ−ザ jiro に qmail でメ−ルを送ることになる。 ちなみにこのマ シンは小生がいつもメ−ルの読み書きに使っていて、qmail のテスト中でも sendmail は 動いている。 qmail-inject はメ−ルの送信テスト用のコマンドと思ってよさそうである。 通常の運用では qmail-inject は出て来ない。 ところで、INDY では % echo to: とやる とすぐ処理してメ−ルを送った。 別に qmail のデ−モンを再起動しないと送らないとい うようなことはない。 % login jiro << /usr/people/jiro ディレクトリに入る。環境変数 MAIL を % printenv MAIL /usr/people/jiro/Mailbox とする。qmail は各ユ−ザのホ /usr/mail/jiro −ムディレクトリの Mailbox というファイルにメ−ルをた % setenv MAIL ~/Mailbox めるようになっている。 % cat Mailbox From katou@indy2.nix.co.jj Wed Aug 02 01:24:57 2000 Return-Path: Delivered-To: jiro@indy2.nix.co.jj Received: (qmail 4601 invoked by uid 0); 2 Aug 2000 01:24:57 -0000 Date: 2 Aug 2000 01:24:57 -0000 Message-ID: <20000802012457.4600.qmail@indy2.nix.co.jj> From: katou@indy2.nix.co.jj to: jiro@indy2.nix.co.jj % mail << /usr/people/jiro/Mailbox のメ−ルを見ることができる。 * メ−ルサ−バを介したテストその1 root -----> haruo@nix.co.jj ----> jiro@indy2.nix.co.jj -------- ------- ------- |Apollo| |SunOS|メ−ルサ−バ |INDY | -------- ------- ------- | node_abcd | mails | indy2 --------------------------------------------------- nix.co.jj qmail sendmail-8.9.1 sednmail-8.8.5 smtproutes 静的配送 静的配送 192.10.10.1 192.10.10.2 192.10.10.3 [ SunOS の設定 ] /etc/aliases /etc/hosts /etc/passwd ----------------- ------------------ ------------------------------------------ |haruo:jiro@indy2 |192.10.10.2 indy2 |haruo::301:12::/user/people/jiro:/bin/csh [ Apollo での設定とテスト ] INDY でやったのと同じように、$ config-fast node_abcd.nix.co.jj とやって qmail の 制御ファイルを作成する。更に自分のマシンのメ−ルユ−ザ以外のメ−ルは、メ−ルサ− バである SunOS に投げるように smtproutes という制御ファイルを書く。root ユ−ザ用 のメ−ル・エリアも作っておくこと。 /etc/hosts << Apollo では $/etc/mkhosts /etc/hosts をやって ------------------------- おくこと。 |127.0.0.1 localhost |192.10.10.1 node_abcd /var/mail/control/smtproutes << 社内メ−ルサ−バのIPアドレスを指定する。 ---------------------------- |nix.co.jj:[192.10.10.2] ドキュメントでは、ここはIPアドレスでなくて FQDN を指定するようになっている。例 えば mail.nix.co.jj とか通常は入れる。そうするとDNSを引いてIPアドレスを取得 しようとする。しかしこのマシンではDNSをひけない。そもそも内部ネットではDNS は運用していないのでダメである。直接IPアドレスを入れるしかない。 $ /bin/start_csh $ setenv PATH /var/qmail/bin:$PATH $ qmail-start ./Mailbox splogger qmail & [1] 3544 $ rm /var/adm/SYSLOG /etc/syslog.conf $ touch /var/adm/SYSLOG ----------------------------------- |*.debug;kern.none /var/adm/SYSLOG $ /etc/syslogd $ echo to: haruo@nix.co.jj | /var/qmail/bin/qmail-inject $ /usr/ucb/tail /usr/adm/SYSLOG Jul 28 17:52:16 node_abcd syslogd: restart Jul 28 17:52:42 node_abcd qmail: 964774362.426916 status: exiting Jul 28 17:52:45 node_abcd qmail: 964774365.059264 status: local 0/10 remote 0/20 Jul 28 17:52:45 node_abcd qmail: 964774365.229748 new msg 971849939 Jul 28 17:52:45 node_abcd qmail: 964774365.240812 info msg 971849939: \ bytes 235 from qp 3266 uid 0 Jul 28 17:52:45 node_abcd qmail: 964774365.551696 starting delivery 1: \ msg 971849939 to remote haruo@nix.co.jj Jul 28 17:52:45 node_abcd qmail: 964774365.567464 status: local 0/10 remote 1/20 Jul 28 17:52:48 node_abcd qmail: 964774368.914236 delivery 1: success: \ 192.10.10.2_accepted_message./Remote_host_said:_250_RAA17080_Message \ _accepted_for_delivery/ Jul 28 17:52:48 node_abcd qmail: 964774368.977184 status: local 0/10 remote 0/20 Jul 28 17:52:49 node_abcd qmail: 964774369.000488 end msg 971849939 注.ちょっと Apollo では qmail の挙動が変。$ echo to: とやってもすぐメ−ルが飛ば ないのだ。10分位たつと行くみたいだが。 仕方ないので qmail の代表デ−モンの qmail-send を殺す。これで他のも消える。そして再度 $ qmail-start ... とやる。 [ INDY でメ−ルを受ける ] % pwd << jiroでロッグインする。このマシンでは sendmail /usr/people/jiro で SunOS の sendmail からメ−ルをもらう。 % mail From root@node_abcd.nix.co.jj Fri Jul 28 18:33:10 2000 Received: from mails.nix.co.jj (mail [192.10.10.2]) by indy2.nix.co.jj (8.9.1/3.7W) with ESMTP id SAA23605 for ; Fri, 28 Jul 2000 18:33:10 +0900 (JST) From: root@node_abcd.nix.co.jj Received: from node_abcd.nix.co.jj by mails.nix.co.jj (8.8.5/nix.1.0) id SAA17191; Fri, 28 Jul 2000 18:26:31 +0900 (JST) Received: (qmail 3292 invoked by uid 0); 28 Jul 2000 09:29:13 -0000 Date: 28 Jul 2000 09:29:13 -0000 Message-ID: <20000728092913.3291.qmail@node_abcd.nix.co.jj> to: haruo@nix.co.jj ? d * メ−ルサ−バを介したテストその2 テスト1では Apollo から ikken@tcp-ip.or.jj 宛にメ−ルを送ろうとしたが、だめだっ た。そこで rcpthosts ファイルはなしにして、smtproutes を下記のようにしたらうまく 行った。行ったメ−ルは root@node_abcd.nix.co.jj と言うようにマシン名も入っていた。 これは制御ファイルの me を nix.co.jj にしたら、root@nix.co.jj となった。この様子 は SYSLOG を見ても確認できる。さらに locals ファイルを消してみた。これでも ikken ヘはメ−ルは問題なく届いた。 [ Apollo の /var/qmail/control/ 制御ファイルの設定 ] locals defaultdomain me -------------------- -------------- -------------------- |localhost |nix.co.jj |node_abcd.nix.co.jj --> nix.co.jj |node_abcd.nix.co.jj にしてみた smtproutes plusdomain rcpthosts ファイルはなし。 -------------------- -------------- |:[192.10.10.2] |co.jj * Apollo の qmail を常時稼働にしてみる $ mv /usr/lib/sendmail /usr/lib/sendmail.tmp $ ln -s /var/qmail/bin/sendmail /usr/lib/sendmail /etc/inetd.conf -------------------------------------------------------------------------------- |smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env | 1行で記述すること /var/qmail/bin/qmail-smtpd /etc/services ---------------------- << inetd.conf の smtp が /etc/servicesに |smtp 25/tcp mail 書かれていること一応確認してみた。 $ /usr/ucb/Mail -v ikken@tcp-ip.or.jj << echo to: の qmail-inject でなくてメ− ルを出すことができるようになった。 (4) sendmail を qmail に変える * WWWホストの Solaris 2.6 での変更 先ずは qmail と ucspi-tcp のコンパイルである。問題なくすっと行くかと思ったが意外 な伏兵が。qmail を純正コンパイラでコンパイルすると、 ld 何たらワ−ニングが出たが、 一応コンパイルは通った。しかし Apollo でも同じ様なワ−ニングが出ていて、qmail を 毎度起動しないとメ−ルを配信しないという問題が起きている。これではいかん。それで は gcc ならどうか。これも困った話があって、 qmail には単に Makefile が1つあるだ けで configure とかはない。コンパイラの指示は compile、conf-cc、conf-ld というフ ァイルに直接 cc と書かれているのだ。cc を gcc にかえてやると、今度は違うエラ−が 出て来る。めんどくさいので、バイナリ・モジュ−ルはないかと下記を探したがない。 ftp://sunsite.sut.ac.jp/sun-info/solaris-binaries/sparc エラ−は、/usr/include/sys/model.h:32 #error "No DATAMODEL_NATIVE specified" こ ういうのが出ている。http://www.sun.co.jp/tech/faq/solaris2_ja で調べたとこによる と BIND 4.x、BIND 8.x をいじったりした場合やOSをバ−ジョンアップしたような場合、 ヘッダ−ファイルが変わって、それでエラ−が起きるらしい。対策としては変更や消去さ れたヘッダ−ファイルを Solaris のOSの CD-ROM からを入れ直すか、 gcc をコンパイ ルし直すかということである。確かに BIND 4.7 を入れた時、/usr/include/arpa/inet.h、 /usr/include/arpa/nameser.h、/usr/include/netdb.h、/usr/include/resolv.h ファイ ルが変わっている。 ucspi-tcp の方はどうか。同じ作者によるものなのに、 こっちは gcc を使うようになっ ていた。エラ−も qmail と同じく "No DATAMODEL_NATIVE specified" が出た。まあ仕方 ないので gcc を再コンパイルしようとしたのだが、 何とマシンからソ−スを消去してし まっていた。ディスク容量が無くなってきて、前に消してしまっていたのだ。これまた仕 方ないので、ftp.iij.ad.jp から gcc-2.7.2.3.tar.gz、7099742 bytes、約7メガをダウ ンロ−ドした。Solaris のマシンはディスクが今のところ足らないので INDY へとりあえ ず。gcc-2.7.2.3.tar にした所のサイズが 28231680 bytes。 ん−、どうやって Solaris に入れる。なんてこった、こんなところではまるとは。 * gcc から ucspi-tcp までのコンパイル ともかく # df -k とやって空いているパ−ティションを探して入れる。 GNU のコンパイ ラ gcc-2.7.2.3.tar は、gcc-2.7.2.2 と全く同じように make していく。 下記の様にパ スを設定し、Solaris の純正Cコンパイラを使う。念のため /usr/local/bin にある前の gcc は消しておく。また /usr/local/bin には GNU の gunzip, make, patch が入ってい るものとする。 これでできた gcc で qmail と ucspi-tcp をコンパイルしたところ前の ようなエラ−は出なくなった。qmail をコンパイルする時は conf-cc、conf-ld の cc を gcc に変えておくこと。これでばっちりである。 # /bin/csh # setenv LANG C # setenv PATH /usr/local/bin:/usr/ccs/bin:/opt/SUNWspro/bin:$PATH # /etc/rc2.d/K85lmgrd << 純正Cコンパイラ。使い終わったら kill で殺す。 # tar xvf ucspi-tcp-0.88.tar << http://www.jp.qmail.org/tools/ からダウンロ− # cd ucspi-tcp-0.88 ドしてくる。ここには ucspi-tcp の日本語訳など # make もある。make setup やると /usr/local/bin にこ # make setup れだけインスト−ルされる。 addcr argv0 date@ delcr finger@ fixcrio http@ mconnect mconnect-io rblsmtpd recordio tcpcat tcpclient tcprules tcprulescheck tcpserver who@ * メ−ルリレ−だけ qmail に変更する 社内メ−ルサ−バの sendmail まで qmail に変える必要があるか。 あまりメリットがな いと小生は判断した。メ−ルリレ−のを変えるのは、SPAM対策をより確実にするため である。メ−ルサ−バを qmail にすると、POP のソフトも qmail-pop3d とかにせないけ ない。さらに qmail 推奨の maildir 形式のメ−ル管理のため、POP ユ−ザ全員のホ−ム ディレクトリを作るはめになる。メ−ルだけのために50も100ものディレクトリを作 るの?。しかし POP ユ−ザは定期的にメ−ルを取りに来るだけで、 ここのディレクトリ でメ−ルを管理するわけでない。各自の Windowsパソコンなどに取り込み、フォルダ−に 入れるわけだ。そこには maildir も mbox 形式も関係ないのだ。 | hostA Solaris 2.6 : メ−ルリレ− -------- ------- DNS1次 |Router| | WWW | qmail + tcpserver 以下全てこのホストでの設 -------- ------- 定である。 Mail ホストは | | 200.241.128.3 これまでのままである。 -------------*----------------------- nix.co.jj | Firewall-1 ------- hostB ------- SunOS 4.1.4 : メ−ルサ−バ IPアドレス変換 | | | Mail| sendmail-8.8.5 静的配送 ------- ------- poppper | | 192.168.1.1 ---------*---------------*--------- [ /var/qmail/control/ 制御ファイル作成の準備 ] /etc/resolv.conf /etc/hosts ------------------------- ------------------------------------------- |domain nix.co.jj << 追加した。|127.0.0.1 localhost |nameserver 202.241.128.3 |202.241.128.3 hostA mail.nix.co.jj loghost |192.168.1.1 hostB # cd /usr/local/source/qmail-1.03 << ちゃんとインスト−ルしておく。 # ./config << /etc/resolv.conf に domain がないと、うま Your hostname is hostA. くいかない。 Your host's fully qualified name in DNS is hostA.nix.co.jj. | Copying /var/qmail/control/locals to /var/qmail/control/rcpthosts... Now qmail will refuse to accept SMTP messages except to those hosts. Make sure to change rcpthosts if you add hosts to locals or virtualdomains! **** これで /var/qmail/control/ にできたファイル **** defaultdomain locals me plusdomain rcpthosts ------------- ---------------- ---------------- ---------- ---------------- |nix.co.jj |localhost |hostA.nix.co.jj |co.jj |localhost |hostA.nix.co.jj |hostA.nix.co.jj [ qmail & tcpserver 全制御ファイル ] /var/qmail/control/defaultdomain, locals, plusdomain, rcpthosts はそのままでOK。 /var/qmail/control/me /etc/tcp.smtp --------------------- --------------------------------- |nix.co.jj |192.168.1.1:allow,RELAYCLIENT="" |127.:allow,RELAYCLIENT="" /var/qmail/control/smtproutes |:allow ----------------------------- |nix.co.jj:[192.168.1.1] 下のコマンドを打って tcp.smtp.cdb というファイルを作る。 /var/qmail/control/rcpthosts ----------------------------- |nix.co.jj << www.nix.co.jj だとダメ。 # /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp # cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root # chmod 644 ~alias/.qmail* # cp /var/qmail/boot/home /var/qmail/rc /var/qmail/alias/.qmail-root << root に来たメ−ルを jiro に転送する。qmail の ---------------------------- ホ−ムペ−ジの "dot-qmail の使い方"参照のこと。 |&jiro@nix.co.jj /etc/rc2.d/S89qmail << S89 が空いていたとして、こういうのを作る。 -------------------------------------------------------------------------------- |pid=`/usr/bin/ps -e | /usr/bin/grep qmail-send | /usr/bin/sed 続く |case $1 in -e 's/^ *//' -e 's/ .*//'` |'start') | if [ "${pid}" = "" ] 注.ps -e の所 Apollo だったら ps -ax にすること。 | then | /var/qmail/rc & | /usr/local/bin/tcpserver -u 7791 -g 2108 -x /etc/tcp.smtp.cdb 続く | 0 smtp /var/qmail/bin/qmail-smtpd & | fi | ;; |'stop') | if [ "${pid}" != "" ] | then | /usr/bin/kill ${pid} | fi | ;; |*) | echo "usage: /etc/rc2.d/S89qmail {start|stop}" | ;; |esac [ テストと入れ替えのタイミング ] メ−ルリレ−の /etc/aliases はどうなるか。root, Postmaster, MAILER-DAEMON 宛のメ −ルは管理者である jiro に転送するようにこれまでしている。とりあえず上記のように /var/qmail/alias 内の .qmail-root に &jiro@nix.co.jj と書き込んだ。 ちゃんと転送 するかテストしておく。rcpthosts のファイル名を変えるなどして、rcpthosts を無効に し # /var/qmail/rc &、そして # echo to: root | /var/qmail/bin/qmail-inject とや る。これで内部ネットのユ−ザ jiro にメ−ルが行くはずである。 どうもまだ qmail の alias よく理解できない。この転送テストの時メ−ルリレ−の sendmail デ−モンは稼働 したままでよい。テストが終わったら rcpthosts は元に戻しておく。 # mailq メ−ルキュ−がないか確認して、稼働している sendmail を殺 Mail queue is empty し、ちゃっと次の作業してマシンをリブ−トする。 # mv /usr/lib/sendmail /usr/lib/sendmail.tmp # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # mv /etc/rc2.d/S88sendmail /etc/rc2.d/K88sendmail [ SPAMのチェック ] http://www.kyoto.wide.ad.jp/mta/relaycheck.html << だいじょうぶ。 http://www.nanet.co.jp/rlytest/ << こっちもだいじょうぶでした。 http://www.orbs.org/closed_1.html << これでブラックリストから削除してもらう。 * メンテナンスのヒント $ /var/qmail/bin/qmail-qstat messages in queue: 1 messages in queue but not yet preprocessed: 1 $ cd /var/qmail << qmail のメ−ルキュ−にメ−ルが溜まっている状態。 $ /com/lst -l queue Apollo でコンパイルした qmail は、qmail を毎度 (dir) 4 queue/bounce 起動しないとメ−ルを出さないので、メ−ルがたま (dir) 4 queue/info/0 っている様子が分かったのだ。 | (file) 4 queue/intd/992696449 (file) 4 queue/mess/4/992696449 (file) 4 queue/todo/992696449 * SGI のマシンでの注意 シリコングラフィックスの IRIX 6.x 代で、qmail のログの記録時間が9時間ずれている と、昔お世話になった人から聞いた。 手元のマシン IRIX 5.3でもすぐに確認したところ、 同様ずれていた。qmail サイトの FAQ などに、修正するやり方が書かれている。他のSun や Linux などは問題ないようである。メ−ルを送った、送らないと言った場合、 こうし たログは証拠として役立つかも知れないが。先ずは個人個人でメ−ルの控えを取っておく ことが肝要である。 root% /var/qmail/boot/home & jiro% echo to: katou | /var/qmail/bin/qmail-inject jiro% setenv HOME=/usr/people/jiro PATH=:/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/usr/bin/X11 LOGNAME=jiro HZ=100 TZ=JST-9 | root% tail /var/adm/SYSLOG Jul 6 18:19:14 6C:indy2 sendmail[6712]: SAA06712: from=, .. Jul 6 18:19:15 6C:indy2 sendmail[6713]: SAA06712: to=|/usr/lib/Zmail/bin/... Jul 6 18:19:58 5E:indy2 su[6721]: succeeded: ttyq2 changing from katou to root Jul 6 09:20:55 6C:indy2 qmail: 962875255.425977 status: local 0/10 remote 0/20 Jul 6 09:26:22 6C:indy2 qmail: 962875582.789472 bounce msg 44442 qp 6761 ↑ sendmail のログは正しい時刻だが qmail は9時間マイナスしている。 /var/qmail/boot/home ---------------------------------------------------------------- |#!/bin/sh |# Using splogger to send the log through syslog. |# Using qmail-local to deliver messages to ~/Mailbox by default. |exec env - PATH="/var/qmail/bin:$PATH" \ << ここにタイムゾ−ンの設定をする。 |qmail-start ./Mailbox splogger qmail (5) Postfix というのも出てきた `22/05 * 概要 とりあえずまだメ−ルサ−バとして使うつもりはないが、どんなものか見ておきたい。ネ ットワ−ク管理者の間では、じわじわと人気が出て来ているらしい。TCP wrapper を作っ た人が開発したとのことで、安全性も高いようである。Linux ディストリビュ−ションの Vine とか、新進の Z-Linux にも入ってきている。ざっと見たところ sendmail との互換 性が考慮されているようである。sendmail での aliases と .forward ファイルはそのま ま使うことができる。以下、小生が常に使っているマシン INDY IRIX 5.3に、メ−ルクラ イアントとして Postfix を入れてみた。2日でできてしまった。メ−リングリストのfml、 こちらはどうもよく分からなくて、もう半年以上ほかっているというのに。設定はサイト kobitosan とこの、"faq.html" の中の "イントラネットでの Postfix の利用"、 それに "INSTALL" を見てできた。sendmail.cf に相当する制御ファイルは/etc/postfix/main.cf である。sendmail.cf よりは分かり易く、取っ付き易いように感じた。 [ 参考 ] http://www.kobitosan.net/postfix/ "Postfix のペ−ジ"、奥村先生とこから辿った。 > 日本語訳のドキュメントなどとても充実している。ここを先ず見ればいいのでないか。 「月刊 SunWorld」 2002/06、1,230 円税込み。いかん近くの本屋においてない。 > 管理性の向上とセキュリティの強化を実現する Sendmail -> Postfix 移行ガイド。 「Postfix メ−ルサ−バの構築」 Richard Blum 原著、3,800 円+税、アスキ−出版。 > MySQL や LDAP などと連携できる。必要になったら購入することにしよう。 * 現状の INDY のメ−ルクライアントの状態 自分が常に使っているマシン、INDY IRIX 5.3 に Postfixを入れる。うまく行かなかった 時のことを考え、現状復帰できるようファイルをピ−したり、現状の状態を記しておく。 % ps -ef | grep sendmail root 305 1 0 3月18日 /usr/lib/sendmail -bd -q15m % telnet localhost 25 220 indy2.nix.co.jj ESMTP Sendmail 8.9.1/3.7W; Thu, 30 May 2002 13.. +0900 (JST) CF ツ−ルで作成の静的配送タイプ。 % ls -al /etc/send* ↓ -rw-r--r-- 1 root sys 20086 12月 13日 14時53分 /etc/sendmail.cf -rw-r--r-- 1 root sys 20086 5月 31日 13時26分 /etc/sendmail.cf.220531 ↑ % ls -al /usr/lib/send* コピ−した -rwsr-xr-x 1 root sys 825004 12月 17日 1999年 /usr/lib/sendmail ↓ -rwsr-xr-x 1 root sys 825004 5月 31日 13時26分 /usr/lib/sendmail.220531 lrwxr-xr-x 1 root sys /usr/bsd/mailq -> /usr/lib/sendmail lrwxr-xr-x 1 root sys /usr/bsd/newaliases -> /usr/lib/sendmail lrwxr-xr-x 1 root sys /usr/bsd/hoststat -> /usr/lib/sendmail lrwxr-xr-x 1 root sys /usr/bsd/purgestat -> /usr/lib/sendmail * Postfix 実験中のメ−ル環境 □ Router Mail Store の /etc/aliases | --------------------------- ---------- Mail Relay |#katou:katou@indy2 | □ |katou: katou@indy2, ikken ikken katou sendmailを | | Mail Store □ □ Postfix へ □----- □ Mail Store の /etc/hosts |.4 |.3 | |.1 ------------------- ------------------------------------------ |192.168.1.3 indy2 Windows INDY 192.168.1.0 Solaris ユ−ザ katou は、常にはマシン INDY でメ−ルを読み書きしている。katou@nix.co.jj宛 のメ−ルは、メ−ルストアから INDY の sendmail へ直接配送するようになっている。こ の INDY で sendmail を Postfix にしてみる実験な訳である。Postfixがうまく設定でき ない間も、メ−ルを読み書きできるようにしたい、否しておかないけない。それでメ−ル ストアで katou 宛に来たのは ikken にも転送するように設定する。それを INDY の隣に ある Windows 98 パソコンで、POP アクセスでメ−ルを受けることにする。転送されたメ −ルの宛先アドレスは to: katou@nix.co.jj になっている。更に Netscape Messengerの 設定を以下のようにしておくと、Netscape Messenger からメ−ルを送る際にも、 発信ア ドレスは From: Katou というように付く。まるでユ−ザ ikken さん というのは、メ−ルのヘッダ−にも本文にもどこにも出て来ない。 << Windows パソコンの Netscape Messenger 4.75 の設定 >> [編集]->[設定]->[メ−ルとグル−プ] {個人情報} 名前: Katou、電子メ−ルアドレス: katou@nix.co.jj {メ−ルサ−バ} 受信メ−ルサ−バ: 192.168.1.1、ユ−ザ名 ikken、POP3サ−バ指定 送信メ−ルサ−バ: SMTPサ−バ192.168.1.1、ユ−ザ名なしでも構わない * INDY へのコンパイル&インスト−ル Postfix の公式サイト http://www.postfix.org/ を見て、 日本のミラ−サイトからソ− スをダウンロ−ドしてみた。2002年5月末時点、パッチの当たった最新は2002/05/29 作成のパッケ−ジである。INDY に postfix というユ−ザとグル−プ、それに以下のイン スト−ルで見られる setgid_group の postdrop というグル−プを先に作っておく。それ でコンパイルにかかること。オプション setgid_group は、以前のバ−ジョンではデフォ ルトが [no] になっていたり、グル−プ名が maildrop だったりした。少し注意されたい。 % make はデフォルトで純正Cコンパイラを選んだ。 GNU のにしたければ % make CC=gcc とやること。後、特に問題はなかったように思う。 % zcat postfix-1.1.11.tar.gz | tar xvf - % cd postfix-1.1.11 % make << make コマンドをたたくと、自動的に makedefs を実行し、 % make install Makefile を書き直して、その Makefile で実行する。 | install_root: [/] 全部デフォルトのままとし、リタ−ンを押していく。詰めて表示。 tempdir: [/usr/local/source/postfix/postfix-1.1.11] config_directory: [/etc/postfix] daemon_directory: [/usr/libexec/postfix] command_directory: [/usr/sbin] queue_directory: [/var/spool/postfix] sendmail_path: [/usr/sbin/sendmail] << できた sendmail を /usr/lib/ にコピ− newaliases_path: [/usr/bin/newaliases] しておくこと。INDY の Mail コマンドは mailq_path: [/usr/bin/mailq] 内部で /usr/lib/sendmail を使っている。 mail_owner: [postfix] setgid_group: [postdrop] manpage_directory: [/usr/local/man] << man1/, man5/, man8/ ができる。 sample_directory: [/etc/postfix] | /etc/aliases /etc/hosts -------------------- ------------------------------------- |MAILER-DAEMON:root |127.0.0.1 localhost |postmaster:root |192.168.1.3 indy2 indy2.nix.co.jj |nobody: /dev/null |postfix: root << これ必ず記入すること。% /usr/bin/newaliases もやっておくこと。 |root: ikken /etc/postfix/main.cf --------------------------------- 手を加えたところのみ記述 |myhostname = indy2.nix.co.jj |mydomain = nix.co.jj |myorigin = $mydomain |mydestination = $myhostname, localhost.$mydomain |mynetworks = 192.168.1.0/24, 127.0.0.0/8 |relayhost = [192.168.1.1] |alias_maps = dbm:/etc/aliases << % postconf -m でデ−タベ−スの種類を |alias_database = dbm:/etc/aliases << 調べたら dbm だった。ただの postconf |disable_dns_lookups = yes とたたくと、全パラメ−タの状態が出る。 % /usr/sbin/postfix start << Postfix をスタ−トさせる。 % postfix stop << Postfix をストップさせる。 % postfix reload << 途中で main.cf を変更したら、これで反映される。 * パッケ−ジとインスト−ル後 % ftp ring.aist.go.jp ftp> cd /pub/net/mail drwxr-sr-x 2 mirror mirror 512 Oct 6 2000 CF drwxr-sr-x 4 mirror mirror 1536 May 8 11:00 cyrus-mail drwxr-sr-x 5 mirror mirror 512 May 28 08:00 postfix drwxr-sr-x 3 mirror mirror 1024 Sep 13 2001 procmail drwxr-sr-x 3 mirror mirror 512 Apr 18 07:00 qpopper drwxr-sr-x 3 mirror mirror 3584 May 25 08:11 sendmail drwxr-sr-x 2 mirror mirror 2048 Apr 19 18:00 smtpfeed ftp> cd postfix/official 安定版である。実験版は experimental である。 | -r--r--r-- 1 mirror mirror 8041 May 29 09:58 postfix-1.1-patch11.gz -r--r--r-- 1 mirror mirror 1190569 May 15 07:35 postfix-1.1.10.tar.gz -r--r--r-- 1 mirror mirror 1190741 May 29 09:48 postfix-1.1.11.tar.gz | % cd /usr/local/source/postfix/postfix-1.1.11; ls -F 0README Makefile.in bin/ makedefs COMPATIBILITY Makefile.init conf/ man/ COPYRIGHT Makefile.katou examples/ mantools/ HISTORY PORTING html/ postfix-install INSTALL README_FILES/ include/ proto/ LICENSE RELEASE_NOTES lib/ src/ Makefile auxiliary/ libexec/ % ls -F /var/spool/postfix active/ corrupt/ deferred/ incoming/ pid/ public/ bounce/ defer/ flush/ maildrop/ private/ saved/ /usr/sbin/postalias, postcat, postdrop, postinst, postlock, postmap, postsuper /usr/sbin/postcard, postconf, postfix, postkick, postlog, postqueue, sendmail /usr/bin/newaliases, mailq % ls -F /etc/postfix LICENSE sample-auth.cf sample-rate.cf access sample-canonical.cf sample-regexp-access.cf aliases sample-compatibility.cf sample-regexp-body.cf canonical sample-debug.cf sample-regexp-header.cf main.cf sample-filter.cf sample-relocated.cf main.cf.default sample-flush.cf sample-resource.cf master.cf sample-ldap.cf sample-rewrite.cf pcre_table sample-lmtp.cf sample-smtp.cf post-install* sample-local.cf sample-smtpd.cf postfix-files sample-misc.cf sample-transport.cf postfix-script* sample-pcre-access.cf sample-virtual.cf regexp_table sample-pcre-body.cf transport relocated sample-pcre-header.cf virtual sample-aliases.cf sample-qmqpd.cf