■sshdで弱い暗号方式を使用しないようにする。 以下がとてもわかりやすい。 SSHサーバセキュリティ設定ガイド http://www.nca.gr.jp/imgs/nca_ssh_server_config_v01.pdf ただ、「弱い暗号方式やメッセージ認証コードを利用しない【オプション】」が、 若干分かりにくかったのと、CBCだけでなく、 RC4やMD5、SHA-1の無効を追加したかったので、やってみた。 ■今回テストしたバージョンは以下のとおり。 $ lsb_release -d Description: Debian GNU/Linux 8.3 (jessie) $ ssh -V OpenSSH_6.7p1 Debian-5+deb8u1, OpenSSL 1.0.1k 8 Jan 2015 $ sudo sshd -v 2>&1 | awk '/Open/' OpenSSH_6.7p1 Debian-5+deb8u1, OpenSSL 1.0.1k 8 Jan 2015 ■デフォルト設定で、sshクライアントがサポートする 3つの暗号方式の種類を区別せずに一覧にすると 以下のようになる。 ※クライアントである点に注意。 $ echo $(ssh -Q cipher;ssh -Q mac;ssh -Q kex) | sed -e 's/ /\n/g' | awk '/cbc/' 3des-cbc blowfish-cbc cast128-cbc aes128-cbc aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se ■CBCとRC4(またはarcfour)を除いたCiphersを設定したい場合。 SSHクライアントの条件として下記暗号方式を サポートしていることを確認するようなクセを付ければ良い。 $ ssh -Q cipher | \ awk 'BEGIN{printf "Ciphers "};(!/cbc/&&!/rc4/&&!/arcfour/){printf "%s,",$0};END{printf "\n"}' | \ sed -e 's/,$//g' Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com ■CBCとRC4(またはarcfour)、MD5とSHA1を除いたMACsを設定したい場合。 $ ssh -Q mac | \ awk 'BEGIN{printf "MACs "};(!/cbc/ && !/md/ && !/sha1/ && !/rc4/ && !/arcfour/){printf "%s,",$0};END{printf "\n"}' | \ sed -e 's/,$//g' MACs hmac-sha2-256,hmac-sha2-512,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com ■設定変更前に実際どれを使ってログインしているか確認する。 条件に一致したコマンドしか見えないようにするので、 「exit」コマンド入力時に表示されない点に注意。 $ ssh -vv localhost 2>&1 | awk '(/kex/ && (/server/ || /client/))' debug1: kex: server->client aes128-ctr hmac-sha2-256 none debug1: kex: client->server aes128-ctr hmac-sha2-256 none ■CBCだけでなく、RC4やMD5、SHA-1をsshクライアントが使っていないだけでなく、 sshクライアントが使用している暗号方式をサポートしたリストであることが分かる。 $ ssh -Q cipher | grep "aes128-ctr$"; \ ssh -Q mac | grep "hmac-sha2-256$" aes128-ctr hmac-sha2-256 ■例えば、putty0.59のように、 Cipherの「aes128-ctr」はサポートしているけど、 MACsの「hmac-sha2-256」はサポートしていないような 古いsshクライアントは使えません。 sshクライアント情報を確認出来るパケットキャプチャ環境を構築してみる。 http://labunix.hateblo.jp/?page=1456586770 $ sudo tshark -V -r ssh_20160228_004907.pcap -n -nn \ -d "tcp.port==22,ssh" -Y "ssh.protocol" 2>/dev/null | \ grep --color -A 30 "0.59" | \ grep "client_to_server string" | \ sed -e 's/.*: //g' -e 's/,/\n/g' | \ grep "ctr\|sha" aes256-ctr aes192-ctr aes128-ctr blowfish-ctr 3des-ctr hmac-sha1 hmac-sha1-96 ■設定したら、問題ないかテストできる。 エラーがある場合のみエラー内容が表示される。 $ sudo ssh -t ■sshdサービスの再起動 $ sudo service ssh status | awk '/Main PID/'; \ sudo service ssh restart; \ sudo service ssh status | awk '/Main PID/' Main PID: 11975 (sshd) Main PID: 12030 (sshd) ■sshdサービス再起動後も問題なくログイン出来ることを 忘れずに確認しましょう。 $ ssh -vv localhost 2>&1 | awk '(/kex/ && (/server/ || /client/))' debug1: kex: server->client aes128-ctr hmac-sha2-256 none debug1: kex: client->server aes128-ctr hmac-sha2-256 none