#contents *ソースのダウンロード [#rc4b12e4] [[qmail-1.03.tar.gz:http://cr.yp.to/qmail.html]] *下準備 [#a05abcae] 必要なディレクトリやグループ・アカウントを前もってつくっておく mkdir /var/qmail /usr/sbin/groupadd nofiles /usr/sbin/useradd -g nofiles -d /var/qmail/alias alias /usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmaild /usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmaill /usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmailp /usr/sbin/groupadd qmail /usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmailq /usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmailr /usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmails *インストール [#va629369] make前に必要となるパッチを前もってダウンロード~ (undefined reference to `errno' というエラーを防ぐパッチ。[[参考:http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/]])~ [[qmail-date-localtime.patch:http://www.ksknet.net/sample/qmail-date-localtime.patch]] /usr/local/src に置いて展開 # tar xvfz qmail-1.03.tar.gz # cd qmail-1.03 # patch < ../qmail-date-localtime.patch # make make時に次のようなエラーが出た場合 : undefined reference to `errno' cdb.a(cdb.o)(.text+0xce): more undefined references to `errno' follow collect2: ld はステータス 1 で終了しました make: *** [tcpserver] エラー 1 さらにパッチをあてる必要がある。 ([[参考:http://www.stackasterisk.jp/tech/systemConstruction/qmail01_06.jsp]])~ [[ucspi-tcp-glibc.patch:http://www.stackasterisk.jp/tech/systemConstruction/qmail01/ucspi-tcp-glibc.patch]] # patch < ../ucspi-tcp-glibc.patch make時に次のようなエラーが出た場合 /lib64/libc.so.6: could not read symbols: Bad value おまじないを実行してから再度 make echo "gcc -O2 --include /usr/include/errno.h" > conf-cc 512バイト以上のDNS応答はエラーとなるようなので、qmail-103.patchも当てておきましょう。~ [[qmailでdeferral CNAME_lookup_failed_temporarily]] インストール # make setup check *インストール後の設定 [#v87f46d8] # ./config # cat /var/qmail/control/me として、正しいサーバー名がセットされていればOK ダメな場合 # ./config-fast マシン名.ドメイン名(.comや.co.jpまで) として、設定だけを完了 *メール用ディレクトリの作成 [#g2ad08ff] 実際にメールを使いたいアカウントになって作業する~ 例えば、アカウント hogehoge の場合 # su hogehoge $ cd $ /var/qmail/bin/maildirmake ./Maildir さらに、ホームディレクトリに .qmail というファイルを各アカウント毎に置いて、qmailの動作設定をエディタ等で記述する メールをディレクトリに保存する場合 ./Maildir/ メールを特定のアドレスへ転送する場合 &xxxx@example.com~ 必要なアカウント分、この作業をしておく さらに管理用のアカウントを /var/qmail/alias の中に設定しておく 最低限必要なアカウント: ''root''、''mailer-daemon''、''postmaster''~ (rootアカウントに実行ファイル等を紛れ込まされるのを防ぐため、qmailでは実際のrootアカウントにメールは届かない) 実際には、 # su alias でqmailのalias アカウントになってから、実際に、このエリアスアカウントのメールを送りたいアドレスを書く $ echo "&tanaka@xxxxxxx.co.jp" > .qmail-root $ echo "&tanaka@xxxxxxx.co.jp" > .qmail-mailer-daemon $ echo "&tanaka@xxxxxxx.co.jp" > .qmail-postmaster 以上で必須アカウントの登録は終了。~ あとは $ echo "&yassu@xxxxxxx.co.jp" > .qmail-webmaster とすれば webmaster@xxxxxxx.co.jp 宛のメールが yassu@xxxxxxx.co.jp 宛に届くし、 $ echo "&yakkun@xxxxxxx.co.jp" > .qmail-yassu としておくと yassu@xxxxxxx.co.jp 宛のメールが yakkun@xxxxxxx.co.jp 宛に届く、といった設定が可能 *起動スクリプトの準備 [#m955c961] qmailの起動スクリプトをコピーして使用 # cp /var/qmail/boot/home /var/qmail/rc # vi /var/qmail/rc として、途中にある ./Mailbox の部分を ./Maildir/ &color(red){(←最後のスラッシュが重要)};としておく 次に、起動スクリプトを作成~ パスとファイル名は /etc/rc.d/init.d/qmaild #!/bin/sh ############ # Startup script for the Qmail by Penta # # chkconfig: 345 55 15 # description: QMAIL SMTP & POP3サーバー # processname: qmaild # pidfile: /var/run/qmaild.pid # filename /etc/rc.d/init.d/qmaild # # Source function library. . /etc/rc.d/init.d/functions # See how we were called. case "$1" in start) echo -n "Starting qmaild: " /usr/local/bin/tcpserver -H -R -x /etc/tcp.smtp.cdb \ -c 100 -u qmaild -g nofiles 0 smtp \ /var/qmail/bin/qmail-smtpd 2>&1 \ /var/qmail/bin/splogger smtpd & /usr/local/bin/tcpserver 0 pop3 \ /var/qmail/bin/qmail-popup マシン名.ドメイン名 \ /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 \ /var/qmail/bin/splogger pop3d & /var/qmail/rc & echo "ok" touch /var/lock/subsys/qmaild ;; stop) echo -n "Shutting down qmail: " kill $(/sbin/pidof tcpserver) kill $(/sbin/pidof qmail-send) echo "ok" rm -f /var/lock/subsys/qmaild ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {startstoprestart}" exit 1 esac exit 0 # chmod 755 /etc/rc.d/init.d/qmaild # /sbin/chkconfig --add qmaild *受信側の設定 [#i57765b9] 受信するホストを設定するのは /var/qmail/control/locals エディタで開いて、 sv.xxxxx.co.jp sv localhost xxxxx.co.jp ここでは、svがマシン名、xxxxx.co.jpがドメイン名上から順番に「正確なホスト名」「ホスト名のマシン名の部分」「ローカル(マシン内部からの接続用」「ドメイン名(LAN経由)」 *送信側の設定 [#qf55a05a] smtpに送られてきたメールを外向けに送信するのか、ローカルに保存するのかを決めるのは /var/qmail/control/rcpthosts エディタで開いて、さっきと同じように編集 sv.xxxxx.co.jp sv localhost xxxxx.co.jp *ダブルバウンスの削除設定 [#x80744a9] 受信者、送信者ともに存在しないメールは破棄するようにする場合、以下を行なう # touch /var/qmail/control/doublebounceto *受信者の登録 [#nd95f844] ここで設定しておくと yassu-fanとか、実際のメールアカウント名の後ろにハイフン「-」を付けたメールアドレスが有効になる~ Linux上のパスワードファイルをコピー # cp /etc/passwd /var/qmail/users/passwd # cd /var/qmail/users # /var/qmail/bin/qmail-pw2u < passwd > assign # vi assign 不要な行は削除する =yassu:yassu:500:500:/home/yassu::: +:yassu:500:500:/home/yassu:-:: =alias:alias:501:501:/var/qmail/alias::: +:alias:501:501:/var/qmail/alias:-:: . 最後のドット[.]だけの行は、必要なので消さないこと # /var/qmail/bin/qmail-newu ユーザーデータベースである cdb が出来る後で、新しいアカウントを追加したい時にも alias を変更して、同じように実行する *ヘルパーデーモンの設定 [#i376bd78] qmailは単体としては動かないので tcpserver を使用する http://cr.yp.to/tcpip.html # cd /usr/local/src # tar xvfz ucspi-tcp-0.88.tar.gz # cd ucspi-tcp-0.88 # make # make setup check /usr/local/bin に tcpserver など実行ファイルが出来る 次にルールデータベースを作成 ここでは smtp専用のルールとして、/etc の中に tcp.smtp.txt を作成 # vi /etc/tcp.smtp.txt 127.0.0.1:allow,RELAYCLIENT="" :allow これで外からも繋げて、locals 等で設定した自分のドメイン以外からはメールを受け付けない # /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.txt < /etc/tcp.smtp.txt /etc/tcp.smtp.cdb ができればOK *POP3サーバーの準備 [#b686f405] qmail に付属している qmail-pop3d を使用~ http://cr.yp.to/checkpwd/install.html # cd /usr/local/src # tar xvfz checkpassword-0.90.tar.gz # cd checkpassword-0.90 # make # make setup check *qmailの動作テスト [#wd9427c0] sendmailが動いていれば停止 # /etc/rc.d/init.d/sendmail stop qmailを起動 # /etc/rc.d/init.d/qmaild start # echo to: root | /var/qmail/bin/qmail-inject でメール送信確認 以下のサイト等で不正中継がちゃんとできなくなっているかどうか確認 ~ -%% http://www.nanet.co.jp/rlytest/relaytest.html %% (Not Found) ~ -http://www.rbl.jp/ (「ツール」の「第三者中継チェック」) *sendmailの削除 [#r1fc6050] sendmailが入っている場合は削除 # rpm -qa | grep sendmail で、バージョンまで確認 # rpm -e sendmailx.xx.xx で、削除 関連するRPMパッケージが入っていると、うまく削除できないのでそれもあわせて削除 最後に、コマンドラインやcgiから使われるsendmailコマンドをqmailのsendmailラッパーコマンドする # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail 参考 [[運用関連トラブルシューティング集:http://www.atmarkit.co.jp/flinux/rensai/qmail12/qmail12a.html]] アットマーク・アイティ様m(__)m *「-」から始まるメールアドレスに送信できない!? [#k25b263a] オプションが不正と判断されて落ちることがあります Perlでメール送信した場合Apacheにはこのようなログが残り、メール送信ログには何も残りません sendmail: illegal option -- a sendmail: usage: sendmail [ -t ] [ -fsender ] [ -Fname ] [ -bp ] [ -bs ] [ arg ... ] 以下のようにして送信しましょう /usr/lib/sendmail -- -hogehoge@example.com *環境変数を活用する [#z8c18e59] dot-qmailからプログラムにリダイレクトする場合は環境変数を利用するのが便利そうです Perl -$ENV{'SENDER'} : 送信元 -$ENV{'RECIPIENT'} : 送信先 他にはこちらを参考 http://man.qmail.jp/jman8/qmail-command.html *ローカルサーバーからのメール送信 OB25B対策 [#jdd2dbe3] /var/qmail/control/smtproutes を作成 example.com:example.jp:587 username password (ドメイン名:転送先:ポート番号 ユーザー名 パスワード) #exlink