qmailサーバー構築における問題点

qamilサーバー構築の記事にも書きましたが、postfixからqmailへ切り替えたときに思ってた以上に僕の方で予想外の事が色々おきました。今回は問題点を洗い出してそれに対しての解決法等を見て行きたいと思います。

問題:インストール

  • ファイルがない

問題:設定編

  • メールクライアントが受信はできるけど送信ができない
  • 同じホスト同士のメールができない
  • 外部へメールは送れるが外部からのメールが受信でいない

これが今回僕の方がぶち当たった問題というか壁でした。この問題に対する解決策を書いておきます。
この方法をしたら絶対に解決するというものではないので勘違いしないでください。あくまで方法の一つということになります。

ファイルがない

ファイルがないという問題は、参考サイトの中に入っているURLを『wget』でいれても取得できないという問題でした。僕が参考としたサイトは全部があるというわけではなく、一部なかったので一部はサイトのURLでいけたというのもあります。今回僕が構築する際に探したファイルのURLをqamilサーバー構築にも載せておきました。そこからダウンロードしていただけるといいと思います。

qmail本体
ftp://ftp.eu.uu.net/pub/unix/mail/qmail/qmail-1.03.tar.gz
localtime
http://www.filewatcher.com/m/qmail-date-localtime.patch.gz.741.0.0.html
SMTP
http://tomclegg.net/qmail/qmail-smtpd-auth-0.31.tar.gz
不正中継対応拒否
http://www.qmail.org/qmail-smtpd-relay-reject

メールクライアントが受信できるけど送信できない

通常メールサーバーを構築するとき、送受信は同じサーバーになるケースが殆どだと思います。logwではDNSを構築しているので送受信も同じサーバーになります。しかし、外部から送ったメールが受信はできるけど送信できないという問題がおきました。これはプロバイダーが導入しているOP25B対策により送信ポート25番が遮断されているため送信するときにエラーがおきるというのでした。

OP25B対策によりメールが送信できない

サーバー側が25番ポートが開いていて外部からアクセスできる状態にしていても、自宅から接続しているインターネットの環境によりポート25番に接続できないという事になります。この問題があるため、メールクライアントではメールを受信するけど送信できないという問題がおきます。

解決策:サブミッションポートを有効化する

サブミッションポートとかいうとなにそれ?と思います。いわゆる587のポートから送信するという事です。qmailでは設定ファイルを変更することで解決できます。ファイアウォールで587のポートを許可するだけでは駄目なのでここでは設定ファイルを変更します。

ポート:587の設定があるかを確認します

less /etc/services
------
submission 587/tcp msa # mail message submission
submission 587/udp msa # mail message submission
------

上記はCentOS5.6ですが、ちゃんと設定されているのを確認します。
qmailの設定ファイルを変更しサブミッションポートの有効化

vi /etc/init.d/qmaild

-----------
# SMTP
tcpserver -qv -l0 -HR -u `id -u vpopmail` -g `id -g vpopmail` \
-x /home/vpopmail/etc/tcp.smtp.cdb 0 smtp \
qmail-smtpd `hostname` /home/vpopmail/bin/vchkpw /bin/true 2>&1|\
splogger smtp &
-----------
SMTPをコピーしてすぐ下に貼り付ける
↓
#コメントに『サブミッションポートの設定』と追加する
-----------
# SMTP-サブミッションポートの設定
tcpserver -qv -l0 -HR -u `id -u vpopmail` -g `id -g vpopmail` \
-x /home/vpopmail/etc/tcp.smtp.cdb 0 submission \
qmail-smtpd `hostname` /home/vpopmail/bin/vchkpw /bin/true 2>&1|\
splogger smtp &
-----------
smtpをsubmissionに変更する。この段階ではSMTPとSMTP-サブミッションポートの設定と二つがあるのでSMTPをコメントアウトする

SMTPをコメントアウトしてサブミッションを有効かすると以下のようになる

# SMTP
#tcpserver -qv -l0 -HR -u `id -u vpopmail` -g `id -g vpopmail` \
#-x /home/vpopmail/etc/tcp.smtp.cdb 0 smtp \
#qmail-smtpd `hostname` /home/vpopmail/bin/vchkpw /bin/true 2>&1|\
#splogger smtp &

# SMTP-サブミッションポートの設定
tcpserver -qv -l0 -HR -u `id -u vpopmail` -g `id -g vpopmail` \
-x /home/vpopmail/etc/tcp.smtp.cdb 0 submission \
qmail-smtpd `hostname` /home/vpopmail/bin/vchkpw /bin/true 2>&1|\
splogger smtp &

