私が普段行っているSSHのセキュリティ対策についてまとめました。
基本編
まずは、比較的簡単にSSHのセキュリティを向上させることが出来る項目ついてまとめています。
対策内容
- セキュリティアップデートの実施
- プロトコルのバージョン指定
- SSHのポート番号変更
- rootユーザでのログイン禁止
- 鍵認証方式への変更
- ログインユーザの制限
- パスワード無しユーザの接続拒否
設定は「/etc/ssh/sshd_config」を編集する形となりますので、vi等のエディタで該当項目を編集していってください。
※鍵認証方式への変更は「sshd_config」以外にも少し設定する箇所があります。
セキュリティアップデートの実施
まずは、sshdで使用されている「openssh」のセキュリティアップデートをきちんと行いましょう。どんなに色々な対策を行っても、SSHの本体に脆弱性があると元も子もないので、ここは忘れずに行ってください。
# yum update openssh
プロトコルのバージョン指定
SSHのプロトコルは大きく分けて、「バージョン1」と「バージョン2」という2種類プロトコルが存在しますが、「バージョン1」の方はセキュリティ的に問題があるため使用しないようにしましょう。
最近のOSは初期設定状態でversion2のみ使用する設定になっていると思いますが、念のため確認して下さい。
プロトコルバージョン設定箇所
「Protocol」の設定箇所に「2」を設定します。
Protocol 2
「Protocol 2,1」といったように設定されている場合は、両方のバージョンが使用できる状態ですので、どうしても「バージョン1」が必要な場合以外は設定変更を行ったほうが良いでしょう。
ちなみに、CentOS7では「#Protocol 2」といったようにコメント設定されていると思いますが、これは初期設定が「Protocol 2」と設定されているということです。
ポート番号の変更
SSHの初期設定では22番ポートを使用していますが、このままだと物凄い数のブルートフォース攻撃(ユーザ・パスワードの総当り攻撃)がやってきます・・・
この攻撃を回避するために、22番ポートから別のポートにSSHの待ち受けポートを変更してしまいましょう。
ポート設定箇所
待ち受けポート番号の変更は「Port」部分に編集を行います。今回はポート番号を10222番に変更した例を記述していますが、他の番号に設定する場合は適宜番号を変更してください。
設定書式
Port [ポート番号]
例えはポート番号を10222番に変更する場合は下記のように記述します。
他の番号に設定する場合は適宜「10222」の番号を変更してください。
Port 10222
ポート番号変更の注意点
「iptables」や「firewalld」等のファイアウォール機能を有効にしている場合や、別のファイアウォール機器がある場合は忘れずにそちらの設定変更も行って下さい。これを忘れるとサーバに接続できなくなってしまいます。
また、以前は覚えやすいので「10022」番とかにポート番号を設定していたのですが、推測され易いのか変更したポートにも攻撃がくるようになってしまいました。ですので、SSHの接続ログである「/var/log/secure」を確認し攻撃がくるようでしたら、適宜ポート番号を変更していきましょう。
ポート変更に関して、もう少し詳しい説明をこちらページにまとめていますので、時間があれば参照してみてください。
rootユーザでのログイン禁止
rootユーザでのログインを許可していると、パスワードが推測されてしまうと一発でサーバを乗っ取られてしまいます。これを防ぐために、rootユーザでSSHでログイン出来ないよう設定を行います。
rootログイン禁止設定箇所
「PermitRootLogin」の箇所に「no」を設定することで、rootユーザがSSHでログイン出来ないようになります。
設定項目
PermitRootLogin no
こちらのページでもう少し詳しく手順をまとめています。
鍵認証方式への変更
ユーザ名・パスワード認証方式では、どうしてもブルートフォース(ユーザ・パスワードの総当り)攻撃にたいして不安が残ります。そこで、鍵認証方式に認証方法を変更することにより、鍵を持っていないクライアントからは接続出来ない非常にセキュアな環境をつくることが出来ます。
この方式は、鍵を持っていないクライアントからはSSHで接続できなくなってしまうというデメリットもありますが、可能であればこちらの方式に変更したほうが安心です。
鍵認証方式設定
こちらの設定方法についての説明は、非常に長くなってしまいますので、
こちらのページを参照願います。
ログインユーザの制限
初期状態ではどのユーザでもSSHでログインできますが、パスワードが簡単に推測できてしまうユーザがいた場合など、第3者にログインを許してしまいます。ですので本当に必要なユーザのみSSHで接続できるようにすることで、よりセキュアな環境となります。
ログインユーザ制限設定箇所
「AllowUsers」という項目を追加するとことで、ログインできるユーザを制限することが出来ます。
AllowUsers ログイン許可ユーザ名
こちらの項目についても説明が長くなってしまうので、詳しい説明はこちらのページ参照願います。
パスワード無しユーザの接続拒否
パスワードが設定されていないユーザがいた場合、ユーザ名が分かっただけでログインできてしまうという最悪の状態になってしまいます。
それを防ぐためには「PermitEmptyPasswords」という項目に「no」という設定を行います。こちらも、最近のOSでは最初から設定されていると思いますが、念のために確認しておきましょう。
PermitEmptyPasswords no
応用編
こちらでは、SSHの設定以外の方法でセキュリティを高める方法を説明していきます。
接続IPの制限
接続するSSHクライアントのIPが固定されているのであれば、「iptables」や「firewalld」などのファイアウォールでそのIPだけ通すように設定しましょう。また「TCP Wrapper」とかでの制限でも良いかもしれません。
※攻撃の多いIPからの接続を遮断でも良いですが、こちらの方法は攻撃してくるIPが非常に多いので手間が掛かりすぎるのが難点です・・・
ブルートフォース攻撃への防御ツール導入
「fail2ban」とか「DenyHosts」を使用します。詳しい内容は後日作成します。
コメント