Qmail Courier-AuthlibCourier-imapIMAP over SSLQmail over SSLSMTP over SSL

Qmail over SSL でメール通信を暗号化する〜第 4 篇:Courier-imap 設置〜|CentOS 7

qmail-setup-courier-imap Qmail
スポンサーリンク

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

最初に MTA である Qmailucspi-tcp、daemontools などを設置して、複数のドメインをサポートするために Vpopmail も設置しました。Vpopmail で生成されたドメインとユーザを保存するために MySQL の設定もしました。

デーモンを起動すれば、Qmail は ucspi-tcp つまり、tcpserver を使って SMTP / 25 番ポートを常時リッスンし、メールの送信要求に対して自分が持っているルールファイル ( tcp.smtp.cdb ) の内容に基づいて許可/拒否の判定を 24×7 休まず実行するようになります。
また、
admin@example.com という example.com ドメインのユーザを作成することで、メールサーバは example.com のメールサーバの役割を始めます。もし、admin@example1.com というユーザを追加する場合、メールサーバは example1.com のメールサーバの役割も同時にしてくれます。( adminは任意 )

メールの送受信 という側面から見ると、これまで メールの送信 に関わる SMTP 関連の設定をして来ました。
これからは メールの受信 のための IMAP の設定を行い、最後には X.509キー を作成および適用することで、IMAP over SSL まで実装します。これで Qmail over SSL が完成されます。

Qmail over SSL という概念は筆者が勝手に作ったものです。一般的には通じません。

Courier-authlib / Courier-imap の役割・制約

それぞれの役割を見ると、Courier-imap はメールを保管するためのプロトコル ( imapd、imapd-ssl、pop3d、pop3d-ssl ) を管理し、Courier-authlibCourier-imap で設定したプロトコル ( imapd ) に基づいてそのポートをリッスンし、クライアントからの接続要求の認証を担当することになります。

制約:
Courier-authlib-0.58Courier-imap-4.1.1.tar.bz2 に限定して構成のみになります。( 他のバージョンでは、エラーが発生 )
imap/imap-ssl などを使用する場合は、daemontools のサービスに登録されている pop3 などのリンクを削除した後、Courier-authlib サービスを起動する必要があります。

Courier ユーザの作成

groupadd courier
useradd -g courier -s /sbin/nologin -M courier

コンパイルに必要なツールを設置

yum -y install libtool-ltdl-devel
yum -y install gdbm-devel
yum -y install pam-devel
yum -y install openssl-devel
yum -y install mysql-devel
yum -y install zlib-devel
yum -y install libtool
yum -y install openldap-devel
yum -y install gcc-c++
yum -y install expect
yum -y install postgresql-devel

Courier-authlib-0.58 を設置

cd /usr/local/src
wget http://shupp.org/software/courier-authlib-0.58.tar.bz2
bunzip2 courier-authlib-0.58.tar.bz2
tar xf courier-authlib-0.58.tar
chown -R root.root courier-authlib-0.58
cd courier-authlib-0.58

./configure \
  --prefix=/usr/local/courier-authlib \
  --without-authpam \
  --without-authldap \
  --without-authpwd \
  --without-authpgsql \
  --without-authmysql \
  --without-authshadow \
  --without-authuserdb \
  --without-authcustom \
  --without-authcram \
  --without-authpipe \
  --without-authdaemon \
  --with-authvchkpw \
  --with-redhat \
  --with-ssl

#--------------------------#
# 下記のようなエラーが発生したら、
ERROR conftest2.out:  not found
./configure: line 25703: .: conftest2.out: file not found

# courierauthconfigを削除してください。
rm -f /usr/local/bin/courierauthconfig
#--------------------------#

make
make install
make install-configure

authdaemonrc ファイルの設定を修正 ( または確認 )

vi /usr/local/courier-authlib/etc/authlib/authdaemonrc

# --with-authvchkpw オプションでコンパイルした場合、反映済みです。
authmodulelist="authpam"
↓
authmodulelist="authvchkpw"

authmodulelistorig="authpam"
↓
authmodulelistorig="authvchkpw"

Courier-authlib を systemd に登録

courier-authlib サービスファイル を作成します。

vi /usr/lib/systemd/system/courier-authlib.service

[Unit]
Description=Courier Authentication Library

[Service]
Type=forking
RemainAfterExit=true
ExecStart=/usr/local/share/courier-authlib.sysvinit start
ExecStop=/usr/local/share/courier-authlib.sysvinit stop

[Install]
WantedBy=multi-user.target

Courier-authlib を起動して、サービス自動起動を有効にする

cp /usr/local/src/courier-authlib-0.58/courier-authlib.sysvinit /usr/local/share/
chmod 700 /usr/local/share/courier-authlib.sysvinit

systemctl start courier-authlib
systemctl enable courier-authlib

Courier-authlib の経路を環境変数 PATH へ追加

