tomimemo

qmailメモ

最終更新:

匿名ユーザー

- view
管理者のみ編集可

インストール


まず、qmailホームディレクトリを作成。
# mkdir /var/qmail

次にqmailのプロセスが使用するgroupとuserを作成。
(gidとuidを600番台とするが自由)
# groupadd -g 600 nofiles
# groupadd -g 601 qmail
(以下改行されてるけど1行で記述する)
# useradd -u 600 -g nofiles -d /var/qmail/alias \
  -m -k /dev/null -s /sbin/nologin alias
# useradd -u 601 -g nofiles -d /var/qmail \
  -m -k /dev/null -s /sbin/nologin qmaild
# useradd -u 602 -g nofiles -d /var/qmail \
  -m -k /dev/null -s /sbin/nologin qmaill
# useradd -u 603 -g nofiles -d /var/qmail \
  -m -k /dev/null -s /sbin/nologin qmailp
# useradd -u 604 -g qmail -d /var/qmail \
  -m -k /dev/null -s /sbin/nologin qmailq
# useradd -u 605 -g qmail -d /var/qmail \
  -m -k /dev/null -s /sbin/nologin qmailr
# useradd -u 606 -g qmail -d /var/qmail \
  -m -k /dev/null -s /sbin/nologin qmails

ソースをダウンロード。ここではnetqmailを使う。netqmailはいろいろパッチがあたった状態のqmailなのでインストールが少しだけ楽になる。(それでもパッチは当てなくちゃならない)


必要なパッチを以下からダウンロード。

上記ファイルを/usr/local/srcにコピー。
インストール開始。
# cd /usr/local/src
# tar xvfz netqmail-1.05.tar.gz
# rm netqmail-1.05.tar.gz
# cd netqmail-1.05/
# ./collate.sh

必要なパッチを当てる。
# cd netqmail-1.05/
# patch -p1 < ../../qmail-date-localtime.patch
# patch -p1 < ../../netqmail-1.05-smtpd-auth-0.31.patch

インストール。
サーバホスト名は環境に合わせる(hoge.comとか)
# make setup check
# ./config-fast サーバホスト名

完了。

manページを読めるように修正。
# vi /etc/man.config
MANPATH /usr/share/man などが書かれている辺りに
MANPATH /var/qmail/man と足す。

sendmailのラッパーを使えるようにする。
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

メール使うユーザの追加。ここではinfoというユーザを追加した。
# useradd info

ユーザのMailDirの整備。
# su info
$ /var/qmail/bin/maildirmake /home/info/Maildir
$ exit

システム環境の整備。
/etc/profile の以下の部分を編集。
MAIL="$HOME/Maildir"  <--変更
MAILDIR=$MAIL         <--追加
export PATH USER LOGNAME MAIL MAILDIR ... <--MAILDIRを挿入

/etc/login.defs も修正。
QMAIL_DIR    Maildir  <--コメント解除
MAIL_DIR     Maildir  <--変更
#MAIL_FILE   .mail    <--要らないのでコメントアウト

起動準備。
# cd /var/qmail/alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
# chmod 644 .qmail* 

/var/qmail/boot/homeを/var/qmailにrcという名前でコピー。
# cp /var/qmail/boot/home /var/qmail/rc

Maildirへの移行。
コピーした/var/qmail/rcファイルの内容を下記のように編集。
qmail-start ./Mailbox splogger qmail
↓
qmail-start ./Maildir/ splogger qmail

MailDir対応設定。
# /var/qmail/bin/maildirmake ~alias/Maildir
# chown -R alias /var/qmail/alias/Maildir/

ここまできて、やっと起動。長かった。
# /var/qmail/rc & 

終了するときは以下。
#pkill qmail-send

メール受信テスト。
# echo to: info@hoge.com | /var/qmail/bin/qmail-inject
# more /var/qmail/alias/Maildir/new/xxxxxxxxx

tcpserverによるqmail起動

まずtcpserverをインストール。以下からソースダウンロードして/usr/local/srcにコピー。
ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz

インストール開始。
# cd /usr/local/src/
# tar xvfz ucspi-tcp-0.88.tar.gz
# rm ucspi-tcp-0.88.tar.gz
# cd /ucspi-tcp-0.88/

パッチを当てる(netqmailの中にあるパッチを使用)
# patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
# patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.a_record.patch

インストール
# make
# make setup check

cdbファイルの作成。/etc/tcp.smtp として作成する。
# vi /etc/tcp.smtp
192.168.0.allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
:allow	←これは受信用

# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

tcpserverを介してqmailを起動する。下記コマンドで起動する。
(一行で記述。UID,GIDは id qmaild コマンドで確認できる)
# tcpserver -v 
  -u[qmaildのUID] 
  -g[nofilesのGID]
  -x /etc/tcp.smtp.cdb 0 
  smtp /var/qmail/bin/qmail-smtpd 2>&1 
  | /var/qmail/bin/splogger smtpd 3 &

終了するときは ps aux | grep tcp とかで pid調べて kill コマンド。

qmailのroot宛のメールを受け取るには


qmailでは,rootは直接メールを受取ることができない。そこで、.qmail-rootでroot宛のメールを受取る人(のメールアドレス)(複数の宛先指定可能)を書く。フォーマットは以下。
&hoge
&hoge1@hogehoge.hoge
&hoge2@hogehoge.hoge

qmailの管理ツール

queue の内容をリストにして表示。
/var/qmail/bin/qmail-qread

DDNS+qmailで携帯にメールが送れない対策


