しいしせねっとわーく Amazon.co.jp アソシエイトWEBCASメール配信システム
[Linuxメモ] [qmailの設定] [spam拒否]

qmailメモ

qmailの設定(工事中というか、まだ正確じゃありません)

last update 2002.10.14

作者が利点ばかり強調するのはあまりよいとは思えませんが、ここではqmailの利点と欠点を探してみましょう。

必要な基礎知識

qmailの利点 (sendmail比?) qmailの欠点

というわけで、メール配信サービスなどにはよいものかもしれません。

インストール

qmailをインストールしてみました。
とりあえず気づいた疑問をメモしてみましょうね。

どういう構成にしようかな
基本インストール
受信
バーチャルドメイン化
メーリングリスト設定
転送(バックアップサーバにする)
SPAM拒否
送信
応用編
できないことはどんなこと

のようなメニューになりますが、どれから説明するのが良いやら。
送信は、はやめにしたいでしょ?
必要なものは?

必要なファイル

qmail 1.03
uscpi-tcp 0.88
この2つです。uscpi-tcpはなくてもかまいませんが、SPAM拒否等で必須のものと思っておいてもいいでしょう。

普通のインストールは、http://www.qmail.jp/qmail.html を参照してみてください。
付属文書 -> インストール -> インストール手順の
http://man.qmail.jp/jinstall/install1.html こういうところに詳しく手順が書かれています。
基本的にインストール作業は root で行います。
一般ユーザからは、su - なんてしておきましょう。

ここでのインストール条件

