SMTP・API連携で高速メール配信するならブラストエンジン

qmailでSMTP認証を有効化する手順|sagredo-qmailを使った設定手順とblastengineとの連携方法

更新日: メールリレー

qmailはセキュリティに優れた軽量なMTAとして長年利用されてきましたが、最新のメール環境では機能不足が目立ちます。特にSMTP認証機能の欠如は、外部SMTPサービスとの連携において大きな障壁となっています。

本記事では、sagredo-qmailを使用してSMTP認証機能を実装する方法を解説し、具体的な実装手順をblastengineを例に紹介します。sagredo-qmailは様々なパッチが統合された現代的なqmailディストリビューションで、SMTP認証機能が標準で含まれています。

ブラストエンジンのバナー画像

qmailでSMTP認証を実現する方法を詳しく解説

qmailは、高速でセキュアな動作に定評のあるメールサーバーですが、最大の弱点のひとつが「標準ではSMTP認証に非対応」という点です。公式最終リリースであるqmail 1.03(1998年)は、SMTP認証が一般的でなかった時代の設計思想を色濃く反映しており、そのままではユーザー名とパスワードを用いた認証を必要とする外部SMTPサーバーにメールを送信できません。

さらに、リリースから長い年月が経過しているため、現代のOS仕様やメール配信環境に合わせるには多くのパッチ適用が必要です。こうした背景から、有志が必要な修正や機能拡張を統合した「sagredo-qmail」が登場しており、これにはSMTP認証機能が標準で組み込まれています。

SMTPリレーサービス利用と認証の必要性

現在のメール配信環境では、SMTPリレーサービスを利用する際に認証が必須となっています。blastengineのようなSMTPリレーサービスはすべて、セキュリティ確保のためにSMTP認証(SMTP AUTH)による利用者確認を要求しています。

これはスパム送信や不正利用を防止するための重要な対策です。認証なしでは、これらのサービスはメール転送を拒否するため、qmailサーバーからこれらのサービスを経由してメールを送信することができません。qmailに認証機能を追加することは、現代のメール配信環境では必須の設定と言えるでしょう。

特にIP制限のないクラウド環境や動的IPアドレスを使用している場合は、SMTP認証なしでのリレー利用はほぼ不可能です。

sagredo-qmailによる認証機能

sagredo-qmailは、qmail 1.03に対して様々な現代的機能を追加したディストリビューションです。SMTP認証機能(SMTP AUTH)が標準で組み込まれており、PLAIN、LOGIN、CRAM-MD5などの認証方式に対応しています。また、TLS/STARTTLS機能も含まれているため、セキュアな通信が可能です。sagredo-qmailの主な特徴は以下の通りです。

  • SMTP認証機能(qmail-smtpd、qmail-remote両方に対応)
  • PLAIN、LOGIN、CRAM-MD5認証方式に対応
  • TLS/STARTTLSによる暗号化通信
  • カスタムポート対応(587、2525など)
  • IPv6対応
  • SPF機能
  • DKIM署名機能

認証情報の検証には、従来同様「checkpassword-pam」を使用します。これにより、システムのユーザーアカウントやバーチャルドメイン用のパスワードデータベースなど、さまざまな認証ソースと連携できます。

重要なのは、SMTPリレーサービスを利用する場合、受信側(qmail-smtpd)だけでなく、送信側(qmail-remote)にも認証機能が必要な点です。sagredo-qmailでは両方の機能が統合されているため、追加のパッチ適用は不要です。

実装手順:blastengineを例とした設定方法

ここでは、blastengineを例に、sagredo-qmailでSMTP認証を設定する手順をわかりやすく解説します。全体の流れは以下の3ステップです。

  1. ソースコードの取得とビルド
  2. 認証設定
  3. リレー設定

ここからは上記を順を追って実施していきます。

事前準備:コンパイルに必要なツールのインストール

以下のツールをあらかじめインストールしておきます。

  • ビルド系:gcc、make、libssl-dev、libpam0g-dev
  • MTA基盤:daemontools-run、ucspi-tcp
  • 認証・テスト系:checkpassword-pam、swaks

sagredo-qmailのソースダウンロード

作業ディレクトリ /usr/local/src に移動し、GitHubからソースコードを取得します。

git clone https://github.com/sagredo-dev/qmail.git sagredo-qmail
cd sagredo-qmail

ユーザーとグループの作成

qmailに必要なユーザーとグループを作成しましょう。以下のコマンドを実行します。

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

実装ステップ1 — sagredo-qmailのビルドとインストール

以上で基本的な導入が完了しました。ここまでで環境が整ったので、次は認証機能の設定に進みましょう。

ビルドとインストール

GitHubからダウンロードしたsagredo-qmailのフォルダに移動した後、makefileを使ってビルドします。

cd sagredo-qmail
make clean
make
make setup check

古いqmailがある場合は置き換え

もし古いqmailを使っている場合には以下のコマンドで置き換えます。