(DDNS) ダイナミックDNS を使用してメールサーバを立ち上げていると、携帯宛にメールが送れない。もうずっと前から気が付いていたので、いつも携帯宛に送るときだけはメーラの設定を自SMTPサーバではなく、契約プロバイダの SMTPサーバを指定して送信していた。

最近は携帯各社の迷惑メール対策が厳しく行われているため、DDNSなどから接続した IP アドレスを逆引きしたドメイン名とメールサーバのドメイン名が異なる場合には SPAMメールの疑いがあると判断されて接続を拒否されているためである。(たぶん)

だから、携帯宛のメールについては諦めていたのだが自分がお世話になっている DDNSサービス 「Dynamic DO!.jp 」 のFAQに 「Q26. 携帯電話へメールが送れません。」という項目があって sendmail の場合には契約プロバイダ経由で送ればよいということが書いてあった。あ、そうか!直送するんじゃなくて一旦契約プロバイダを通せばいいんだという単純なことにここで初めて気が付いた。 qmail の場合の設定方法は書いてなかったのでいろいろ調べたら


でドンピシャの設定方法を発見した。
それによると

プロバイダのsmtpサーバがたとえば smtp.your.provider.jp だとすると
設定ファイル /var/qmail/control/smtproutes に
たとえば j-phone,docomo,au に送信する場合のみ
外部 smtp サーバを設定するなら
jp-k.ne.jp:smtp.your.provider.jp 
jp-n.ne.jp:smtp.your.provider.jp
docomo.ne.jp:smtp.your.provider.jp
ezweb.ne.jp:smtp.your.provider.jp
こういう設定を行えばOKです。

qmailのキューを削除

qmHandleという便利なperlスクリプトがあるのでそれを利用。

http://sourceforge.net/projects/qmhandle から qmhandle-1.2.0.tar.gz をダウンロード。/usr/local/srcにコピー。

インストール(というか、単なるperlスクリプトなので解凍するだけ。)
# cd /usr/local/src
# mkdir qmhandle-1.2.0
# mv qmhandle-1.2.0.tar.gz qmhandle-1.2.0/
# cd qmhandle-1.2.0/
# tar xfvz qmhandle-1.2.0.tar.gz
キューのメッセージIDを確認するには以下コマンド
# ./qmHandle -l -N
キューを削除するには以下コマンド(-dとメッセージIDの間は空けない)
# ./qmHandle -dメッセージID

qmail自動起動設定

サーバ起動時に自動でqmailが立ち上がるように設定(tcpserverを使った起動)。以下のスクリプトを /etc/rc.d/init.d/以下に qmailという名前で作成。
# vi /etc/rc.d/init.d/qmail

#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

[ -f /var/qmail/rc ] || exit 0

case "$1" in
  start)
    # Start daemons.
    # 601…qmaildのuid
    # 600…nofilesのgid
    echo "Starting qmail."
    csh -cf '/var/qmail/rc &'
    tcpserver -v -u 601 -g 600 -x /etc/tcp.smtp.cdb \
    0 smtp /var/qmail/bin/qmail-smtpd 2>&1 \
    /var/qmail/bin/splogger smtpd 3 &
    echo
    touch /var/lock/qmail
    ;;
  stop)
    # Stop daemons.
    echo "Shutting down qmail."
    PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
    if [ ! -z "$PID" ] ;  then
      /bin/kill ${PID} 1> /dev/null 2>&1
    fi
    echo
    rm -f /var/lock/qmail
    ;;
  *)
    echo "Usage: S99qmail {start|stop}"
    exit 1
esac
exit 0
上記起動スクリプトとリンクを張る。
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S99qmail

不正中継されていないかチェックできるサイト


メール配送失敗した場合の返送先を指定

/var/qmail/control内にbouncefromというファイルを作成。記述方法は返送先usernameを記述するだけ。デフォルトは、MAILER-DAEMON。

または、/var/qmail/alias/.qmail-mailer-daemonファイルに配送先を以下のように指定。
# vi /var/qmail/alias/.qmail-mailer-daemon
&hoge
&hoge@hogehoge.com

qmailの設定ファイルの説明


qmailインストール時に /var/qmail/control/ 以下に以下のようなqmailの設定ファイルが作成される。最低限必要なのはmeだけらしい。
me
plusdomain
locals
defauldomain
rcpthosts
■me
そのメイルサーバとなっているホストの名前。
記述例:mail.hoge.com

■defaultdomain
省略時ドメイン名。設定されていない場合はmeと同じ値に設定される。ドットがないホスト名が設定されたときは、この値を追加してくれる。例:hoge@mail→hoge@mail.hoge.com
記述例:hoge.com

■locals
そのメイルサーバがローカルとして処理するドメイン名の一覧。一行にひとつずつ書く。省略されるとmeを使うが、どちらもなければqmail-sendは起動されないない。user@domainというアドレスはdomainがlocalsにあるときローカルだと判定される。メイルアドレスが hoge@host.domain.net ではなくhoge@domain.net という風に設定したいときには最低限 domain.net はlocalに設定されていなければいけない。

■rcpthosts
SMTPのRCPTに現れてよいドメイン名。rcpthostsに載っていないドメイン宛のメイルは受け取らない。ここで環境変数RELAYCLIENTが設定されているときには、rcpthostsを無視して、qmail-smtpdはすべてのメイルを受け付けるようになる。

qmailの詳しい説明サイト


ユーザ追加時に自動でMaildirを生成

useraddコマンドで新規にユーザを作成したときに自動でMaildirを作成するには以下のコマンドを叩く。RedHatLinuxで確認。
/var/qmail/bin/maildirmake /etc/skel/Maildir
echo ./Maildir/ > /etc/skel/.qmail
最近更新されたページ