[root@centos7 ~]# cd
[root@centos7 ~]# echo "PATH=$PATH:$HOME/bin:/usr/local/courier-authlib/bin" >> ~/.bash_profile
[root@centos7 ~]# echo "export PATH" >> ~/.bash_profile
[root@centos7 ~]# . .bash_profile

Courier-authlib のステータスを確認

[root@centos7 ~]# systemctl status courier-authlib.service
● courier-authlib.service - Courier Authentication Library
   Loaded: loaded (/usr/lib/systemd/system/courier-authlib.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-05-26 23:22:34 JST; 2 days ago
  Process: 4632 ExecStart=/usr/local/share/courier-authlib.sysvinit start (code=exited, status=0/SUCCESS)
 Main PID: 4637 (courierlogger)
   CGroup: /system.slice/courier-authlib.service
           ├─4637 /usr/local/courier-authlib/sbin/courierlogger -pid=/usr/local/courier-authlib/var/spool/authdaemon/pid -start /usr/local/courier-authlib/libex...
           ├─4638 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
           ├─4722 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
           ├─4723 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
           ├─4724 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
           ├─4725 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
           └─4726 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond

May 26 23:22:33 centos7 systemd[1]: Starting Courier Authentication Library...
May 26 23:22:34 centos7 authdaemond[4637]: modules="authvchkpw", daemons=5
May 26 23:22:34 centos7 courier-authlib.sysvinit[4632]: Starting Courier authentication services: authdaemond
May 26 23:22:34 centos7 authdaemond[4637]: Installing libauthvchkpw
May 26 23:22:34 centos7 systemd[1]: Started Courier Authentication Library.
May 26 23:22:34 centos7 authdaemond[4637]: Installation complete: authvchkpw

Courier-imap-4.1.1 の設置

cd /usr/local/src
wget http://shupp.org/software/courier-imap-4.1.1.tar.bz2
tar -jxvf courier-imap-4.1.1.tar.bz2
cd courier-imap-4.1.1

export CFLAGS="-DHAVE_OPEN_SMTP_RELAY -DHAVE_VLOGAUTH"
export CPPFLAGS=-I/usr/local/courier-authlib/include
export COURIERAUTHCONFIG=/usr/local/courier-authlib/bin/courierauthconfig
export LIBS="-L/usr/lib64/mysql -lmysqlclient -lz"

/******************** IMAP before SMTP/SMTPs ********************/
./configure \
--prefix=/usr/local/courier-imap \
--enable-workarounds-for-imap-client-bugs \
--enable-unicodes=iso-2022-jp,iso-8859-1,utf-8 \
--disable-root-check \
--without-authdeamon \
--without-authmysql \
--without-authldap \
--without-authpgsql \
--with-authvchkpw \
--with-vpopmail=yes \
--with-cram=yes \
--with-redhat \
--with-ssl
/*****************************************************************/

--with-mysql=yes    # vpopmailと連動すると mysql は不要のため排除する。


make
make install
make install-configure

Courier-imap の設定方法

設置されると /usr/local/courier-imap/etc の下に imapd, imapd-ssl, pop3d, pop3d-ssl などの設定ファイルが作成されます。

基本的には、使用したいサービスファイルを開いて IMAPDSTART=YES に変更して使います。例えば、imapd-ssl を使う場合は残りのサービス ( imapd, pop3d, pop3d-ssl ) が IMAPDSTART=NO になっているか確かめた上で、imapd-ssl のサービスファイルを IMAPDSTART=YES に変更すればいいです。

Courier-imap を systemd へ登録

courier-imapサービスファイル を作成します。
vi /usr/lib/systemd/system/courier-imap.service

[Unit]
Description=Courier-IMAP service
Wants=network-online.target
Wants=courier-authlib.service
After=network-online.target
After=courier-authlib.service

[Install]
WantedBy=mail-transfer-agent.target
WantedBy=multi-user.target

[Service]
Type=forking
RemainAfterExit=true
ExecStart=/usr/local/share/courier-imap.sysvinit start
ExecStop=/usr/local/share/courier-imap.sysvinit stop

Courier-imap を起動して、サービス自動起動を有効にする

cp /usr/local/src/courier-imap-4.1.1/courier-imap.sysvinit /usr/local/share
chmod 700 /usr/local/share/courier-imap.sysvinit

systemctl start courier-imap
systemctl enable courier-imap

Courier-imap のステータスを確認

[root@centos7 ~]# systemctl status courier-imap
● courier-imap.service - Courier-IMAP service
   Loaded: loaded (/usr/lib/systemd/system/courier-imap.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-05-26 23:22:41 JST; 2 days ago
  Process: 5330 ExecStart=/usr/local/share/courier-imap.sysvinit start (code=exited, status=0/SUCCESS)
 Main PID: 5375 (courierlogger)
   CGroup: /system.slice/courier-imap.service
           ├─ 5375 /usr/local/courier-authlib/sbin/courierlogger -pid=/var/run/imapd-ssl.pid -start -name=imapd-ssl /usr/local/courier-imap/libexec/couriertcpd ...
           ├─ 5383 /usr/local/courier-imap/libexec/couriertcpd -address=0 -maxprocs=40 -maxperip=40 -nodnslookup -noidentlookup 993 /usr/local/courier-imap/bin/...
           ├─21621 /usr/local/courier-imap/bin/couriertls -server -tcpd /usr/local/courier-imap/sbin/imaplogin /usr/local/courier-imap/bin/imapd Maildir
           ├─21623 /usr/local/courier-imap/bin/imapd Maildir
           ├─21627 /usr/local/courier-imap/bin/couriertls -server -tcpd /usr/local/courier-imap/sbin/imaplogin /usr/local/courier-imap/bin/imapd Maildir
           ├─21628 /usr/local/courier-imap/bin/imapd Maildir
           ├─22405 /usr/local/courier-imap/bin/couriertls -server -tcpd /usr/local/courier-imap/sbin/imaplogin /usr/local/courier-imap/bin/imapd Maildir
           └─22406 /usr/local/courier-imap/bin/imapd Maildir
...

IMAP over SSL 用の self-signed X.509 key を作成

作成する認証キー情報を編集します。

該当キーメールクライアントがサーバに接続する際に利用されます。
vi /usr/local/courier-imap/etc/imapd.cnf

RANDFILE = /usr/local/courier-imap/share/imapd.rand

[ req ]
default_bits = 2048
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

# req_dnを適宜、修正してください。
[ req_dn ]
C=JP
ST=TK
L=TOKYO
O=example.com
OU=naruhodo-SSLkey
CN=mail.example.com          #   <<  FQDNを入力
emailAddress=admin@example.com

[ cert_type ]
nsCertType = server

自己署名された X.509 キーを作成します。

courier-imap をインストールすると、自動的にインストールされる X.509キー作成スクリプト を編集します。

vi /usr/local/courier-imap/share/mkimapdcert

ファイルの最後のところで下記のように変更します。
-days 365 → 3650 # 有効期間を 1年 → 10年に変更 ( 任意 )
gendh → dhparam # openssl 0.9.4. / 0.9.5 バージョン以降 dh、gendh → dhparamに統合

それでは、スクリプトを実行して X.509キー を作成します。
新しく作成されたキーは、/usr/local/courier-imap/share/imapd.pem で確認できます。

[root@centos7 etc]# /usr/local/courier-imap/share/mkimapdcert
Generating a 2048 bit RSA private key
..............+++
.............+++
writing new private key to '/usr/local/courier-imap/share/imapd.pem'
-----
1024 semi-random bytes loaded
Generating DH parameters, 512 bit long safe prime, generator 2
This is going to take a long time
.........++*++*++*++*++*++*
subject= /C=JP/ST=TK/L=TOKYO/O=example.com/OU=naruhodo-imapd-SSLkey/CN=mail.example.com/emailAddress=admin@example.com      # << ここ!
notBefore=May 24 16:23:46 2019 GMT
notAfter=May 21 16:23:46 2029 GMT         #  << 有効期間が2029年5月21日に
...

作成された imapd.pem の内容を確認する場合、

openssl x509 -text -noout -in /usr/local/courier-imap/share/imapd.pem

認証キーが作成されたので imap-ssl を使用します。

imap-ssl で起動する

imapd を起動させた状態であれば、imapd止めてimapd-sslSTART させます。

vi /usr/local/courier-imap/etc/imapd

IMAPDSTART=YES —> NO に変更

vi /usr/local/courier-imap/etc/imapd-ssl

IMAPDSSLSTART=NO —> YES に変更

courier-imap サービスを再起動する。

systemctl restart courier-imap

プロセス確認よりリッスンポートを確認するのが動作するかどうかを確認するに直感的なので、Couriertcpd というデーモンが 993/ tcp ポートをリッスンしていることが確認できるはずです。

[root@centos7 etc]# netstat -anp|grep 993
tcp6       0      0 :::993         :::*            LISTEN      16631/couriertcpd

Firewall の設定

すでに登録されているサービスがあるか検索します。

[root@centos7 ~]# firewall-cmd --get-services | grep imap

> imapとimapsがあるはずです。

imaps のみ、オープンします。

[root@centos7 ~]# firewall-cmd --add-service=imaps --zone=public --permanent

pop3 関連ルールが存在する場合、以下のように削除します。( 任意 )

[root@centos7 ~]# firewall-cmd --remove-service=pop3 --zone=public --permanent

リロードして Firewall に反映します。

[root@centos7 ~]# firewall-cmd --reload
[root@centos7 ~]# firewall-cmd --list-all

参考文献

Courier-imap
Courier Authentication Library

スポンサーリンク

コメント

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