sudo systemctl stop qmail-smtpd qmail-send 2>/dev/null || true
sudo /var/qmail/bin/qmail-smtpd

以上でsagredo-qmailのインストールは完了です。エラーがないことを確認してから次のステップへ行きましょう。

実装ステップ2 — 認証プログラムと権限設定

ここからは、sagredo-qmailでSMTP認証を有効にするための具体的な設定を進めます。受信側と送信側の両方に設定が必要なので、順を追って確認していきましょう。

checkpassword-pam バイナリを確認

/usr/local/bin/checkpassword-pam が存在することと実行権限と setuid が付与されているか以下のコマンドで確認しましょう。

ls -l /usr/local/bin/checkpassword-pam

-rwsr-xr-x(=4755)の権限が必要です。違う場合は以下で修正します。

chmod u+s /usr/local/bin/checkpassword-pam

PAM 設定ファイルを作成

/etc/pam.d/qmail を新規作成し、以下のように書き込みましょう。

auth   	required 	pam_unix.so try_first_pass debug
account	required     pam_unix.so

IP アクセス制御の設定(tcprules)

/etc/tcp.smtp に認証ルールを記載します。エディタで/etc/tcp.smtpを開き、以下のように書き込んで保存してください。

127.:allow,RELAYCLIENT=""
:allow 

保存できたら以下のコマンドを実行します。

tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

qmail-smtpd の起動スクリプト作成

受信側のサービスを作成します。/etc/service/qmail-smtpd/runをエディタで開き、以下を記述します。

#!/bin/sh
QMAILUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=20

cd /var/qmail

exec env PATH="/var/qmail/bin:/usr/bin:/bin" \
    SMTPAUTH=1 \
    PAM_SERVICE=qmail \
    FORCETLS=0 \
    /usr/bin/softlimit -m 32000000 \
    /usr/bin/tcpserver -v -H -R -l 0 \
        -x /etc/tcp.smtp.cdb \
        -c "$MAXSMTPD" \
        -u "$QMAILUID" -g "$NOFILESGID" 0 25 \
    /bin/sh -c \
        "cd /var/qmail && \
         exec /var/qmail/bin/qmail-smtpd \
         /usr/local/bin/checkpassword-pam \
         /bin/true" 2>&1 | \
    exec /usr/bin/multilog t s1000000 n20 /var/log/qmail/smtpd

保存したら以下のコマンドで実行権限を付与します。

chmod 755 /etc/service/qmail-smtpd/run

実行権限を付与するとdaemon-toolsが自動でqmail-smtpdを起動します。

qmail-sendの起動スクリプト作成

送信側のサービスを作成します。/etc/service/qmail-send/runをエディタで開き、以下を記述しましょう。

#!/bin/sh
exec /usr/bin/softlimit -m 64000000 /var/qmail/rc

保存したら以下のコマンドで実行権限を付与します。

chmod 755 /etc/service/qmail-send/run

実行権限を付与するとdaemon-toolsが自動でqmail-smtpdを起動します。

サービス状態の確認

設定が反映され、サービスが正常に動いているか確認します。