インストール手順

  1. インストール前準備
    ディレクトリとユーザを準備します。
    1. ディレクトリの作成

      # mkdir /var/qmail

    2. qmail用ユーザ/グループの作成
      Linuxの場合

      # groupadd nofiles
      # useradd -g nofiles -d /var/qmail/alias alias
      # useradd -g nofiles -d /var/qmail qmaild
      # useradd -g nofiles -d /var/qmail qmaill
      # useradd -g nofiles -d /var/qmail qmailp
      # groupadd qmail
      # useradd -g qmail -d /var/qmail qmailq
      # useradd -g qmail -d /var/qmail qmailr
      # useradd -g qmail -d /var/qmail qmails

      パスワードなどは設定しません。
  2. ファイルの解凍とコンパイル、インストール

    # tar zxvf qmail-1.03.tar.gz
    # cd qmail-1.03
    # make setup check

  3. コントロールファイルの作成
    /var/qmail/control 配下に設定ファイルを作ります
    必要なのは、control/me や control/local、control/rcpthosts です。
    DNSが設定されている状態では、

    # ./config

    されていない場合は

    # ./config-fast your.full.host.name

    で、簡単な設定ができます。
  4. 特殊メールアドレスの設定
    root や postmaster、 MAILER-DAEMON 宛のメールをどう処理するかを決めます。

    # touch ~alias/.qmail-postmastr

    何も書かなければ、 alias ユーザの Mailbox 宛に送信されます。

    # chmod 644 ~alias/qmail-postmaster
    # touch ~alias/.qmail-mailer-daemon
    # chmod ~alias/.qmail-mailer-daemon
    # touch ~alias/.qmail-root
    # chmod 644 ~aliase/.qmail-root

    root は、メールを受け取れません。

    配送順(rootなどは3から)

    1. ユーザの ~/.qmail ファイル
    2. ~/Mailbox または ~/Maildir/
    3. ユーザがない場合は、~alias/.qamil-* に書かれた配送先
    4. ~alias/.qmail-default があれば、その配送先
  5. /var/qmail/boot/home を /var/qmail/rc へコピー

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

    これは、後程qmailを起動するために使われます。
  6. mailbox の設定
    数パターンあります。準備中
    1. ~/Mailbox で受け取る場合
      とりあえず、なにもしなくてかまいません。
    2. 今までと互換の /var/spool/mail/ユーザ名 で受け取る場合(略)
      先ほどコピーした /var/qmail/rc を編集します。
    3. 安全な ./Maildir/で受け取る場合(略)
      1. ユーザのディレクトリを作ります。
        $ maildirmake ~/Maildir
      2. デフォルトの/etc/skel にもMaildirを作ります。
      3. /var/qmail/rc を編集します。
        ./Mailbox を ./Maildir/ にするだけ
  7. sendmail / postfix の置き換え
    1. sendmail の場合削除
      もともと sendmail を使っていない場合は、rpm でさくっと削除すればいいです。
      RedHat / PS2Linux 等の場合
      # service sendmail stop
      で、sendmail を停止します。
      最初から sendmail ではなく、qmail を使う場合は
      # rpm -q sendmail で sendmail のバージョンを確認します。
      # rpm -e sendmail-x.x.x で削除できます。
      rpm -e で依存関係があって削除できない場合は、依存しているソフトも削除してもいいかもしれません。
      sendmail を使っていた場合は、停止してから切り換えましょう。
    2. postfix の場合の削除
      # /etc/rc.d/init.d/postfix stop
      で postfix を停止できます。
      停止する前に配送中のメールがないか確認しておきましょう。
      # rpm -q postfix
      で、postfix のバージョン等を確認し、
      # rpm -e postfix-x.x-xx
      で削除します。
    3. 互換コマンドの設定
      削除しただけでは、sendmail を使っているソフトが動きませんので、sendmail 互換のコマンドを設定します。
      # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
      これだけでいいかもしれません。
      # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
      こちらが必要な場合もあるのかもしれません。
  8. tcpserver などのインストール

    # tar zxvf ucspi-tcp-0.88.tar.gz
    # cd ucspi-tcp-0.88
    # make
    # make setup check

  9. 起動の設定
    2種類、設定できます。
    1. /etc/rc.d/rc.local に追加する場合
      qmail本体の起動スクリプトの追加
      csh -cf '/var/qmail/rc &' を/etc/rc.d/rc.local などに追加する。
    2. /etc/rc.d/init.d/ に qmail ファイルをつくる場合
      (工事中) 停止はうまくいかないようですね。
      /etc/rc.d/init.d/qmail をつくります。

      #! /bin/sh
      #
      # chkconfig 345 80 20
      # description: qmail mail server
      #
      # qmail: /var/qmail

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

      start(){
          echo "Starting qmail."
          csh -cf '/var/qmail/rc &'
          /usr/local/bin/tcpserver -v -u 50x -g 50x -x /etc/tcp.smtp.cdb 0 smtp /usr/local/bin/rblsmtpd -r income.siisise.net -r relays.ordb.org /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
          echo
          touch /var/lock/subsys/qmail
      }
      stop(){
      echo 'Shutting down qmail.'
      PID=`/bin/pg -aefw | grep qmail | awk '{print $2}'`
      if (! -z "$PID" ] ; then
      /bin/kill ${PID} 1> /dev/null 2>&1
      fi
      echo
      rm -f /var/lock/subsys/qmail
      ;;
      }
      restart(){
        stop
        start
      }
      case "$1" in
        start)
          start
          ;;
        stop)
          stop
          ;;
        restart)
          restart
          ;;
        *)
          echo "Usage: $0 {start|stop}"
          exit 1
      esac

      exit 0
      (工事中)

      赤字の部分はqmailのユーザID、グループIDにしてください。
      このファイルは、起動/終了のときに使われます。後程改良予定。

      # vi /etc/rc.d/init.d/qmail
      # chmod 755 /etc/rc.d/init.d/qmail
      # chkconfig qmail on

      で起動設定が完了です。

    実行して起動させてしまおう。
  10. 中継許可リストの作成
    /etc/tcp.smtp を次のように作る

    127.:allow,RELAYCLIENT=""
    192.168.0.:allow,RELAYCLIENT=""

    など最後に空行をつくらないこと
    # /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    を実行する
  11. 受信用の起動スクリプトの追加
    /usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -u quid -g qgid 0 smtp /var/qmail/bin/qmail-smtpd &
    quidとqgidはqmaild のユーザID、グループIDにすること
    拒否リスト等を使う場合はspam.html の最後の方を参照。
  12. (工事中)

めも

まず、qmailだけをインストールすると、受信のみで使うようにしか設定できません。
メーリングリスト用サーバなどには使えますが、普通のサーバとしては、踏み台に使われないようにするため、仕方のないところです。
社内に別のサーバがあるなどの環境で設定するようにしましょう。
tcpserver と同時に設定すれば、送信も可能です。難しくはないので、いっしょにインストールしてしまいましょう。

POP3の設定もしますか。

私はまだしてません。Vine Linuxについてたのをそのまま使ってます。POPを使う人だけリンクして使ってます。

参考

www.jp.qmail.org
実用qmailサーバ運用・管理術(@IT:Linux Square) あんまりよくない・・・

control/

いろいろな設定ファイルがありますが
処理順? 設定ファイル名 初期値 参照コマンド 効能

me


1 badmailfrom なし qmail-smtpd 拒否する送信者アドレス、ドメイン
2 localiphost me qmail-smtpd [IPアドレス]型のメールを受け取ったときにここで指定したドメイン名に変換してから受け取ります
3 rcpthosts なし qmail-smtpd このドメイン宛のメールだけ受け取ります。[IPアドレス]宛のメールはlocaliphost で変換後rcpthosts を参照します。
その他のサーバ宛のメールをローカルから受け取った場合は、RELAYCLIENT環境変数があれば受信します。
4 locals me qmail-send このドメイン宛のメールは、直接ユーザに送られます。
5 virtualdomains
qmail- locals にないドメインの場合、こちらを参照します。
domain:localuser-ext という記述方法で指定されたドメイン宛のuser@domainのメールはlocaluser-ext-user@local 宛に配送され、~localuser/.qmail-ext-user の拡張アドレスで処理されます。
6 smtproutes DNS値 qmail-remote 特定ドメインの宛て先サーバを指定します。
CNAMEレコードなサーバ名は指定できません。
Aレコードのサーバ名か、IPアドレスが書けます。
ここで指定すると、DNSのMXレコードより優先され、MXレコードは無視されます。