終わったらqmailを再起動します。
引用元:qmailでのサブミッションポートの設定。

これでメールクライアントからメールの送信ができるようになります。

同じホスト同士のメールができない

logwではlogw.jp以外にも別のドメインを一つ使っています。ここではtest.comとしておきます。同じサーバー内に入っているのでメールの送受信もできるはずができなくなりました。

サーバー内にあるドメイン
logw.jp
test.com

前提としてこの二つのドメインが同じサーバー内にあり、送受信できないという問題になります。

解決策:localsを確認する

同一ホストなのにメールが届かないというのは設定ファイルの問題になります。そのため、こういったケースではqmailの設定ファイルの中でも『locals』ファイルをみてください。恐らくドメイン名等が入っていると思います。

『locals』の中を『localhost』と設定して、ドメインは『virtualdomains』に記述します。これで解決です。

外部へメールは送れるが外部からのメールが受信でいない

この問題が一番時間かかりました。この問題は、同一ホスト内にあるドメインのメールはできるのと、外部へのメールの送信も可能になります。しかし、外部からのメールを受信できないという一方通行現象の事になります。

この問題のおさらい
同一ホスト内のドメインのメールはできる→logw.jpとtest.comのメールの送受信が可能
サーバーから外部へのメールへ送信できる→logw.jpからGメール、yahooメール等
外部からサーバーへのメールの受信ができない→Gメール、 Yahooメール→logw.jpへ送るがlogw.jpには届かない

このような現象になるともいます。これは色々な問題があり、検索すると沢山フォーラム等がでてきます。僕もフォーラムを見ていて色々試しましたが全部失敗しました。それどころか状況悪化したこともありました。ある一文を見てなんとなく納得と同時に解決が見えたことがありました。それが『既存の port 25 に加えて、port 587 でも qmail-smtpd を動かすように
しましょう。』の一文です。

587だけアクセスできては駄目25番も

メールサーバーを構築していて今回初めて知ったのもありました。それは、サーバー同士は25番ポートでやりとりしているという事でした。

メールが送ってから届くまでの流れ:logw.jpからGメールへ

  1. 自宅のメールクライアントがサーバーに接続してlogwのメールサーバーへメールを送る→25番が接続できないので587ポートから送る
  2. logwのメールサーバーは受け取る。→メール(Gメール)の宛先を探して転送
  3. Gメールは受け取る

こんな感じでやりとりするのですが、『2』番のとこでlogw-gmailへ転送するとこがあります。このやりとりの箇所が25番のポートで行われています。メールサーバーは今でも25番のポートを使用しているのでサーバーが25番ポートにアクセスします。つまり、ポートの25番と587番の両方に接続できないといけません。

解決策:SMTPのコメントを外す

サブミッションポートの設定の設定をしたときに、qmailの設定ファイルをいじりました。現状以下のようになっていると思います。

# SMTP
#tcpserver -qv -l0 -HR -u `id -u vpopmail` -g `id -g vpopmail` \
#-x /home/vpopmail/etc/tcp.smtp.cdb 0 smtp \
#qmail-smtpd `hostname` /home/vpopmail/bin/vchkpw /bin/true 2>&1|\
#splogger smtp &

# SMTP-サブミッションポートの設定
tcpserver -qv -l0 -HR -u `id -u vpopmail` -g `id -g vpopmail` \
-x /home/vpopmail/etc/tcp.smtp.cdb 0 submission \
qmail-smtpd `hostname` /home/vpopmail/bin/vchkpw /bin/true 2>&1|\
splogger smtp &
↓
# SMTP
tcpserver -qv -l0 -HR -u `id -u vpopmail` -g `id -g vpopmail` \
-x /home/vpopmail/etc/tcp.smtp.cdb 0 smtp \
qmail-smtpd `hostname` /home/vpopmail/bin/vchkpw /bin/true 2>&1|\
splogger smtp &

# SMTP-サブミッションポートの設定
tcpserver -qv -l0 -HR -u `id -u vpopmail` -g `id -g vpopmail` \
-x /home/vpopmail/etc/tcp.smtp.cdb 0 submission \
qmail-smtpd `hostname` /home/vpopmail/bin/vchkpw /bin/true 2>&1|\
splogger smtp &

僕のサーバーではこのSMTPの箇所のコメントしてとこを外します。そしてqmailを再起動します。これでこの問題は解決します。

サーバーによっては記述が違うので必ずしもこのやり方で解決するというものではありません。あくまで僕がインストールした環境ではこのやり方によって解決したというものになります。

個人支援・寄付について

サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。

  • ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS