ソースのダウンロード

qmail-1.03.tar.gz

下準備

必要なディレクトリやグループ・アカウントを前もってつくっておく

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

インストール

make前に必要となるパッチを前もってダウンロード
(undefined reference to `errno' というエラーを防ぐパッチ。参考
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

さらにパッチをあてる必要がある。 (参考
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

インストール後の設定

# ./config
# cat /var/qmail/control/me

として、正しいサーバー名がセットされていればOK

ダメな場合

# ./config-fast マシン名.ドメイン名(.comや.co.jpまで)

として、設定だけを完了

メール用ディレクトリの作成

実際にメールを使いたいアカウントになって作業する
例えば、アカウント hogehoge の場合

# su hogehoge
$ cd
$ /var/qmail/bin/maildirmake ./Maildir

さらに、ホームディレクトリに .qmail というファイルを各アカウント毎に置いて、qmailの動作設定をエディタ等で記述する

メールをディレクトリに保存する場合

./Maildir/

メールを特定のアドレスへ転送する場合

&xxxx@example.com~

必要なアカウント分、この作業をしておく

さらに管理用のアカウントを /var/qmail/alias の中に設定しておく

最低限必要なアカウント: rootmailer-daemonpostmaster
(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 宛に届く、といった設定が可能

起動スクリプトの準備

qmailの起動スクリプトをコピーして使用

# cp /var/qmail/boot/home /var/qmail/rc
# vi /var/qmail/rc

として、途中にある ./Mailbox の部分を ./Maildir/ (←最後のスラッシュが重要)としておく

次に、起動スクリプトを作成
パスとファイル名は /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

受信側の設定

受信するホストを設定するのは /var/qmail/control/locals エディタで開いて、

sv.xxxxx.co.jp
sv
localhost
xxxxx.co.jp

ここでは、svがマシン名、xxxxx.co.jpがドメイン名上から順番に「正確なホスト名」「ホスト名のマシン名の部分」「ローカル(マシン内部からの接続用」「ドメイン名(LAN経由)」

送信側の設定

smtpに送られてきたメールを外向けに送信するのか、ローカルに保存するのかを決めるのは /var/qmail/control/rcpthosts エディタで開いて、さっきと同じように編集

sv.xxxxx.co.jp
sv
localhost
xxxxx.co.jp

ダブルバウンスの削除設定

受信者、送信者ともに存在しないメールは破棄するようにする場合、以下を行なう

# touch /var/qmail/control/doublebounceto

受信者の登録

ここで設定しておくと 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 を変更して、同じように実行する

ヘルパーデーモンの設定

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サーバーの準備

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の動作テスト

sendmailが動いていれば停止

# /etc/rc.d/init.d/sendmail stop

qmailを起動

# /etc/rc.d/init.d/qmaild start
# echo to: root | /var/qmail/bin/qmail-inject

でメール送信確認

以下のサイト等で不正中継がちゃんとできなくなっているかどうか確認

sendmailの削除

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

参考 運用関連トラブルシューティング集 アットマーク・アイティ様m(__)m

「-」から始まるメールアドレスに送信できない!?

オプションが不正と判断されて落ちることがあります

Perlでメール送信した場合Apacheにはこのようなログが残り、メール送信ログには何も残りません

sendmail: illegal option -- a
sendmail: usage: sendmail [ -t ] [ -fsender ] [ -Fname ] [ -bp ] [ -bs ] [ arg ... ]

以下のようにして送信しましょう

/usr/lib/sendmail -- -hogehoge@example.com

環境変数を活用する

dot-qmailからプログラムにリダイレクトする場合は環境変数を利用するのが便利そうです

Perl

  • $ENV{'SENDER'} : 送信元
  • $ENV{'RECIPIENT'} : 送信先

他にはこちらを参考 http://man.qmail.jp/jman8/qmail-command.html

ローカルサーバーからのメール送信 OB25B対策

/var/qmail/control/smtproutes を作成

example.com:example.jp:587 username password
(ドメイン名:転送先:ポート番号 ユーザー名 パスワード)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-04-16 (水) 10:53:49 (1706d)