俺だけのために Ore! Tips!

qmail の POP3/SMTP over SSL 対応

2004年03月25日 作業

tcpserver SSL/TLS patch の入手。

mikan# cd /usr/local/src
mikan# lynx http://www.nrg4u.com/

上記サイト内より、ucspi-tcp-ssl-20020705.patch.gz を落としてくる。(tcpserver にあてる SSL 対応用パッチ)

mikan# ls -la ucspi*
-rw-r--r--  1 root  wheel  53019 Nov 29  2002 ucspi-tcp-0.88.tar.gz
-rw-r--r--  1 root  wheel   3084 Mar 28 09:33 ucspi-tcp-ssl-20020705.patch.gz

mikan# tar xvfz ucspi-tcp-0.88.tar.gz
ucspi-tcp-0.88
ucspi-tcp-0.88/README
ucspi-tcp-0.88/TODO
<略>
ucspi-tcp-0.88/warn-auto.sh
ucspi-tcp-0.88/warn-shsgr
ucspi-tcp-0.88/x86cpuid.c

SSL のパッチをあてる

mikan# cd  ucspi-tcp-0.88
mikan# zcat ../ucspi-tcp-ssl-20020705.patch.gz | patch
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: Makefile
|===================================================================
|RCS file: /usr/home/cvs-qmail-ldap/CVS/ucspi-tcp/Makefile,v
|retrieving revision 1.1.1.1
|retrieving revision 1.2
|diff -u -r1.1.1.1 -r1.2
|--- Makefile   14 Jun 2002 08:47:30 -0000      1.1.1.1
|+++ Makefile   17 Jun 2002 12:53:14 -0000      1.2
--------------------------
Patching file Makefile using Plan A...
Hunk #1 succeeded at 1.
Hunk #2 succeeded at 159.
Hunk #3 succeeded at 757.
Hunk #4 succeeded at 766.
Hunk #5 succeeded at 847.
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: tcpserver.c
|===================================================================
|RCS file: /usr/home/cvs-qmail-ldap/CVS/ucspi-tcp/tcpserver.c,v
|retrieving revision 1.1.1.1
|retrieving revision 1.4
|diff -u -r1.1.1.1 -r1.4
|--- tcpserver.c        14 Jun 2002 08:47:30 -0000      1.1.1.1
|+++ tcpserver.c        19 Jun 2002 12:33:26 -0000      1.4
--------------------------
Patching file tcpserver.c using Plan A...
Hunk #1 succeeded at 1.
Hunk #2 succeeded at 37.
Hunk #3 succeeded at 246.
Hunk #4 succeeded at 259.
Hunk #5 succeeded at 323.
Hunk #6 succeeded at 363.
Hunk #7 succeeded at 410.
Hunk #8 succeeded at 473.
Hunk #9 succeeded at 515.
done

無事パッチがあたったので make する。(インストールは make setup を実行せず、手動でファイルをコピーする。)

mikan# make
( cat warn-auto.sh;  echo 'main="$1"; shift';  echo exec "`head -1 conf-ld`"  '-o "$main" "$main".o ${1+"$@"}'  ) > load
chmod 755 load
( cat warn-auto.sh;  echo exec "`head -1 conf-cc`" '-c ${1+"$@"}'  ) > compile
<略>
./load install hier.o auto_home.o unix.a byte.a
./compile instcheck.c
./load instcheck hier.o auto_home.o unix.a byte.a
mikan# cp tcpserver /usr/local/bin/tcpserver-ssl
mikan# ls -la /usr/local/bin/tcpserver*
-rwxr-xr-x  1 root  wheel  40116 Mar 28 13:18 /usr/local/bin/tcpserver
-rwxr-xr-x  1 root  wheel  43220 Mar 28 19:29 /usr/local/bin/tcpserver-ssl

秘密鍵と 認証申請書(CSR ファイル)を作成する。

mikan# sh
PEM1=/tmp/openssl.`date +%s`.$$.1
PEM2=/tmp/openssl.`date +%s`.$$.2
cd /var/qmail
openssl req -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2
Generating a 1024 bit RSA private key
.................................++++++
.......++++++
writing new private key to '/tmp/openssl.1080470029.23060.1'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Hiroshima
Locality Name (eg, city) []:Hiroshima-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Vaginus
Organizational Unit Name (eg, section) []:Hiroshima Center
Common Name (eg, YOUR name) []:mx.fureai-ichiba.com
Email Address []:

tcpserver-ssl では、秘密鍵と Certificate(電子証明書)を一つのファイルで管理する(間に空白行を一つ空けて。Apache-SSL 等だと、秘密鍵と証明書は別のファイルで管理する)。
今回は、第三者認証をしたり、自分で CA 局を立ち上げたりはしないので、証明申請書(CSR ファイル)のままで証明書代わりとする。
正規に、ベリサインなどで電子証明書を取った場合も、以下と同じように秘密鍵の後に認証機関から返ってきた証明書を一行空けて続けてセットすればいい。

