「Qmail over SSL でメール通信を暗号化する」 は6編に分けてあります。他の記事は ▼ をご参照ください。
CentOS7 で運用中の Qmail1.03 の設置及び設定方法をメモっておきます。主な特徴は、smtps と imaps を利用して メール通信の暗号化 を実現、Vpopmail w/ QmailAdmin 構成で無限の マルチドメインのメールサーバ に、ezmlm との連動で 大量メール の発射台化、dnscache でさらに 高速化 が実現します。
基本パッケージである qmail-1.03、ucspi-tcp-0.88、daemontools-0.76 を設置して SMTP over SSL の設定まで行います。
Qmail のユーザ・グループを作成
Qmail を MTA に使いますので、Postfix を削除してから設置・設定を行います。
yum list installed |grep postfix # 設置されて入れば消します。 yum -y remove postfix userdel postfix
/usr/local/src/qmail-1.03/INSTALL.ids を参考にし、Qmail ユーザ と グループ を作成します。
mkdir /var/qmail groupadd nofiles useradd -g nofiles -d /var/qmail/alias -s /sbin/nologin -M alias useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp groupadd qmail useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails
Qmail-1.03 を設置
※ netqmail 1.06 は対象外です。
cd /usr/local/src wget http://cr.yp.to/software/qmail-1.03.tar.gz wget http://tomclegg.ca/qmail/qmail-smtpd-auth-0.31.tar.gz wget http://qmail.jms1.net/patches/qmail-date-localtime.patch wget http://qmail.org/qmail-smtpd-relay-reject wget http://www.ckdhr.com/ckd/qmail-103.patch tar zxvf qmail-1.03.tar.gz tar zxvf qmail-smtpd-auth-0.31.tar.gz cd qmail-1.03 mv ../qmail-date-localtime.patch ./ mv ../qmail-smtpd-relay-reject ./ mv ../qmail-smtpd-auth-0.31/*.* ./ mv ../qmail-103.patch ./ patch < qmail-date-localtime.patch patch < qmail-smtpd-relay-reject patch < auth.patch patch < qmail-103.patch vi error.h extern int errno; ↓ #include<errno.h> # << redhat系は編集が必要 vi conf-spawn 125 # << 125 - 255以下に変更する(性能チューニング) vi tls.c char *strerror(int); # << 12 line : const char *strerror(int); を左側のように変更する make make setup check ./config-fast mail.example.com # << メールサーバのFQDN
config-fast を実行すると、下記のようなことを自動処理してくれます。
※ もし、正常に動作しない場合はサーバの DNS 設定 ( MXレコード ) に問題がある可能性があります。
echo mail.example.com > /var/qmail/control/me
echo mail.example.com > /var/qmail/control/defaultdomain
echo mail.example.com > /var/qmail/control/plusdomain
echo mail.example.com > /var/qmail/control/locals
echo mail.example.com > /var/qmail/control/rcpthosts
[root@centos7 qmail-1.03]# ./config-fast mail.example.com Your fully qualified host name is mail.example.com. Putting mail.example.com into control/me... Putting example.com into control/defaultdomain... Putting co.jp into control/plusdomain... Putting mail.example.com into control/locals... Putting mail.example.com into control/rcpthosts... Now qmail will refuse to accept SMTP messages except to mail.example.com. Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
ダウンロードしたソースファイルを削除します。( 任意 )
cd /usr/local/src rm -f /usr/local/src/qmail-1.03.tar.gz rm -f /usr/local/src/qmail-smtpd-auth-0.31.tar.gz rm -fr /usr/local/src/qmail-smtpd-auth-0.31
Qmail-1.03 の基本設定
echo 'MANPATH /var/qmail/man' >> /etc/man.config echo ‘20971520’ > /var/qmail/control/databytes # << 受信メールサイズの上限を指定(20MB) touch /var/qmail/control/doublebounceto # << 存在しないメールを処理
エイリアス ( Alias ) を追加
管理者アカウントが admin@example.com の場合、
echo admin@example.com > /var/qmail/alias/.qmail-mailer-daemon echo admin@example.com > /var/qmail/alias/.qmail-postmaster echo admin@example.com > /var/qmail/alias/.qmail-root chmod 644 /var/qmail/alias/.qmail*
ucspi-tcp-0.88 ( tcp server ) を設置
cd /usr/local/src wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz # smtp-ssl 対応 wget http://www.nrg4u.com/qmail/ucspi-tcp-ssl-20050405.patch.gz tar zxvf ucspi-tcp-0.88.tar.gz cd ucspi-tcp-0.88 zcat ../ucspi-tcp-ssl-20050405.patch.gz | patch # << error.h パッチを含む make make setup check cp /usr/local/src/ucspi-tcp-0.88/tcpserver /usr/local/bin/tcpserver-ssl
daemontools-0.76 を設置
daemontools は UNIX サービスの起動、終了、状態監視、ログ取得などを管理するためのツールのコレクションです。
※ Unix のサービス ( または サービス ) とは、
daemontools の設置時に自動的に生成されたservice ディレクトリの下に登録されるものである。( dnscache、qmail、smtpd、smtps )
# 現時点では service ディレクトリは存在しません。サービス登録後のリストです。 [root@centos7 service]# ll /service/ total 0 lrwxrwxrwx 1 root root 20 Dec 20 2016 dnscache -> /var/djbdns/dnscache lrwxrwxrwx 1 root root 24 Dec 19 2016 qmail -> /var/qmail/service/qmail lrwxrwxrwx 1 root root 24 Dec 19 2016 smtpd -> /var/qmail/service/smtpd lrwxrwxrwx 1 root root 24 Dec 19 2016 smtps -> /var/qmail/service/smtps [root@centos7 service]#
設置します。
cd /usr/local/src wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz mkdir -p /package chmod 1755 /package/ cd /package/ cp /usr/local/src/daemontools-0.76.* ./ tar -xzf daemontools-0.76.tar.gz cd admin cd daemontools-0.76/ patch -p1 < /package/daemontools-0.76.errno.patch ./package/install # ↑↑↑ このタイミングで /command、/service ディレクトリが作成されます。
Qmail の Sendmail Wrapper を設定
Microsoft の Outlook Express、Mac OS X Mail のような MUA ( Mail User Agent ) が Qmail を利用できるようになります。
mv /usr/lib/sendmail /usr/lib/sendmail.old mv /usr/sbin/sendmail /usr/sbin/sendmail.old ln -s /var/qmail/bin/sendmail /usr/lib ln -s /var/qmail/bin/sendmail /usr/sbin
qmail を daemontools のサービスに登録する
登録までの流れは下記のようになります。
Qmail のホームディレクトリの下に service ディレクトリを作成 → その下に必要なサービスを追加 → スクリプトを作成 → 追加したサービスはソフトリングを掛けて daemontools のサービスに登録する
Qmail のホームディレクトリの下に service ディレクトリを作成
ここでは、qmail、smtpd、smtps というサービスを追加します。
サービス名は任意です。適宜、変更してください。
mkdir /var/qmail/service
その下に必要なサービスを追加:qmail
mkdir /var/qmail/service/qmail mkdir /var/qmail/service/qmail/log chmod +t /var/qmail/service/qmail
登録サービス qmail の run script を作成
cd /usr/local/src wget https://github.com/shomichiru/qmail-script/raw/master/qmail-run-script.txt wget https://github.com/shomichiru/qmail-script/raw/master/qmail-log-run-script.txt mv qmail-run-script.txt /var/qmail/service/qmail/run mv qmail-log-run-script.txt /var/qmail/service/qmail/log/run chmod +x /var/qmail/service/qmail/run chmod +x /var/qmail/service/qmail/log/run mkdir /var/log/qmail chown qmaill:nofiles /var/log/qmail chmod 777 /var/log/qmail
追加したサービスはソフトリングを掛けて daemontools のサービスに登録する:qmail
ln -s /var/qmail/service/qmail /service/qmail
smtpd を daemontools のサービスに登録する
mkdir /var/qmail/service/smtpd mkdir /var/qmail/service/smtpd/log chmod +t /var/qmail/service/smtpd cd /usr/local/src wget https://github.com/shomichiru/qmail-script/raw/master/smtpd-run-script.txt wget https://github.com/shomichiru/qmail-script/raw/master/smtpd-log-run-script.txt vi smtpd-run-script.txt example.com ↓ 実際のドメインに適宜、変更する mv smtpd-run-script.txt /var/qmail/service/smtpd/run mv smtpd-log-run-script.txt /var/qmail/service/smtpd/log/run chmod +x /var/qmail/service/smtpd/run chmod +x /var/qmail/service/smtpd/log/run mkdir /var/log/qmail/smtpd chown qmails:nofiles /var/log/qmail/smtpd chmod 777 /var/log/qmail/smtpd ln -s /var/qmail/service/smtpd /service/smtpd
smtps を daemontools のサービスに登録する
SMTP over SSL 用の X.509キーを作成
登録前に SMTP over SSLを適用するため、X.509キーを作成 します。
有効期間を10年 ( 任意 ) -days3650、保存場所を /var/qmail/control/servercert.pem に指定します。Common Name(CN) は、IMAP over SSL の設定(mail.example.com)と重複しないように smtp.example.com に設定します。
[root@centos7 ~]# openssl req -newkey rsa:2048 -x509 -nodes -days 3650 -out /var/qmail/control/servercert.pem -keyout /var/qmail/control/servercert.pem # 適宜、情報を入力します。 Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:TOKYO Locality Name (eg, city) [Default City]:Shinagawa Organization Name (eg, company) [Default Company Ltd]:EXAMPLE Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:smtp.example.com Email Address []:admin@example.com [root@centos7 ~]# chmod 640 /var/qmail/control/servercert.pem # メールクライアントで smtp.example.com 証明書の更新 & 設置できるように、所有権限を vpopmail に設定 chown vpopmail.vchkpw /var/qmail/control/servercert.pem ln -s /var/qmail/control/servercert.pem /var/qmail/control/clientcert.pem openssl ciphers > /var/qmail/control/tlsclientciphers openssl ciphers > /var/qmail/control/tlsserverciphers
確認します。
# 問題なく接続されるか確認します。( Ctrl+C で Exit ) openssl s_client -connect smtp.example.com:465 # 入力した情報が正しく表示されるか確認します。 openssl x509 -text -noout -in /var/qmail/control/servercert.pem
smtpsを daemontools サービスに登録
mkdir /var/qmail/service/smtps mkdir /var/qmail/service/smtps/log chmod +t /var/qmail/service/smtps cd /usr/local/src wget https://github.com/shomichiru/qmail-script/raw/master/smtps-run-script.txt wget https://github.com/shomichiru/qmail-script/raw/master/smtps-log-run-script.txt vi smtps-run-script.txt example.com ↓ 実際のドメインに適宜、変更する mv smtps-run-script.txt /var/qmail/service/smtps/run mv smtps-log-run-script.txt /var/qmail/service/smtps/log/run chmod +x /var/qmail/service/smtps/run chmod +x /var/qmail/service/smtps/log/run mkdir /var/log/qmail/smtps chown qmails:nofiles /var/log/qmail/smtps chmod 777 /var/log/qmail/smtps ln -s /var/qmail/service/smtps /service/smtps
svscan を起動して、サービス自動起動を有効化
vi /usr/lib/systemd/system/svscan.service
[Unit] Description=Daemontools svscan [Service] ExecStart=/command/svscanboot Restart=on-abort [Install] WantedBy=multi-user.target
systemctl start svscan systemctl enable svscan systemctl is-enabled svscan
今この構成を組む前に(2026 年 7 月 追記)
手順そのものは当時のまま記録として残しますが、2026 年の今、この構成でメールサーバを立てるのはおすすめしません。理由を正直に書いておきます。
1. ログディレクトリの権限を直してください(最優先)
本文に次の指定が 3 か所あります。
chmod 777 /var/log/qmail
777 は誰でも読み書き・削除できるという指定です。メールのログには送受信したアドレスが残りますし、侵入された場合に痕跡を消すのにも使われます。当時は動作を優先してこう書きましたが、これは適切ではありませんでした。
直前の行で所有者を指定しているので、次で足ります。
chown qmaill:nofiles /var/log/qmail
chmod 750 /var/log/qmail
すでにこの手順で構築された方は、いま確認してみてください。
2. 送信ドメイン認証がないと、メールが届きません
これが最大の問題です。2024 年 2 月以降、Gmail は送信者に対して送信ドメイン認証を求めるようになりました。SPF・DKIM・DMARC のことです。
SPF は DNS の設定なので、この構成でも対応できます。問題は DKIM です。qmail 1.03 は 1998 年のソフトウェアで、DKIM 署名の機能を標準では持っていません。別途パッチや外部フィルタを組み合わせる必要があります。
署名のないメールは、届かないか迷惑メールに入ります。自分宛のテストでは気づけません。相手の受信箱に入っていないだけだからです。
詳しくはメールが届かないときの記事にまとめています。
3. 自己署名証明書について
本文では openssl req -x509 で自己署名の証明書を作っています。動作はしますが、メールクライアントで警告が出ます。「この証明書は信頼できません」という、あの表示です。
今なら Let’s Encrypt の証明書を使えます。ウェブサーバで取得しているなら、同じ証明書をメールサーバでも使えます。自動更新の仕組みに乗せられるので、-days 3650 のような長期の自己署名を作る必要もありません。
4. パッケージの状態
- qmail 1.03 — 1998 年公開。本体の更新は止まっており、本文でも複数のパッチを当てて成立させています
- ucspi-tcp・daemontools — 同様に更新が止まっています
- CentOS 7 — 2024 年 6 月 30 日にサポート終了
この記事はパッチを当てながら組み上げる過程の記録として書いたもので、その作業自体が「もう普通ではない」ことの表れでもあります。
それでも自前で立てるなら
学習目的や、閉じたネットワーク内での利用なら、この記事は今も参考になると思います。daemontools でサービスを管理する考え方も、systemd とは違う発想として面白い部分です。
ただしインターネット宛に実際にメールを送る用途であれば、現在も開発が続いている MTA を選ぶことをおすすめします。DKIM 署名まで含めて標準的な手順が整っています。
あるいは、送信だけを外部のメール配信サービスに任せるという選択もあります。送信ドメイン認証の面倒を丸ごと預けられるので、個人で運用するなら現実的です。
※ 本節は 2026 年 7 月時点の公開情報に基づく整理であり、当方の環境で改めて検証したものではありません。







コメント