SSH & SSL設定例

こんにちは、牟田口です。
SSHとSSLの設定はやっているけど、実際の値はどうなんだろう?と思い、設定を再確認しながら対応しました。
参考になれば幸いです。

--- レジュメ

・SSH&SSL対応
・チェックサイト、参考資料、サイト
・その他

------------------------------------------------------------
・チェックサイト、参考資料、サイト
------------------------------------------------------------

--- SSH

▼ SSHサーバセキュリティ設定ガイド V1.0 - 日本シーサート協議会
http://www.nca.gr.jp/imgs/nca_ssh_server_config_v01.pdf
→ (P.6) 3 チェックリストあり
→ (P.22~24) 4.2.8. 弱い暗号方式やメッセージ認証コードを利用しない【オプション】
→→ 確認方法がわかりやすかった。

--- SSLチェックサイト

▼ SSL Server Test (Powered by Qualys SSL Labs)
https://www.ssllabs.com/ssltest/index.html
→ セキュリティ屋のSSL無料チェックサービス
→→ □ Do not show the results on the boards(ボード上の結果を表示しません) にチェック付ければ、サイト公表されない

--- SSL:Apache 等のSSLの設定ジェネレータ (Mozilla)

▼ Generate Mozilla Security Recommended Web Server Configuration Files
https://mozilla.github.io/server-side-tls/ssl-config-generator/
→ Mozillaの Apache 等のSSLの設定ジェネレータサービス
→→ 設定値の参考に。
→→→ Server Version、OpenSSL Version指定できる
→→→ 設定は、Modern(近代的),Intermediate(中間)、Old(古い)から選べる

===================================
・SSH&SSL対応
===================================

------------------------------------------------------------
- OpenSSH
------------------------------------------------------------

--- 対応

// default設定から 以下の弱い暗号化を除外.
// Ciphers→ CBC, RC4(arcfour)を除外
// MACs→ MD5, SHA1, 96bitを除外
// SSHのサーバ(/etc/ssh/sshd_config)、クライアント(/etc/ssh/ssh_config)を対応する

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512

--- OpenSSH default設定はこうなってる

Ciphers
aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,
aes128-gcm@openssh.com,aes256-gcm@openssh.com,
chacha20-poly1305@openssh.com,
aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,
aes256-cbc,arcfour

MACs
hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,
umac-64-etm@openssh.com,umac-128-etm@openssh.com,
hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,
hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,
hmac-md5-96-etm@openssh.com,
hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,
hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,
hmac-sha1-96,hmac-md5-96

 

※引用元 : OpenBSD 5.5 Doucment
http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-5.5/man5/ssh_config.5?query=ssh_config%26sec=5%26manpath=OpenBSD-5%252e5

--- 設定を新規作成

# vi /etc/ssh/ssh_config

// 最下部に追加
// 注意:Ciphers、MACsは複数行記述はダメだった。

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512

# vi /etc/ssh/sshd_config

// 最下部に追加

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512

--- 文法チェック

# sshd -t

# ssh -vv localhost
→ エラーがでなければOK
http://www.nca.gr.jp/imgs/nca_ssh_server_config_v01.pdf
→→ (P.22~24) 4.2.8. 弱い暗号方式やメッセージ認証コードを利用しない【オプション】
→→→ 確認方法がわかりやすかった。

--- sshd再起動

# systemctl restart sshd.service
# systemctl status sshd.service


--- 参考URL

▼ OpenSSHでRC4とMD5を無効にしてみた - Qiita
http://qiita.com/emittam/items/cff927f232c958c2dccf

▼ sshdで弱い暗号方式を使用しないようにする。 - labunix's blog
http://labunix.hateblo.jp/entry/20160228/1456586770

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-ssh-configuration.html#s2-ssh-configuration-configs

Red Hat Enterprise Linux には、全般的な OpenSSH パッケージ (openssh) と共に、OpenSSH サーバー (openssh-server) 及びクライアント (openssh-clients) パッケージが含まれています。
OpenSSH パッケージには、重要暗号化ライブラリをインストールして OpenSSH の暗号化通信を可能にする OpenSSL パッケージ (openssl) が必要な点に注意して下さい。


------------------------------------------------------------
- Apache -> OpenSSL
------------------------------------------------------------

--- 注意

・暗号化を最新のものしか許さない設定にすると、古い携帯など対応していない端末は、表示できなくなる。やりすぎ注意。
→ 外部のSSLチェックサービスで確認できる https://www.ssllabs.com/ssltest/index.html

