Qmail daemontoolsIMAP over SSLQmail over SSLSMTP over SSLucspi-tcp

Qmail over SSLでメール通信を暗号化する〜第 2 篇:基本パッケージ設置〜|CentOS 7

qmail-setup-tcpserver Qmail
スポンサーリンク

「Qmail over SSL でメール通信を暗号化する」 は6編に分けてあります。他の記事は ▼ をご参照ください。

CentOS7 で運用中の Qmail1.03 の設置及び設定方法をメモっておきます。主な特徴は、smtpsimaps を利用して メール通信の暗号化 を実現、Vpopmail w/ QmailAdmin 構成で無限の マルチドメインのメールサーバ に、ezmlm との連動で 大量メール の発射台化dnscache でさらに 高速化 が実現します。

基本パッケージである qmail-1.03、ucspi-tcp-0.88、daemontools-0.76 を設置して SMTP over SSL の設定まで行います。

Qmail のユーザ・グループを作成

QmailMTA に使いますので、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 を設置

daemontoolsUNIX サービスの起動、終了、状態監視、ログ取得などを管理するためのツールのコレクションです。

daemontools のコレクション
  • supervise:サービスを監視。サービスを開始し、サービスを再起動。
  • multilog:1つ以上のログにエラーメッセージを保存。
  • svscan:サービス群を開始し、監視。
  • svc:supervise による監視されるサービスを管理。
  • svstat:supervise により監視されるサービスの状態を出力。

※ 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 ExpressMac 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

参考文献

qmail
ucspi-tcp

スポンサーリンク

コメント

タイトルとURLをコピーしました