.. _good_practice_howtousepasswd: ============================================================== sshd_configを用いて,アクセス元IPに応じた認証方式を設定する方法 ============================================================== .. contents:: 目次 :local: :depth: 2 対象読者 ======== 本ドキュメントは,学内の Web サーバ管理者を対象とする. 概要 ==== 本ドキュメントの目的 -------------------- SSHサーバーの運用にあたり,パスワード認証を有効にした状態でインターネットに公開することは脆弱であり,また無用な攻撃・探索行動を誘発する可能性がある. 一般的には,SSHのパスワード認証は無効にし,公開鍵認証のみを許可することが推奨される.しかし,特定のIPアドレスからのアクセスに限り,パスワード認証を許可したい場合もある. 本ドキュメントでは,OpenSSHの設定ファイルであるsshd_configを用いて,アクセス元IPアドレスに応じてSSHのパスワード認証を制御する方法を示す. .. caution:: 本項目で記載する設定はパスワード認証に限ったのものであり,セキュリティ要件に応じて追加の設定が必要となる. 検証環境 -------- 以下の環境で動作を確認した. .. code-block:: console testuser@testbench.cc.uec.ac.jp:~$ uname -a Linux testbench.cc.uec.ac.jp 6.8.0-94-generic #96-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 9 20:36:55 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux testuser@testbench.cc.uec.ac.jp:~$ cat /etc/os-release PRETTY_NAME="Ubuntu 24.04.3 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04.3 LTS (Noble Numbat)" VERSION_CODENAME=noble ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=noble LOGO=ubuntu-logo testuser@testbench.cc.uec.ac.jp:~$ apt list openssh-server Listing... Done openssh-server/noble-updates,now 1:9.6p1-3ubuntu13.14 amd64 [installed] sshd_config での設定方法 ==================== 設定の全体像 ------------ sshd_config では, ``Match`` ブロックを用いて,学内からのアクセスに対してパスワード認証を許可し,それ以外ではパスワード認証を無効・鍵認証のみとする設定を行う. 本ドキュメントでは,学内IPアドレスを以下の2レンジとして説明する. - 130.153.0.0/16 - 172.16.0.0/12 .. note:: 実際の運用環境に応じて,許可するIPアドレスレンジを適宜変更すること.大学で利用される最新のIPアドレスレンジは次を参照すること. `学内ネットワーク情報 `_ 設定手順 -------- **ステップ 1: OpenSSHサーバーをインストールする** OpenSSHサーバーがインストールされていない場合,以下のコマンドでインストールする. .. code-block:: apache sudo apt update sudo apt install openssh-server **ステップ 2: sshd_configの編集** 設定ファイル ``/etc/ssh/sshd_config`` を編集し,公開鍵のみを許可するデフォルト設定と,特定IPアドレスからのパスワード認証を許可する ``Match`` ブロックを追加する. .. caution:: 本設定を適用する前に,SSH接続が可能な別の手段(例:公開鍵認証)が確立されていることを確認すること.誤った設定により,SSH接続が不可能になるリスクがある. 変更後のdiffは次にしめす. ``sshd_config.original`` が変更前, ``sshd_config`` が変更後のファイルである. - 42行目:rootユーザのログインを明示的に禁止 - 47行目:公開鍵認証を明示的に有効 - 66行目:パスワード認証をデフォルト無効 - 67行目:空パスワードによる認証試行を禁止 - 133行目:特定IPアドレスからのアクセスに対してパスワード認証を許可する ``Match`` ブロックを追加.Addressディレクティブで学内IPレンジを指定 - 134行目:Addressディレクティブで指定されたIPアドレスからのアクセスに対して,パスワード認証を有効化 - 137行目: ``Match All`` で ``Match`` ブロックを終了 .. code-block:: bash root@testbench.cc.uec.ac.jp:~# diff /etc/ssh/sshd_config /etc/ssh/sshd_config.original 42c42 < PermitRootLogin no --- > #PermitRootLogin prohibit-password 47c47 < PubkeyAuthentication yes --- > #PubkeyAuthentication yes 66,67c66,67 < PasswordAuthentication no < PermitEmptyPasswords no --- > #PasswordAuthentication yes > #PermitEmptyPasswords no 132,136d131 < < Match Address 130.153.0.0/16,172.21.0.0/16 < PasswordAuthentication yes < < Match All **ステップ 3: sshdサービスの再起動** sshdサービスを再起動し,設定を反映させる. .. caution:: 重要な手順: 再起動後,学内IPアドレスからのSSH接続でパスワード認証が可能であること,学外IPアドレスからの接続ではパスワード認証が拒否されることを確認すること. .. note:: 推奨する手順: 別のターミナルを立ち上げて,SSH接続を確立しておくこと.または,コンソールが掴める状態で作業を行うこと. .. code-block:: bash sudo sshd -t sudo systemctl restart sshd **ステップ 6: 動作確認** 学内(UECWireless等)からSSH接続を試み,パスワード認証が成功することを確認する.また学外(Wi2・テザリング等)からSSH接続を試み,パスワード認証が拒否されることを確認する. 下記の例では,学外からのパスワード認証試行が拒否される様子を示す. .. code-block:: bash [testuser@gakugai ~]$ ssh -o PreferredAuthentications=password testbench.cc.uec.ac.jp Permission denied (publickey). [testuser@gakugai ~]$ 参考 ======== * `sshd_configで接続元によって認証方法を変更するための設定 `_ * `SSHのMatchディレクティブによる設定 `_ * `sshで強制的にパスワードログインを実行させる `_