rcpthosts は、locals と virtualdomains、smtproutes に加え、中継対象のホストを記述できますね。

参考
qmail-control (qmail.jp)

qmailで受信する

バーチャルドメインで、多種多様なドメインを一手に引き受けることができます。
このサーバでも数種類のドメインのメールを受け付け、mozilla.gr.jp のパックアップメールサーバとしても稼働しています。

普通に受信するには

control/me にサーバ名を設定します。
locals にも設定します。(しなくてもいいです)
rcpthostsに加えます。特定のサーバから転送して受け取る場合には環境変数 RELAYCLIENT=""で指定してもかまいません。

バックアップメールサーバ

rcpthosts または環境変数 RELAYCLIENT=""
localsには加えません
smtproutesというファイルに受信するドメインと、転送する宛て先サーバを書きます。

バーチャルドメイン

rcpthosts または環境変数 RELAYCLIENT=""
locals には加えない。
virtualdomain にドメイン名とユーザ名の対応を加える。

~alias/.qmail~の実行ユーザ は、やっぱりaliasさんなんでしょうね。

qmailで送信もしたい(受信の制御としてSPAM拒否とまとめよう)

初期の設定だけだと、中継が禁止されているので他のサーバ宛のメールを送信するときのSMTPサーバとして使えません。
SMTPで自分のメールも送りたいですねぇ。
送信もできるようにするには、違うソフトを1つインストールします。(私はおすすめしときます)
そして、中継してもよいクライアントのアドレスを指定します。余分なドメインやIPアドレスは登録しないようにしましょう。
SMTPの認証送信は、パッチが出ていますがqmail自体は対応してないようです。残念です。どこからでもメールを送るというのはあきらめましょう。
その場その場にあるSMTPメールサーバを使ってみてください。
で、ローカルのマシン名が見えてしまいます。まぁ、後で直しましょう。

qmailでできそうにないこと

SMTP認証(別の差分が必要)
POP before SMTP (できるんですけど別のソフトが必要)
APOP(POPソフトはついてるらしいですけどAPOPには対応してるのかどうか、入れ換えればできますけど)

メーリングリスト

qmailとfmlの組み合わせはちょっと難しいかもでした。
設定方法は2種類ほどありまして、fmlのインストールをユーザで行う方法がひとつ。もうひとつは、手間をかけて設定する方法です。

普通にインストールします場合(バーチャルドメインを使っていない)

普通にインストールするという場合は、qmailではalias ユーザでメーリングリストを処理するということになります。
fmlは、fmlのユーザで処理されることを想定しているようですので、qmail/users/assign という qmailのwebサイトにちょっと載ってなさそうなファイルを使って実行ユーザを書き換えます。
このファイルを書き換えるのは、qmailのバーチャルドメインを使っていない場合に限った方が良いでしょう。

ユーザ権限でfml 処理する場合(バーチャルドメインを使っている場合)

らくらくです。

SPAM拒否

qmailの設定については、ここの文章は参考程度にしかならない曖昧なものです。設定した後で何かのコマンドを実行しないといけなかったりという部分をまだちゃんと確認していません。www.jp.qmail.orgを見て正しく確認して設定してください。でもちょっと探すのは大変かもしれません。

tcpserver と一緒にucspi-tcp-0.88に 入っている rblsmtpd というソフトを使います。

設定 (SPAM拒否とは関係ないけど・・・許可するリストの作成)

/etc/smtp.tcpを記述して
/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp とする。毎回変更可能。

qmail 起動スクリプト
[変更前]
tcpserver -u [ユーザID] -g [グループID] 0 smtp /var/qmail/bin/qmail-smtpd &

[中継許可アドレスを設定]
tcpserver -x /etc/tcp.smtp.cdb -u [ユーザID] -g [グループID] 0 smtp /var/qmail/bin/qmail-smtpd &

[拒否リストORDBとsiisise.netを追加]
tcpserver -x /etc/tcp.smtp.cdb -u [ユーザID] -g [グループID] 0 smtp /usr/local/bin/rblsmtpd -r income.siisise.net -r relays.ordb.org /var/qmail/bin/qmail-smtpd &

参考

rblsmtpd訳DJB's software maniacs (滝澤さん)
ORDB
nanet