Presented by 非武装エリア
最終更新日:2003年12月31日
qmailを開始するためのスクリプトを記述します。スクリプトは/var/qmail/bootディレクトリの下に幾つかの起動スクリプトがあります。利用している環境に合わせてこれを/var/qmail/rcとしてコピーします。もし、適当なスクリプトが見つからない場合には、以下のスクリプトを試してください。
( /var/qmail/rc )
#!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ /var/qmail/bin/qmail-start ./Maildir/ splogger |
/var/qmail/rcを作成したら、実行権を与えるのを忘れないように。
# chmod +x /var/qmail/rc [Enter]
もし、qmailのメール管理方式を従来のsendmailと同じmbox方式にしたい場合には、「./Maildir/」の部分を、「./mbox」と指定します。
※ ./Maildir/の部分の最後のスラッシュ(/)は指定をするのを忘れないでください。 忘れた場合にはmailbox形式のファイルとして処理されます。
(注意) Maildir方式を使う場合、各ユーザのホームディレクトリには、Maildir用ディレクトリが存在している必要 があります。(自動的には作成されません) ディレクトリの作成は次のようなコマンドを各ユーザで実行する必要があります. $ /var/qmail/bin/maildirmake $HOME/Maildir [Enter] また、新規にユーザ登録の際に、自動的にMaildirを作成するようにするには、スケルトンディレクトリ (テンプレートディレクトリ)にMaildirを作成しておくと良いでしょう。 スケルトンディレクトリへの登録は、LinuxやFreeBSDでは # /var/qmail/bin/maildirmake /etc/skel/Maildir [Enter] とすれば良いはずです。 |
システム起動時に自動的にqmailを開始するスクリプトを以下のように作成します。
/etc/rc.d/init.d/qmail というスクリプトを以下の内容で作成します。
#!/bin/bash # # qmail This starts and stops qmail. # # chkconfig: 345 92 20 # description: qmail is SMTP server. #!/bin/sh # -------------- /etc/rc.d/init.d/qmail # PATH=$PATH:/var/qmail/bin:/usr/local/bin:/usr/bin:/bin export PATH [ -f /var/qmail/rc ] || exit 0 QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` case "$1" in start) echo -n "qmail-smtpd :" cd /var/qmail/supervise env - PATH="$PATH" svscan & echo $! > /var/run/svscan.pid echo "." ;; stop) echo -n "Stopping qmail: svscan" kill `cat /var/run/svscan.pid` echo -n " qmail" svc -dx /var/qmail/supervise/* echo -n " logging" svc -dx /var/qmail/supervise/*/log echo "." ;; stat) cd /var/qmail/supervise svstat * */log ;; doqueue|alrm) echo "Sending ALRM signal to qmail-send." svc -a /var/qmail/supervise/qmail-send ;; queue) qmail-qstat qmail-qread ;; reload|hup) echo "Sending HUP signal to qmail-send." svc -h /var/qmail/supervise/qmail-send ;; pause) echo "Pausing qmail-pop3d" svc -p /var/qmail/supervise/qmail-pop3d echo "Pausing qmail-send" svc -p /var/qmail/supervise/qmail-send echo "Pausing qmail-smtpd" svc -p /var/qmail/supervise/qmail-smtpd ;; cont) echo "Continuing qmail-pop3d" svc -c /var/qmail/supervise/qmail-pop3d echo "Continuing qmail-send" svc -c /var/qmail/supervise/qmail-send echo "Continuing qmail-smtpd" svc -c /var/qmail/supervise/qmail-smtpd ;; restart) echo "Restarting qmail:" echo "Stopping qmail-smtpd." svc -d /var/qmail/supervise/qmail-smtpd echo "Sending qmail-send SIGTERM and restarting." svc -t /var/qmail/supervise/qmail-send echo "Restarting qmail-smtpd." svc -u /var/qmail/supervise/qmail-smtpd ;; cdb) tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp* echo "Reloaded /etc/tcp.smtp." ;; help) cat <<HELP stop -- stops mail service (smtp connections refused, nothing goes out) start -- starts mail service (smtp connection accepted, mail can go out) pause -- temporarily stops mail service (connections accepted, nothing leaves) cont -- continues paused mail service stat -- displays status of mail service cdb -- rebuild the tcpserver cdb file for smtp restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue hup -- same as reload HELP # --- 「HELP」はラベルなので先頭スペースを空けないこと。 ;; *) echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}" exit 1 ;; esac exit 0 |
登録したスクリプトに実行属性を与えます。
# chmod +x /etc/rc.d/init.d/qmail [Enter]
※ もし、qmail自動時にすぐ終了してしまうような場合には、”start”セクションの部分を「nohup」を追加して起動してください。
例) nohup env - PATH="$PATH" svscan &
Linux系のOSでは、サービスとして上記のスクリプトを自動的に起動させるために、以下のように設定します。
# chkconfig --add qmail [Enter]
これで、先ほどのスクリプトに記述された「chkconfig: 345 92 20」の各RUNレベルで/etc/rc.d/init.d/qmailが起動時に立ち上がるようになります。 なお、作成したスクリプトに以下のようなリンクを張っておきます。
# ln -s /etc/rc.d/init.d/qmail /usr/local/sbin/qmail [Enter]
/usr/local/etc/rc.d/qmail.sh というスクリプトを以下の内容で作成します。
#!/bin/sh # -------------- /usr/local/etc/rc.d/qmail.sh # PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin export PATH case "$1" in start) echo -n "Starting qmail:svscan" cd /var/qmail/supervise env - PATH="$PATH" svscan & echo $! > /var/run/svscan.pid echo "." ;; stop) echo -n "Stopping qmail: svscan" kill `cat /var/run/svscan.pid` echo -n " qmail" svc -dx /var/qmail/supervise/* echo -n " logging" svc -dx /var/qmail/supervise/*/log echo "." ;; stat) cd /var/qmail/supervise svstat * */log ;; doqueue|alrm) echo "Sending ALRM signal to qmail-send." echo "Sending ALRM signal to qmail-send." svc -a /var/qmail/supervise/qmail-send ;; queue) qmail-qstat qmail-qread ;; reload|hup) echo "Sending HUP signal to qmail-send." svc -h /var/qmail/supervise/qmail-send ;; pause) echo "Pausing qmail-send" svc -p /var/qmail/supervise/qmail-send echo "Pausing qmail-smtpd" svc -p /var/qmail/supervise/qmail-smtpd ;; cont) echo "Continuing qmail-send" svc -c /var/qmail/supervise/qmail-send echo "Continuing qmail-smtpd" svc -c /var/qmail/supervise/qmail-smtpd ;; restart) echo "Restarting qmail:" echo "Stopping qmail-smtpd." svc -d /var/qmail/supervise/qmail-smtpd echo "Sending qmail-send SIGTERM and restarting." svc -t /var/qmail/supervise/qmail-send echo "Restarting qmail-smtpd." svc -u /var/qmail/supervise/qmail-smtpd ;; cdb) tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp* echo "Reloaded /etc/tcp.smtp." ;; help) cat <<HELP stop -- stops mail service (smtp connections refused, nothing goes out) start -- starts mail service (smtp connection accepted, mail can go out) pause -- temporarily stops mail service (connections accepted, nothing leaves) cont -- continues paused mail service stat -- displays status of mail service cdb -- rebuild the tcpserver cdb file for smtp restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue hup -- same as reload HELP # --- 「HELP」はラベルなので先頭スペースを空けないこと。 ;; *) echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}" exit 1 ;; esac exit 0 |
このスクリプトは、http://Web.InfoAve.net/~dsill/qmail-script-dt61.txt に用意されています。
登録したスクリプトに実行属性を与えます。
# chmod 0755 /usr/local/etc/rc.d/qmail.sh [Enter]
※ もし、qmail自動時にすぐ終了してしまうような場合には、”start”セクションの部分を「nohup」を追加して起動してください。
例) nohup env - PATH="$PATH" svscan &
サービスのためのディレクトリを作成し、属性を与えます。さらに幾つかのスクリプトを作成します。
# mkdir -p /var/qmail/supervise/qmail-send/log [Enter]
# mkdir -p /var/qmail/supervise/qmail-smtpd/log [Enter]
# mkdir /var/qmail/env [Enter]
# chmod +t /var/qmail/supervise/qmail-send [Enter]
# chmod +t /var/qmail/supervise/qmail-smtpd [Enter]
このディレクトリに以下のスクリプトを作成します。
■ /var/qmail/supervise/qmail-send/run
#!/bin/sh exec /var/qmail/rc |
■ /var/qmail/supervise/qmail-send/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail |
■ /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh QMAILD_ID=`id -u qmaild` NOFILES_ID=`id -g qmaild` exec /usr/local/bin/envdir /var/qmail/env sh -c '/usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb \ -u ${QMAILD_ID} -g ${NOFILES_ID} 0 smtp \ /var/qmail/bin/qmail-smtpd 2>&1' |
(注意)
softlimitで制限するメモリ限界は、あなたが利用している環境に合わせて変更する必要があるかも知れません。もし、リモートからポート25(smtp)への接続が失敗するようならば、この値を3000000や4000000としてみてください。
■ /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd |
以上のスクリプトを作成したら、それぞれ実行権を与えます。(忘れないで!)
# chmod +x /var/qmail/supervise/qmail-send/run [Enter]
# chmod +x /var/qmail/supervise/qmail-send/log/run [Enter]
# chmod +x /var/qmail/supervise/qmail-smtpd/run [Enter]
# chmod +x /var/qmail/supervise/qmail-smtpd/log/run [Enter]
さらに、ログディレクトリを設定します。
# mkdir -p /var/log/qmail/smtpd [Enter]
# chown qmaill /var/log/qmail [Enter]
# chown qmaill /var/log/qmail/smtpd [Enter]
一般的なMTAであるsendmailを止めるには、
(Linuxの場合)
# /etc/rc.d/init.d/sendmail stop [Enter]
を実行すると良いでしょう。このコマンドが見つからない場合は、
# ps ax | grep sendmai [Enter]
コマンドでsendmailのプロセス番号(PID)を確認し、この番号を
# kill プロセス番号 [Enter]
というように指定することでもsendmaiは停止します。
(FreeBSDの場合)
FreeBSDではsendmailは、/etc/defaults/rc.dというスクリプトファイルの中で
sendmail_enable="YES"
という記述がある筈ですの、「YES」を「NO」に変更してから再起動するとsendmailが起動されなくなります。
MTA(sendmail)を停止したなら、再起動時にsendmailが起動されないようにするために、
# mv /usr/lib/sendmail /usr/lib/sendmail.old [Enter]
としておくと良いでしょう。できれば”chmod”コマンドを使いこれらの実行権を無くしておけばセキュリティ的にも安心です。そしてオリジナルのsendmail を代わりに、qmail によるsendmail ラッパーをリンクします。(qmail自体ではsendmail は使いませんが、色々なスクリプトやプログラムの中に埋め込まれた形でsendmail を使っているものがあるので、このための対策です)
# ln -s /var/qmail/bin/sendmail /usr/lib [Enter]
以上で起動のための設定はほぼ完了です。あとは必要な幾つかの設定ファイルを記述することです。
ローカルシステムからのsmtp Relayを許可します。以下は、tcpserver の機能を使ってローカルマシン(qmailのインストールされたマシン)から他のマシンへのリレーを許可しています。もし、この指定やコントロールファイルのrcpthostsに同様の指定がない場合には、外部へメールすることができません。
まずエディタ等で、/etc/tcp.smtpというファイルを以下のように作成します。
■ /etc/tcp.smtp
127.:allow,RELAYCLIENT="" 192.168.0.:allow,RELAYCLIENT="" # --- qmailサーバにアクセスできるクライアントのネットワーク :allow |
作成した上記ファイルをtcprulesコマンドでバイナリ化します。
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp [Enter]
上記の設定を行う事で、ローカル(qmailの動作しているマシン)からと、192.168.0.xxのネットワークからのメールをqmailが受け取った際に、宛先が外部ドメイン宛であるメールを相手に届けます。
(注意)qmailでは自分以外のドメイン宛てのメールはすべてリレー(Relay)として扱うので、明示的にRelayを許可したマシンからのメール以外をリレーしません。 |
メールシステムでは、管理用の幾つかのメールアドレスというものがあります。それらのアドレス宛てのメールを実際に管理しているユーザ宛てに書きかえるためにalias という機能を利用しています。
/var/qmail/alias ディレクトリに移り、最低限以下のような設定を行と良いでしょう。
# cd /var/qmail/alias [Enter]
# echo '&hogehoge' > .qmail-root [Enter] ("root"宛てのメールを"hogehoge"へ転送)
# echo '&root' > .qmail-postmaster [Enter] ("postmaster"宛てのメールを"root"へ転送)
# echo '&root' > .qmail-mailer-daemon [Enter]
# echo '&root' > .qmail-webmaster [Enter]
# chmod 644 .qmail-root [Enter]
# chmod 644 .qmail-postmaster [Enter]
# chmod 644 .qmail-mail-daemon [Enter]
# chmod 644 .qmail-webmaster [Enter]
勿論、aliasとして通常のユーザ宛てのメールを別のサーバへ転送したような場合にも利用できるので例えば、「akiba」宛てのメールを「[email protected]」宛てに転送するなら /var/qmail/alia ディレクトリに".qmail-akiba"というファイルを以下の内容で作成します。
■ /var/qmail/alia/.qmail-akiba
&[email protected] |
今までの設定で取りあえずqmailは動作するようになっている筈です。 動作を確認するために一度qmailを起動して動作確認を行って見ましょう。 動作に先立ち、/var/qmail/control/me にFQDN(ドメイン正式名)としてqmailサーバの名前が設定されている事を確認してください。 確認ができたら、
# /usr/local/sbin/qmail start [Enter]
でqmailが起動します。
まずは、ローカルマシン上でのテストを行ってみます。
# echo to: hogehoge | /var/qmail/bin/qmail-inject [Enter]
この結果、/var/log/maillogには次のような記録がされます。
Sep 11 00:26:20 gt575 qmail: 968599580.293363 new msg 58635 Sep 11 00:26:20 gt575 qmail: 968599580.313729 info msg 58635: bytes 225 from <[email protected]> qp 9610 uid 10983 Sep 11 00:26:20 gt575 qmail: 968599580.445050 starting delivery 9: msg 58635 to local [email protected] Sep 11 00:26:20 gt575 qmail: 968599580.445571 status: local 1/10 remote 0/20 Sep 11 00:26:20 gt575 qmail: 968599580.494894 delivery 9: success: did_1+0+0/ Sep 11 00:26:20 gt575 qmail: 968599580.495407 status: local 0/10 remote 0/20 Sep 11 00:26:20 gt575 qmail: 968599580.537726 end msg 58635 |
ここで"success"の記述があればqmailが正常にメッセージを処理できたことを意味します。
同じように今度は、別のホストのユーザへ配送するテストを行います。
# echo to: [email protected] | /var/qmail/bin/qmail-inject [Enter]
同じくログに、
Sep 11 00:34:19 gt575 qmail: 938992459.911970 new msg 129 Sep 11 00:34:19 gt575 qmail: 938992459.914644 info msg 129: bytes 211 from <[email protected]> qp 5345 uid 2003 Sep 11 00:34:20 gt575 qmail: 938992460.056502 starting delivery 25: msg 129 to remote [email protected] Sep 11 00:34:20 gt575 qmail: 938992460.058032 status: local 0/10 remote 1/20 Sep 11 00:34:21 gt575 qmail: 938992461.309848 delivery 25: success: xxx.xxx.xxx.xx accepted_message./Remote_host_said:_250_IAA04720_Message_accepted_for_delivery/ Sep 11 00:34:21 gt575 qmail: 938992461.316097 status: local 0/10 remote 0/20 Sep 11 00:34:21 gt575 qmail: 938992461.317238 end msg 129 |
というように"success"と記述されていれば、別のホストへのメール転送も正常に行えたことを意味します。
Copyrightc 1998-2003 ROBATA.ORG