ssl 導入


  1. openssl の導入
  2. pop over ssl およびsmtp over ssl の設定
  3. imap over sslの設定
  4. smtp-auth の設定

[1]openssl の導入

SSL をメールサーバに導入すると,クライアントとサーバ間の通信の やり取りが暗号化できる.以下はその導入のためのドキュメントである.

この作業は再構築後にusuzumi からgrey に変更されるために, もう一度公開鍵を作り直す.また,qmail の起動スクリプトや dovecot の設定ファイルにもusuzumi と書かれているため,それも grey に修正する.

[1.1]openssl のインストール

openssl をソースからインストールする

$ wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
 

展開して移動, コンパイル.

$ tar zxvf openssl-1.0.1c.tar.gz
$ cd openssl-1.0.1c
$ ./config --prefix=/usr --openssldir=/usr/local/openssl shared
$ make
$ sudo make install

[1.2]ucspi-tcpのソースパッケージにsslのパッチを充てる

ucspi-tcp のソースを取得する

$ wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
$ tar zxvf ucspi-tcp-0.88.tar.gz

ssl 化パッチと他のパッチを持ってくる

$ wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.a_record.patch
$ wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.nobase.patch
$ wget http://www.nrg4u.com/qmail/ucspi-tcp-ssl-20050405.patch.gz
$ gzip -d ucspi-tcp-ssl-20050405.patch.gz

パッチを充て, make.

$ cd ucspi-tcp-0.88
$ patch -p0 < ../ucspi-tcp-ssl-20050405.patch
$ patch -p1 < ../ucspi-tcp-0.88.a_record.patch
$ patch -p1 < ../ucspi-tcp-0.88.nobase.patch
$ make
$ sudo cp tcpserver /usr/local/bin/tcpserver-ssl

[2]pop over ssl の導入

[2.1]証明書発行および起動スクリプトの編集

証明書を発行する. 途中入力箇所があるので注意.

# make cert
openssl req -new -x509 -nodes \
        -out cert.pem -days 366 \
        -keyout cert.pem
Generating a 1024 bit RSA private key
.....++++++
.................++++++
writing new private key to 'cert.pem'
-----
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]:JA
State or Province Name (full name) [Some-State]:Hokkaido
Locality Name (eg, city) []:Sapporo
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Department of
Science
Organizational Unit Name (eg, section) []:Earth and Planetary Science
Common Name (e.g. server FQDN or YOUR name) []:usuzumi.ep.sci.hokudai.ac.jp
Email Address []:mondo4@usuzumi.ep.sci.hokudai.ac.jp

作成した秘密鍵を設置し、適切にパーミッションを設定

# mkdir /var/qmail/server.key 
# cp cert.pem /var/qmail/server.key/ 
# chmod 700 /var/qmail/server.key/; chmod 600 /var/qmail/server.key/cert.pem 
# rm cert.pem 

起動スクリプトへの書き込み -s オプションと -n /var/qmail/server.key/cert.pem を指定する

#  vim /etc/init.d/qmail
start)
         .
         .
         .
sh -c "start-stop-daemon --start --quiet --user qmaild \
 --pidfile /var/run/tcpserver_smtps.pid --make-pidfile \
 --exec /usr/local/bin/tcpserver-ssl -- -s -R -H \
 -u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb -n /var/qmail/server.key/cert.pem 0 ssmtp \
 $rblsmtpd /usr/sbin/qmail-smtpd 2>&1 \
 | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &"

sh -c "start-stop-daemon --start --quiet --user root \
 --pidfile /var/run/tcpserver_pop3s.pid --make-pidfile \
 --exec /usr/local/bin/tcpserver-ssl -- -s \
 -n /var/qmail/server.key/cert.pem -v \
 -u 0 -g 0 0 pop3s /var/qmail/bin/qmail-popup usuzumi.ep.sci.hokudai.ac.jp \
 /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
 | /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &"

stop)
         .
         .
         .
start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile /var/run/tcpsrver_ssmtp.pid --exec /usr/local/bin/tcpserver-ssl

start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3s.pid --exec /usr/local/bin/tcpserver-ssl

qmail の再起動と確認

