ssl 導入


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

[1]準備

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

この作業は再構築後にusuzumi からgrey に変更されるために, もう一度証明書を作り直す.また,qmail の起動スクリプトに usuzumi と書かれているため,それもgrey に修正する.

しかし,pop/smtp はtcpserver で起動するが, ucspi-tcp パッケージのデフォルトの 状態ではSSL の機能を実装できない. そこで今回はソースにパッチを当てることで 実装する.

最終的に必要な作業は以下のとおりである.

[1.1]証明書の発行

証明書の発行のために必要なパッケージをインストールする.

# apt-get install openssl ca-certificates ssl-cert

証明書を発行.

# 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]:<=[JPと入力]
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, Hokkaido Universityと入力]
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 = JP
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
....

このまま証明書を用いるとサービスを起動する度にパスワードを聞かれるので パスフレーズを消去する.

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

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

libssl-dev をインストール

  # apt-get install libssl-dev

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]qmail スタートスクリプトの修正

作成した秘密鍵と証明書を結合し, 適切に配置/パーミッションを設定

# mkdir /var/lib/qmail/server.key
# cat /etc/ssl/demoCA/private/cakey.pem /etc/ssl/demoCA/cacert.pem > /var/lib/qmail/server.key/cakey.pem
# chmod 700 /var/lib/qmail/server.key/
# chmod 600 /var/lib/qmail/server.key/cakey.pem

起動スクリプトへの書き込み

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

stop)
         .
         .
         .
# For POP over SSL
start-stop-daemon --user root --stop --quiet --oknodo \
--pidfile /var/run/tcpserver_pop3s.pid --exec /usr/local/bin/tcpserver-ssl

qmail の再起動と確認

# qmailctl stop
# qmailctl start
  # 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

[2.2]動作確認

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

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

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

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

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

[3]imap over sslの設定

[3.1] 設定ファイルの編集

/etc/dovecot/conf.d/ 以下のファイル を編集

  # cd /etc/dovecot/conf.d/
  # emacs 10-master.conf
	port = 993
	ssl = yes
  # emacs 10-ssl.conf
	ssl = yes
	ssl_cert = </etc/ssl/demoCA/cacert.pem
	ssl_key = </etc/ssl/demoCA/private/cakey.pem

dovecot を再起動する.

  # service 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 で「ツール」→「アカウント設定」→「アカウント操作」→「メールアカウントを追加」 この際, dovecotpwdbg がcronで動いていると/etc/dovecot.cram-md5 の中身が書き換わってしまうので,MD5 認証データベースファイルの作成を 参考にMD5形式のパスワードを作成しなおす.

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

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

  受信サーバ: IMAP
  SSL: SSL/TLS
  認証方式: 暗号化されたパスワード認証

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

[4]smtp over ssl の設定

smtp over ssl を利用するとSMTP 通信の際のパスワードのやりとりが暗号化できる. 以下ではその設定について述べる.

[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.ckdhr.com/ckd/qmail-103.patch
$ wget http://www.asahi-net.or.jp/~aa4t-nngk/codes/qmail-date-localtime.patch
$ wget http://www.qmail.org/qmail-smtpd-relay-reject
$ wget http://tomclegg.net/qmail/qmail-smtpd-auth-0.31.tar.gz
$ tar zxvf qmail-smtpd-auth-0.31.tar.gz

パッチを適用し,make する. 途中でファイルの中の"/var/qmail" を"/var/lib/qmail" に 置換しておく.

$ cd netqmail-1.06
$ patch -p1 < ../qmail-103.patch
$ patch -p1 < ../qmail-date-localtime.patch
$ patch -p1 < ../qmail-smtpd-relay-reject
$ cp ../qmaii-smtpd-auth-0.31/* ./
$ patch < ./auth.patch
$ sed -i -e "s/\/var\/qmail/\/var\/lib\/qmail/g" ./*
$ 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

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

$ emacs 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/y2015/dvlop/script/smtppwdbg

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

  # mv smtppwdbg /etc/cron.daily
  # chmod 755 /etc/cron.daily/smtppwdbg

crontab にsmtppwdbg を追加する.

  # crontab -e

以下の一行を追加する.

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

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

/var/lib/qmail/bin/qmailctl に追記.

# emacs /var/lib/qmail/bin/qmailctl
	start)
	....
	# For SMTP over SSL
	sh -c "/sbin/start-stop-daemon --start --quiet --user qmaild \
        --pidfile /var/run/tcpserver_ssmtp.pid --make-pidfile \
        --exec /usr/local/bin/tcpserver-ssl -- -s -HRv \
        -u `id -u qmaild` -g `id -g nobody` -x /etc/qmail/tcp.smtp.cdb \
        -n /var/lib/qmail/server.key/cakey.pem 0 ssmtp \
        /var/lib/qmail/bin/qmail-smtpd-auth usuzumi.ep.sci.hokudai.ac.jp \
        /bin/checklocalpwd /bin/true 2>&1 \
        | /var/lib/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &"
	....
	stop)
        ....
	# For SMTP over SSL
	/sbin/start-stop-daemon --user qmaild --stop --quiet --oknodo \
	--pidfile /var/run/tcpserver_ssmtp.pid --exec \
	/usr/local/bin/tcpserver-ssl

qmail の再起動.

# qmailctl stop 
# qmailctl start 

[4.4]動作確認

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

# poppasswd_basic > /etc/smtppasswd 

パーミッション変更

# chmod 600 /etc/smtppasswd 

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

# poppasswd_change /etc/smtppasswd mondo4 password

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

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

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




最終更新日:2015/12/03 (三上 峻) Copyright © 2000-2015 epcore