「Qmail over SSL でメール通信を暗号化する」 は6編に分けてあります。他の記事は ▼ をご参照ください。
最初に MTA である Qmail に ucspi-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 が完成されます。
- Courier-authlib / Courier-imap の役割・制約
- Courier ユーザの作成
- コンパイルに必要なツールを設置
- Courier-authlib-0.58 を設置
- authdaemonrc ファイルの設定を修正 ( または確認 )
- Courier-authlib を systemd に登録
- Courier-authlib を起動して、サービス自動起動を有効にする
- Courier-authlib の経路を環境変数 PATH へ追加
- Courier-authlib のステータスを確認
- Courier-imap-4.1.1 の設置
- Courier-imap の設定方法
- Courier-imap を systemd へ登録
- Courier-imap を起動して、サービス自動起動を有効にする
- Courier-imap のステータスを確認
- IMAP over SSL 用の self-signed X.509 key を作成
- imap-ssl で起動する
- Firewall の設定
Courier-authlib / Courier-imap の役割・制約
それぞれの役割を見ると、Courier-imap はメールを保管するためのプロトコル ( imapd、imapd-ssl、pop3d、pop3d-ssl ) を管理し、Courier-authlib が Courier-imap で設定したプロトコル ( imapd ) に基づいてそのポートをリッスンし、クライアントからの接続要求の認証を担当することになります。
制約:
Courier-authlib-0.58 と Courier-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-ssl を START させます。
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
コメント