高原の里

> パソコン
> > qmail勘所

qmail勘所

tcpserverでの管理法

daemontoolsの中のtcpserverを用いると、何かの原因でqmailがとまっても再起動してくれたり、ログの管理をしてくれて便利です。アドレス http://tools.qmail.jp/daemontools/ などを参考にしてインストールしてみてください。次に、「http://djb.qmail.jp/qmail/faq/admin.html#supervise」を参考にしてディレクトリ/service/qmailと/service/qmail-smtpを作ります。

/service/qmailについては次のようにします。procmailを使えるようにして、メーリングリストやcronが出すメールを振り分けられるようにします。

/service/qmail/run
    #!/bin/sh
    exec < /dev/null
    exec 2>&1
    exec env - PATH="/var/qmail/bin:$PATH" \
    qmail-start '|preline procmail' splogger qmail

/service/qmail/log/
    ログディレクトリを作成します。

/service/qmail/log/run
    #!/bin/sh
    exec setuidgid qmaill multilog t ./main

/service/qmail/log/mail/
    この下にログファイルがたまります...

/service/qmail-smtp/ディレクトリについては次のようになると思います。

/service/qmail-smtp/run
    exec tcpserver -v -p -u qmailのユーザID -g qmailのグループID -x /var/qmail/control/tcp.smtp.cdb 0 smtp

/service/qmail/log/
    ログディレクトリを作成します。/service/qmail/logと同様です。

/service/qmail/log/run
    #!/bin/sh
    exec setuidgid qmaill multilog t ./main

/service/qmail/log/mail/
    この下にログファイルがたまります...

スパム対策

逆引きできないホストには応答しない

スパムメール対策の最も基本は、ウェブ上にメールアドレスを載せないことです。メールアドレスをPNGやJPEG形式のイメージにて表示するか、問い合わせフォームをつくり、そこからメールを送信していただくようにしましょう。

管理者としては、メールサーバにてスパムメールを受け取らないようにしましょう。多くのスパムメールは逆引きできないホストから送信されていますので、逆引きできないホストからのメールを受け取らないことはスパム対策として有効です。

上記のtcpserverにてqmailの管理を行っているときには/service/qmail-smtp/runを、通常のスクリプトでの起動のときは/var/qmail/rcを次のように変更します。

/service/qmail-smtp/run
    exec tcpserver -v -p -u qmailのユーザID -g qmailのグループID -x /var/qmail/control/tcp.smtp.cdb 0 smtp \
rblsmtpd -rrelays.ordb.org -rsbl.spamhaus.org -rbl.spamcop.net \
sh -c 'test -z "$TCPREMOTEHOST" \
&& echo "451 bad reverse DNS" \
|| exec /var/qmail/bin/qmail-smtpd'
このスクリプトは、tcpserverにて逆引きを行い、shにて環境変数TCPREMOTEHOSTが設定されていなければエラー"451 bad reverse DNS"を返して切断するようにします。スパムデータベースとして、"relays.ordb.org"と"sbl.spamhaus.org"と"bl.spamcop.net"を選択しています。

ホワイトリストとブラックリストの管理

ホワイトリストとブラックリストの管理は重要です。前項の対策をしたにもかかわらずスパムメールがきたら、メールヘッダから接続してきたホスト名を見て、データベースファイル /var/qmail/control/tcp.smtp.cdb を更新し、そのホストからのスパムメールを受け取らないようにしましょう。例えば次のようなデータベースの元ファイル /var/qmail/control/tcp.smtp を作ります。IPアドレスでの範囲指定(例えば192.168.0.0/24は192.168.0.)や、ホスト名のワイルドカード(例えば、何とか.amazon.comを全て許可したければ、=.amazon.comと書く)が使えます。

/var/qmail/control/tcp.smtp

    #---------------------------------------------------------------------
    # local area network
    #---------------------------------------------------------------------

    ローカルネットワーク:allow,RBLSMTPD="",RELAYCLIENT=""
    127.:allow,RBLSMTPD="",RELAYCLIENT=""

    #---------------------------------------------------------------------
    # white list
    #---------------------------------------------------------------------

    =.amazon.com:allow,RBLSMTPD=""
    ...以下、同様にして普段メールを受け取る相手のドメイン名を列挙します。

    #---------------------------------------------------------------------
    # temporally error (451)
    #---------------------------------------------------------------------

    =.verizon.net:allow,RBLSMTPD="you relayed many spams to me, fix it ASAP!"
    ...スパムメールを送ってくるドメイン名を列挙します。

    #---------------------------------------------------------------------
    # permanent error (553)
    #---------------------------------------------------------------------

    =.rr.com:allow,RBLSMTPD="-atode saisoshite kudasai."
    ...スパムメールを送ってくるドメイン名を列挙します。
ワイルドカードにて記述したほうが管理が楽です。上記の例ではverizon.net(アメリカのインターネットプロバイダ。たくさんのスパムメールを送ってくる)からのメールサーバへの接続要求に対しては一時エラーを、rr.com(これもアメリカのインターネットプロバイダ)からの接続要求に対しては恒久エラーを返します。viなどで上述の /var/qmail/control/tcp.smtp ファイルを書き換えたら、データベースファイル /var/qmail/control/tcp.smtp.cdb を作成しましょう。次のような Makefile を /var/qmail/control 内に作成しておけば、このディレクトリで make を実行するだけでデータベースを更新できて便利です。
/var/qmail/control/Makefile

    tcp.smtp.cdb: tcp.smtp
        tcprules tcp.smtp.cdb /tmp/tcprules$$ < tcp.smtp
        svc -t /service/qmail-smtpd
tcp.smtp.cdb: tcp.smtp の次の行のインデント(字下げ)にはタブを使うことに注意しましょう。

高原の里 - パソコンの部屋 - qmailの勘所