# /etc/init.d/qmail restart
  # netstat -an | grep 995
  tcp        0      0 0.0.0.0:995             0.0.0.0:* LISTEN
  # netstat -an | grep 110
  tcp        0      0 0.0.0.0:110             0.0.0.0:* LISTEN
  # netstat -an | grep 465
  tcp        0      0 0.0.0.0:465             0.0.0.0:* LISTEN
  # netstat -an | grep 25
  tcp        0      0 0.0.0.0:25              0.0.0.0:* LISTEN

[2.2]動作確認

Thunderbird で「ツール」→「アカウント設定」→「アカウント操作」→「メールアカウントを追加」

  名前: ssl
  メールアドレス: mondo4@usuzumi.ep.sci.hokudai.ac.jp

「続ける」→「手動設定」

  受信サーバ: POP
  SSL: SSL/TLS
  認証方式: 暗号化されたパスワード認証
  送信サーバ: SMTP
  SSL: なし
  認証方式: 認証なし

自分宛にメールを出してみる

[3]imap over sslの設定

[3.1]証明書発行

自己証明書を発行する

# cd /etc/ssl
# /usr/lib/ssl/misc/CA.sh -newca
  CA certificate filename (or enter to create) ←[そのままEnter]

Making CA certificate ...
Generating a 1024 bit RSA private key
.......++++++
..............++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:←[仮passを入力]
Verifying - Enter PEM pass phrase:←[仮passを再度入力]
....
Country Name (2 letter code) [AU]:←[JAと入力]
State or Province Name (full name) [Some-State]: ←[Hokkaidoと入力]
Locality Name (eg, city) []:←[Sapporoと入力]
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
:←[Department of Scienceと入力]
Organizational Unit Name (eg, section) []:←[Earth and Planetary Science
と入力]:
Common Name (eg, YOUR name) []:←[usuzumi.ep.sci.hokudai.ac.jp と入力]
Email Address []:←[mondo4@usuzumi.ep.sci.hokudai.ac.jp と入力]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:←[空白のままEnter]
An optional company name []:←[空白のままEnter]
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/./cakey.pem:←[先程入力した仮pass
を入力]
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 0 (0x0)
Validity
Not Before: Oct 19 16:28:59 2008 GMT
Not After : Oct 19 16:28:59 2011 GMT
Subject:
countryName = JA
stateOrProvinceName = Hokkaido
organizationName = Department of Science
organizationalUnitName = Earth and Planetaly science
commonName = usuzumi.ep.sci.hokudai.ac.jp
emailAddress = mondo04@usuzumi.ep.sci.hokudai.ac.jp
....
Certificate is to be certified until Oct 19 16:28:59 2011 GMT (1095 days)

パスフレーズを消去する

# cd ./demoCA
# openssl rsa -in ./private/cakey.pem -out ./pribate/cakey.pem

[3.2]dovecot.conf の編集

dovecot.conf を編集(コメントインする)

# vim /etc/dovecot/dovecot.conf
   #ssl = yes → ssl = yes
   #ssl_cert_file = /etc/ssl/certs/dovecot.pem → ssl_cert_file =/etc/ssl/demoCA/cacert.pem
   #ssl_key_file = /etc/ssl/private/dovecot.pem → ssl_key_file =/etc/ssl/demoCA/private/cakey.pem

dovecot を再起動する.

# /etc/init.d/dovecot restart

imaps の動作確認

  # netstat -an | grep 993
  tcp        0      0 0.0.0.0:993             0.0.0.0:* LISTEN
  # netstat -an | grep 143
  tcp        0      0 0.0.0.0:143             0.0.0.0:* LISTEN

[3.3]動作確認

Thunderbird で「ツール」→「アカウント設定」→「アカウント操作」→「メールアカウントを追加」

  名前: ssl
  メールアドレス: mondo4@usuzumi.ep.sci.hokudai.ac.jp

「続ける」→「手動設定」

  受信サーバ: POP
  imap: SSL/TLS
  認証方式: 暗号化されたパスワード認証
  送信サーバ: SMTP
  SSL: なし
  認証方式: 認証なし

「完了」, 自分宛にメールを出してみる.

[4]smtp-auth の設定

smtp-auth (ユーザ認証機能)を導入することで,今まで使うことができなかった smtp over ssl を利用することができるようになる.以下ではその設定について述べる.

