麻姑掻痒 〜まこそうよう〜

かゆいところに手が届く、もうちょっとその先が知りたいに応えたい

openssl0.9.8系OS(CentOS5とか)のdovecotでTLS1.1かTLS1.2に制限する

time 2017/01/27

openssl0.9.8系OS(CentOS5とか)のdovecotでTLS1.1かTLS1.2に制限する

またニッチな技術系ネタを投稿します
案外いると思うのに、なかなか情報が出てこず、私みたいに無駄に時間をかけずに解決できることを願って。

今回は、以下のような事態でした。

「CentOS5.7で、postfix、authdaemond、courier-pop3d(courier-imap)、dracd(pop before smtp)使ってメールサーバ稼働してんだけど、SSLv2とSSLv3どころかTLS1.0もNGにして、TLSv1.1かTLSv1.2でしかPOPを許可しないようにして欲しいんだよね」

…ということで対応。
「そもそも、CentOS5とか使うのやめなされ」というのはとりあえず横に置いておいて。

まず、/usr/local/courier-imap/etc/pop3d-ssl をみたんですが(courier-imapがソースインストールされてます)、

##NAME: TLS_PROTOCOL:0
#
# TLS_PROTOCOL sets the protocol version. The possible versions are:
#
# SSL2 – SSLv2
# SSL3 – SSLv3
# TLS1 – TLS1

TLS_PROTOCOL=SSL3

となっていて、

TLS_PROTOCOL=TLS1.1

とか

TLS_STARTTLS_PROTOCOL=TLS1.1

とか試してみたものの、案の定ダメ…。
まあ、CentOS5.7のopensslが0.9.8なので想像はしてました。
確か、TLSv1.1.とかTLSv.1.2に対応させるには、openssl1.0.X 以上じゃないとダメだったんじゃないかな、と。

で少し調べたんですが、courier-imapの情報があまりないことと、なんとなくモダンな感じでないので、この際、dovecot と saslauthd にしてしまおうと判断。
pop before smtp で送信制限ってのもどうかなぁということもあり。

しかしです。
CentOS5系のパッケージのdovecotを使ってみたところ、こちらも案の定TLSv1.1とTLSv1.2には対応していないっぽい。
まあ、先のopensslが0.9.8系だし、dovecotも1系だしそれはそうなりますね…。

ということで、こんなときは「男は黙ってソースインストール!」です。

実はこのサーバ、opensslについては、openssl-1.0.1t が、/usr/local/ssl にインストールされてます。
つまり、このサーバ、パッケージで最初から入っている openssl-0.9.8系と、後からソースでインストールされた openssl-1.0.1tが共存してます。
dovecotをソースでインストールするにしても、opensslは /usr/local/ssl にインストールされた1.0.1系を指定しないといけません。

念のため openssl-1.0.1tのソースインストールの方法です。

# tar xzf openssl-1.0.1t.tar.gz
# cd openssl-1.0.1t
# ./config –prefix=/usr/local/ssl -fPIC shared
# make
# make install
# echo ‘/usr/local/ssl/lib’ >> /etc/ld.so.conf
# ldconfig

…と、openssl-1.0.1tがインストールされた前提で話をすすめます。

以下から最新のdovecot-2.2.27をダウンロード後、解凍、ディレクトリ移動です。

https://www.dovecot.org/download.html

# wget http://www.dovecot.org/releases/2.2/dovecot-2.2.27.tar.gz
# tar xfz dovecot-2.2.27.tar.gz
# cd dovecot-2.2.27

で、./configureのオプションですが、これが大変でした。結論は以下です。

# env SSL_CFLAGS=”-I/usr/local/ssl/include” SSL_LIBS=”-L/usr/local/ssl/lib -Wl,-R/usr/local/ssl/lib -lcrypto -lssl” ./configure
# make
# make install

SSLを/usr/local/sslで指定したかったのですが、apache等で見られる –with-ssl=/usr/local/ssl が使えません。
実際、指定しても怒られます。
用意しておいて欲しいなぁ…。

かといって、何も指定せず、./configure とかやったら、当然ながら パッケージでインストールされている openssl-0.9.8が参照されるので、./configureもmakeもmake installもできますが、肝心のTLSv1.1とTLSv1.2は指定できません。
指定しても、

TLS handshaking: SSL_accept() failed: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol,

とかいうログが出て、認証できません。

ということで、./configure で上記を指定してあげれば、/usr/local/ssl 以下のopenssl が参照されて、無事、TLSv1.1とかTLSv1.2とか指定できるようになります。

ここから後は、dovecotを稼働させた手順を記載します。
dovecotにしたことでpop before smtpは使わなくなり、送信はsaslauthdでの認証に切り替えたんですが、そこは割愛します。
./configureのオプションは上記以外も色々と調べたのですが、正直、普通のことは自動的にどうにかしてくれるっぽいので、余計なオプションつける必要ないだろうということで他は何も指定せずスルッとインストール。
(デフォルトであっても明示的に指定するというのも意味はあると思いますが、まあ指定しなくてもいいんじゃないかと)
–sysconfdir=/etcを指定するとrpm(yum)でインストールした時と同じように/etc/dovecotでインストールされるんですが、「ソースでインストールした時はそれがわかるように/usr/local/以下にしとけ」という師匠の言葉に従ってあえて指定せず、/usr/local/以下にインストールしました。