cat $PEM1 >  cert.pem
echo ""   >> cert.pem
cat $PEM2 >> cert.pem
rm -f $PEM1 $PEM2
chmod 600 cert.pem
exit


APOP 認証にも対応したパスワード認証プログラム checkpw をインストールする。
(今回は APOP は行わない(qmail にパッチをあてないといけないし。それに、どうせ SSL 通信するんだから必要ないっしょ?違う?)。とは言っても、ま、今後(?)のために・・・ということで checkpw をインストール)

このサイトからリンクを辿り、checkpw-1.01.tar.gz をダウンロード。
   ↓
 http://heanet.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.01.tar.gz

mikan# cd /usr/local/src
mikan# lynx http://prdownloads.sourceforge.net/checkpw/

mikan# ls -la checkpw*
-rw-r--r--  1 root  wheel  28498 Mar 28 20:20 checkpw-1.01.tar.gz
mikan# tar xvfz checkpw-1.01.tar.gz
checkpw-1.01/
checkpw-1.01/auto_patrn.h
checkpw-1.01/conf-cc
<略>
checkpw-1.01/loginlog=s
checkpw-1.01/str_len.c
checkpw-1.01/CHANGES

mikan# cd checkpw-1.01
mikan# make
( cat warn-auto.sh;  echo 'main="$1"; shift';  echo exec "`head -1 conf-ld`"  '-o "$main" "$main".o ${1+"$@"}'  ) > load
chmod 755 load
( cat warn-auto.sh;  echo exec "`head -1 conf-cc`" '-c ${1+"$@"}'  ) > compile
chmod 755 compile
<略>
./load install hier.o auto_home.o unix.a byte.a
./compile instcheck.c
./load instcheck hier.o auto_home.o unix.a byte.a
mikan# make setup check
./install
./instcheck
mikan# ls -la /bin/check*
-rwx------  1 root  wheel  11828 Mar 28 21:35 /bin/checkapoppw
-rwx------  1 root  wheel   7964 Mar 28 15:23 /bin/checkpassword
-rwx------  1 root  wheel   9048 Mar 28 21:35 /bin/checkpw

パスワードファイルを作成する。(Maildir ディレクトリ以下に .password という名前で。平文なので、他人に見られないようファイルの権限をきちんと設定すること。)

mikan# cat > ~shinoda/Maildir/.password
hogehoge
^D
mikan# chown shinoda ~shinoda/Maildir/.password
mikan# chmod 600 ~shinoda/Maildir/.password

over SSL 対応版 qmail 用起動スクリプト作成し、起動する。
(SMTP over SSL は 465番ポートで、POP over SSL は 995番ポートを開けて起動する)

mikan# cp /var/qmail/rc /var/qmail/rc-ssl
mikan# vi /var/qmail/rc-ssl
#!/bin/sh

PATH="/var/qmail/bin:$PATH"

/usr/local/bin/tcpserver-ssl -sHR -x /etc/tcp.smtp.cdb -u 81 -g 81 -n /var/qmail/cert.pem 0 465 \ /var/qmail/bin/qmail-smtpd &

/usr/local/bin/tcpserver-ssl -sHR -n /var/qmail/cert.pem 0 995 /var/qmail/bin/qmail-popup \
 mx.fureai-ichiba.com /bin/checkpw /var/qmail/bin/qmail-pop3d Maildir &

↑ここでセットするホスト名は、秘密鍵を作成する時に入力した Common Name と同じでないといけないので注意!

mikan# chmod 755 /var/qmail/rc-ssl
mikan# ls -la /var/qmail/rc-ssl
-rwxr-xr-x  1 root  qmail  346 Mar 28 22:07 /var/qmail/rc-ssl
mikan# ln -s /var/qmail/rc-ssl /usr/local/etc/rc.d/qmail-ssl.sh
mikan# ps -ax|grep tcp
22206  p2  I      0:00.01 /usr/local/bin/tcpserver -HR -x /etc/tcp.smtp.cdb -u 81 -g 81 0 smtp /var/qmail/b
22207  p2  I      0:00.01 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup mx.fureai-ichiba.c
mikan# /usr/local/etc/rc.d/qmail-ssl.sh
mikan# ps -ax | grep tcp
22206  p2  I      0:00.01 /usr/local/bin/tcpserver -HR -x /etc/tcp.smtp.cdb -u 81 -g 81 0 smtp /var/qmail/b
22207  p2  I      0:00.01 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup mx.fureai-ichiba.c
23708  p2  S      0:00.02 /usr/local/bin/tcpserver-ssl -sHR -x /etc/tcp.smtp.cdb -u 81 -g 81 -n /var/qmail/
23709  p2  S      0:00.02 /usr/local/bin/tcpserver-ssl -sHR -n /var/qmail/cert.pem 0 995 /var/qmail/bin/qma

無事起動。:-)

前ページに戻る


Copyright (C) 2004 S.Maaasamasa.