svstat /etc/service/*

qmail-sendとqmail-smtpdがup (pid …)と表示されたら成功です。

実装ステップ3 — サービス登録とリレー設定

インストールとサービスの起動が完了したら、blastengineへのリレー設定を行います。ここでは、外部SMTPリレーを利用するための設定方法を順を追って解説します。

blastengine のSMTPリレー設定

sagredo-qmailでは、外部SMTPリレーの認証情報を /var/qmail/control/smtproutes にまとめて記載します。エディタでファイルを開き、以下のように設定しましょう

:smtp.engn.jp:587|ユーザー名|パスワード

特定ドメインだけをリレーする場合は、以下のように記載します。

yourdomain.com:smtp.engn.jp:587|ユーザー名|パスワード

「ユーザー名」と「パスワード」は blastengineの管理画面から取得してください。取得方法は以下の通りです。まずは公式サイトから無料トライアルを試してみましょう。

blastengine公式サイト:https://blastengine.jp/

  1. 無料お試しを申し込む
  2. blastengineにログインする
  3. 画面右上の歯車マークをクリックする
  4. SMTPリレーの「確認・変更ボタン」をクリックする
  5. 表示されるID・パスワードを設定する

注意事項としては、sagredo-qmailの場合は認証情報をパイプ(|)で区切って1つのファイルに記載することです。これはqmailのパッチやディストリビューションによって微妙に違いますので、付属しているドキュメントを確認した上で記述しましょう。

最後にアクセス権を設定します。

chown qmailq:qmail /var/qmail/control/smtproutes
chmod 600 /var/qmail/control/smtproutes

サービスの再起動

設定を反映させるため、サービスを再起動します。

svc -u /etc/service/qmail-smtpd
svc -u /etc/service/qmail-send

起動できたかどうか以下のコマンドでステータス確認できます。

svstat /etc/service/*

up (pid …)と表示されたらqmailをSMTPに対応させる設定は完了です。

動作確認

動作確認が完了すれば、設定はほぼ万全です。あとは実運用環境で送受信テストを行い、安定性を確認しましょう。

ポート587疎通確認

設定が完了したら、実際にblastengineのSMTPリレーで送信できるかどうかを確認します。ポート587へ外向きTCPが通るか簡易チェックをしましょう。

nc -zv smtp.engn.jp 587

succeeded!とメッセージが出ればOKです。次にテストメール送信をします。

テストメールを投入

swaksを使用して簡単なテストメールを送信しましょう。以下をコマンドとして打ってみてください。LOCALUSER/LOCALPASSはqmailを動かしているサーバーにログインできるユーザー名とパスワードです。blastengineのユーザー名とパスワードではありませんので注意してください。

swaks \
  --from contact@yourdomain.com \
  --to recipient@example.com \
  --server 127.0.0.1 \
  --auth LOGIN \
  --auth-user LOCALUSER \
  --auth-password LOCALPASS \
  --data "From: contact@yourdomain.com\r\n\
To: recipient@example.com\r\n\
Subject: qmail SMTP relay test\r\n\
\r\n\
This is a test message via BlastEngine."

※ LOCALUSER/LOCALPASS はサーバーのログイン情報。blastengineの認証情報ではないので注意。

blastengineでは送信時に From:To: ヘッダーが必須なので、必ず明示します。250 ok が返ればキュー投入成功です。

キュー処理と外部リレーのログを監視

qmailでは、メールの配送処理やエラーはすべてログに記録されます。特に、外部のSMTPリレー(今回の例ではblastengine)への送信が正常に行われているかを確認するには、qmail-send のログをリアルタイムで監視することが最も確実な方法です。以下のコマンドで、配送処理の詳細ログをリアルタイムに表示できます。

sudo tail -f /var/log/qmail/current

例:

delivery ... remote ... smtp.engn.jp ...

250 ok の応答が見えれば送信成功です。

キューに残っていないか確認

qmailは配送が一度で成功しなかったメールをキューに一時保存して再試行します。外部SMTPリレーへの接続エラーや認証失敗があると、そのメールはキューに残され、一定間隔で再配送が試みられます。配送キューの状態を確認するには、以下のコマンドを実行します。

sudo /var/qmail/bin/qmail-qstat

messages in queue: 0messages in queue but not yet preprocessed: 0 であれば配送済みです。

受信側メールボックスを確認

自分のメールアドレスに実際に送信してみて、メールボックスを確認してみましょう。メールが到着していれば送信テスト完了です。

失敗時の典型原因チェック

  • 554 refused to connect
    ISPが25番をブロックしています。ポートを587に変更してTLSを導入する必要があります。
  • 535 authentication failed:
    smtpauthのUSER/PASSが誤っています。
  • connection timed out
    ファイアウォール等によってフィルタリングされています。

おすすめのSMTPリレーサービス「blastengine(ブラストエンジン)」

ブラストエンジンのキャッチ画像

ブラストエンジンは、API連携・SMTPリレーで大量のメールを高速配信することが可能です。さらに、メールサーバーを必要とせず、API経由でメールを送信する仕組みも提供しています。また、サーバーの運用やメンテナンスを行っているため、常に高いIPレピュテーションを維持しながら、安全にメールを送ることができます。blastengineの特徴は以下の通りです。

  • 日本国内に99%のメール到達率
  • 高速配信エンジンにより大量配信にも強い
  • SPF・DKIM・DMARCなど送信ドメイン認証も対応済み
  • Webhook対応でエラーをリアルタイムで通知

ブラストエンジンは各メールプロバイダーや携帯キャリアのドメインに最適化されており、大規模なネットワークを経由してメール配信を行うことで、日本国内での到達率を圧倒的に高めています。

利用料金は月額3,000円からとコストパフォーマンスにも優れており、メールだけでなく、日本語での電話サポートにも対応しています。メールアドレスの入力のみで無料トライアルが可能ですので、まずは気軽にお試しください。

まとめ

本記事では、sagredo-qmailを使用してSMTP認証機能を実装する方法について解説しました。sagredo-qmailには既にSMTP認証機能が統合されているため、パッチ適用の必要がなく、設定のみでBlastEngineのような商用SMTPリレーサービスとの連携が可能になります。

特に重要なのは、認証情報をsmtproutesファイルにパイプ区切りで記載する点と、BlastEngineではFrom:とTo:ヘッダーが必須である点です。適切な設定により、qmailでも現代的なSMTP認証を利用でき、商用SMTPリレーを使った高信頼性のメール配信が実現できます。

Gmail送信者ガイドライン対応バナー

blastengine(プラストエンジン)ロゴ

エンジニアを面倒なメールに関するトラブルから解放するために作られたブラストエンジン
まずは無料トライアルで、その使いやすさを実感してみませんか?

\メールアドレス入力のみ/

無料トライアル