# tar xvfz dovecot-2.2.27.tar.gz
# env SSL_CFLAGS=”-I/usr/local/ssl/include” SSL_LIBS=”-L/usr/local/ssl/lib -Wl,-R/usr/local/ssl/lib -lcrypto -lssl” ./configure
# make
# make install

いろいろ調べた結果 dovecot ユーザは作らなないといけないようなので、以下でユーザを作成。

# groupadd -g 97 dovecot
# groupadd -g 497 dovenull
# useradd -u 97 -g 97 -s /sbin/nologin -d /usr/local/libexec/dovecot dovecot
# useradd -u 498 -g 497 -s /sbin/nologin -d /usr/local/libexec/dovecot dovenull

で以下のような感じで設定ファイルを設置して諸々設定。

# cp /usr/local/share/doc/dovecot/example-config/dovecot.conf /usr/local/etc/dovecot/
# cp /usr/local/share/doc/dovecot/example-config/conf.d /usr/local/etc/dovecot/

# sed -i -e ‘s/#listen = \*, ::/listen = \*/g’ /usr/local/etc/dovecot/dovecot.conf

# sed -i -e ‘s/^#ssl = yes/ssl = required/g’ /usr/local/etc/dovecot/conf.d/10-ssl.conf
# sed -i -e ‘s/\/etc\/ssl\/certs\/dovecot.pem/\/usr\/local\/etc\/dovecot\/ssl\/hogehoge.crt/g’ /usr/local/etc/dovecot/conf.d/10-ssl.conf
# sed -i -e ‘s/\/etc\/ssl\/private\/dovecot.pem/\/usr\/local\/etc\/dovecot\/ssl\/hogehoge.key/g’ /usr/local/etc/dovecot/conf.d/10- ssl.conf
# sed -i -e ‘s/#ssl_ca =/ssl_ca = <\/usr\/local\/etc\/dovecot\/ssl\/hogehoge.ca/g’ /usr/local/etc/dovecot/conf.d/10-ssl.conf
# sed -i -e ‘s/#ssl_protocols = !SSLv3/ssl_protocols = !SSLv2 !SSLv3 !TLSv1/g’ /usr/local/etc/dovecot/conf.d/10-ssl.conf

# sed -i -e ‘s/#disable_plaintext_auth = yes/disable_plaintext_auth = no/g’ /usr/local/etc/dovecot/conf.d/10-auth.conf
# sed -i -e ‘s/auth_mechanisms = plain/auth_mechanisms = plain login/g’ /usr/local/etc/dovecot/conf.d/10-auth.conf

# sed -i -e ‘s/#mail_location =/mail_location = maildir:~\/Maildir/g’ /usr/local/etc/dovecot/conf.d/10-mail.conf
# sed -i -e ‘s/#valid_chroot_dirs =/valid_chroot_dirs = \/home/g’ /usr/local/etc/dovecot/conf.d/10-mail.conf

 

/etc/pam.d/dovecot

 

/etc/rc.d/init.d/dovecot

# chmod 755 /etc/rc.d/init.d/dovecot
# /sbin/service dovecot start

TLSv1.1とTLSv1.2に制限できました。

 

./configureのオプション指定が上手くいかず、途中、make時に、以下とか

collect2: ld returned 1 exit status
make[3]: *** [test-http-client] Error 1
make[3]: Leaving directory ‘/usr/local/src/dovecot-2.2.27/src/lib-http’
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory ‘/usr/local/src/dovecot-2.2.27/src’
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory ‘/usr/local/src/dovecot-2.2.27’
make: *** [all] Error 2

以下とか

sha1.h:80: error: static or type qualifiers in abstract declarator
make[4]: *** [guid.lo] Error 1
make[4]: Leaving directory ‘/usr/local/src/dovecot-2.2.25/src/lib’
make[3]: *** [all] Error 2
make[3]: Leaving directory ‘/usr/local/src/dovecot-2.2.25/src/lib’
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory ‘/usr/local/src/dovecot-2.2.25/src’
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory ‘/usr/local/src/dovecot-2.2.25’
make: *** [all] Error 2

以下のエラーが出て大変でした。

make[3]: *** [iostream-openssl-context.lo] Error 1
make[3]: Leaving directory ‘/usr/local/src/dovecot-2.2.27/src/lib-ssl-iostream’
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory ‘/usr/local/src/dovecot-2.2.27/src’
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory ‘/usr/local/src/dovecot-2.2.27’
make: *** [all] Error 2

 

どなたかの役に立てば幸いです。



sponsored link

コメント

down

コメントする






sponsored link