[4.1]qmail への smtp-auth パッチの適用

qmail のソースとパッチ,qmail-smtpd-auth パッチをインストールし展開する.

$ wget http://www.qmail.org/netqmail-1.06.tar.gz
$ tar zxf netqmail-1.06.tar.gz
$ wget http://www.ksknet.net/sample/qmail-date-localtime.patch (wget 出来なかったため,ファイルをコピーして持ってきた)
$ wget http://tomclegg.net/qmail/qmail-smtpd-auth-0.31.tar.gz
$ tar zxvf qmail-smtpd-auth-0.31.tar.gz

パッチを適用し,make する.

$ cd netqmail-1.06
$ patch -p1 < ../qmail-date-localtime.patch
$ cp ../qmaii-smtpd-auth-0.31/* ./
$ patch < ./auth.patch
$ make

qmail-smtpd を auth 用にコピーする

# cp ./qmail-smtpd /var/qmail/bin/qmail-smtpd-auth

[4.2]checklocalpwd のインストール

前年度は認証に cmd5check を用いていたが, 今回は checklocalpwd を用いる. checklocalpwd のソースを落として展開する.

$ $ wget http://www.sourcefiles.org/System/Daemons/POP3/checklocalpwd-1.0.tar.gz 
$ tar zxvf checklocalpwd-1.0.tar.gz
$ cd checklocalpwd-1.0

パスワードファイルの名前を変更する.

$ vim checklocalpwd.c
  #define CONFIG_FILE "/etc/poppasswd" → #define CONFIG_FILE "/etc/smtppasswd"

make する.


# make install

権限を変更する.

# chown root:nofiles /bin/checklocalpwd
# chmod 4710 /bin/checklocalpwd
# chmod 750 /bin/poppasswd_change
# chmod 750 /bin/poppasswd_basic

パスワード自動生成スクリプトを取得する.

# wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2014/dvlop/script/smtppwdbg

取得したパスワード生成スクリプトを /etc/cron.daily 以下に置く.

  # mv smtppwdbg /etc/cron.daily

crontab にsmtppwdbg を追加する.

  # crontab -e

以下の一行を追加する.

50 * * * *   /etc/cron.daily/smtppwdbg

[4.3]qmail のスタートファイルの修正

/etc/init.d/qmail を修正する.

# vim /etc/init.d/qmail

    sh -c "start-stop-daemon --start --quiet --user qmaild \
      --pidfile /var/run/tcpserver_smtps.pid --make-pidfile \
      --exec /usr/local/bin/tcpserver-ssl -- -s -R -H \
      -u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb -n \
      /var/qmail/server.key/cert.pem 0 ssmtp \
      $rblsmtpd /usr/sbin/qmail-smtpd 2>&1 \
      | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &"

      を以下のように書き換える

    sh -c "start-stop-daemon --start --quiet --user qmaild \
       --pidfile /var/run/tcpserver_ssmtpd.pid --make-pidfile \
       --exec /usr/local/bin/tcpserver-ssl -- -s -R -H \
       -u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb \
       -n /var/qmail/server.key/cert.pem 0 ssmtp \
       $rblsmtpd /usr/sbin/qmail-smtpd-auth usuzumi.ep.sci.hokudai.ac.jp /bin/cmd5checkpw /bin/true 2>&1 \
       | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &"

qmail の再起動.設定ファイルの書き方の作法を間違えると,restart 出来なくなるので注意.

# /etc/init.d/qmail restart 

[4.4]動作確認

パスワードファイルを作成する.

# poppasswd_basic /etc/smtppasswd 

パーミッション変更

# chmod 600 /etc/smtppasswd 

パスワードの作成(ここではユーザ hogehoge のパスワードを password とした場合の例を載せる)

# poppasswd_change /etc/smtppasswd hogehoge password

Thunderbird で「ツール」→「smtp の設定」

  サーバ名:usuzumi.ep.sci.hokudai.ac.jp 
  ポート番号:465 
  接続保護:SSL/TLS 
  認証方式:通常のパスワード認証 
  ユーザ名:hogehoge 

自分宛にメールを出してみる. メールを送信する際にパスワードを聞かれるので入力する.




最終更新日:2015/03/30 (多田 直洋) Copyright © 2001-2013 epcore