// default設定から 以下の弱い暗号化を除外。
// Ciphers→ CBC, RC4(arcfour)を除外
// MACs→ MD5, SHA1, 96bitを除外

--- 設定

※ 設定は、ssl.confとバーチャルホスト毎に行う

# vi /etc/httpd/conf.d/ssl.conf

### <VirtualHost _default_:443> の上付近に追記
# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)


#SSLProtocol all -SSLv2 -SSLv3
SSLProtocol all -SSLv3 -TLSv1

#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCipherSuite HIGH:!aNULL:!MD5:!SEED:!IDEA:!RC4:!SHA1:!3DES

#SSLHonorCipherOrder on
SSLHonorCipherOrder on


# vi /etc/httpd/conf/sites/xxxxxxx.co.jp.conf

#SSLProtocol all -SSLv2 -SSLv3
SSLProtocol all -SSLv3 -TLSv1

#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCipherSuite HIGH:!aNULL:!MD5:!SEED:!IDEA:!RC4:!SHA1:!3DES

#SSLHonorCipherOrder on
SSLHonorCipherOrder on

// 補足
SSLHonorCipherOrder on (// SSLダウングレード攻撃を防ぎます。)
SSLCompression off (default=off Available in httpd 2.4.3 and later, if using OpenSSL 0.9.8 or later; virtual host scope available if using OpenSSL 1.0.0 or later。default=offなので設定不要)
SSLSessionTickets off (default=on Available in httpd 2.4.11 and later, if using OpenSSL 0.9.8f or later. httpdのバージョン対応してない)

--- 設定確認 & 再起動

# apachectl configtest
Syntax OK

# systemctl restart httpd
# systemctl status httpd

 


--- 設定例

▼ サーバーが設定しているSSL暗号を確認したい時 - Qiita
http://qiita.com/ionis_h/items/277430a8807ee09c8b46

▼ Generate Mozilla Security Recommended Web Server Configuration Files
https://mozilla.github.io/server-side-tls/ssl-config-generator/

▼ mod_ssl - Apache HTTP Server Version 2.4
https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslciphersuite
→ apache設定の SSLCipherSuite パラメータ説明

--- Modern

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

--- Intermediate

SSLProtocol all -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS

--- Old

SSLProtocol all
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP

--- Qiita記事(http://qiita.com/ionis_h/items/277430a8807ee09c8b46

SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK


--- 設定値確認

# openssl ciphers -v 'HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4:!SHA1:!3DES'

ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(256) Mac=SHA256
ECDH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(256) Mac=SHA384
ECDH-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA384
AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD
AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256
DHE-DSS-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256
DHE-DSS-AES128-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(128) Mac=SHA256
ECDH-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(128) Mac=SHA256
ECDH-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA256
AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD
AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256

左から
・暗号スイートの名前 KRB5-RC4-MD5
・プロトコルのバージョン SSLv3
・鍵交換の方法 Kx=KRB5
・サーバ認証の方法 Au=KRB5
・暗号化の方法 Enc=RC4(128)
・HMAC のハッシュアルゴリズム Mac=MD5

--- 暗号化設定マニュアル

# man ciphers


--- SSL確認方法

▼ サーバーが設定しているSSL暗号を確認したい時 - Qiita
http://qiita.com/ionis_h/items/277430a8807ee09c8b46

入力待ちモードでなくても良いので、/dev/nullを投げています
指定したcipherが使えなかった場合は、「error」や「Cipher is (NONE)」等が出ていると思います
ローカルのopensslに依存するので、ローカルのopensslが使えないcipherは試せないです

# openssl s_client -connect example.com:443 -cipher ECDHE-RSA-AES128-GCM-SHA256 < /dev/null

--- OCSP Stapling確認

▼ Apache 2.4 OCSP Staplingを有効にする ← RootLinks Co., Ltd.
https://www.rootlinks.net/2016/02/07/apache-2-4-ocsp-stapling%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B/

// 入力待ちモードでなくても良いので、/dev/nullを投げています

# openssl s_client -connect localhost:443 -tls1_2 -status < /dev/null | head

--- 参考URL

▼ 私が愛した openssl (SSL/TLS 編) - してみむとて
http://d.hatena.ne.jp/blooper/20120910/1347285980

▼ UNIXの部屋 コマンド検索:openssl (*BSD/Linux)
http://x68000.q-e-d.net/~68user/unix/pickup?openssl

▼ mod_ssl - Apache HTTP Server Version 2.4
https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcompression

▼ SSL_TLS 暗号設定ガイドライン_IPA - C.2.2. OpenSSL 系での暗号スイートの設定例
https://www.ipa.go.jp/files/000045645.pdf