sshd_configを用いて,アクセス元IPに応じた認証方式を設定する方法
対象読者
本ドキュメントは,学内の Web サーバ管理者を対象とする.
概要
本ドキュメントの目的
SSHサーバーの運用にあたり,パスワード認証を有効にした状態でインターネットに公開することは脆弱であり,また無用な攻撃・探索行動を誘発する可能性がある. 一般的には,SSHのパスワード認証は無効にし,公開鍵認証のみを許可することが推奨される.しかし,特定のIPアドレスからのアクセスに限り,パスワード認証を許可したい場合もある. 本ドキュメントでは,OpenSSHの設定ファイルであるsshd_configを用いて,アクセス元IPアドレスに応じてSSHのパスワード認証を制御する方法を示す.
Caution
本項目で記載する設定はパスワード認証に限ったのものであり,セキュリティ要件に応じて追加の設定が必要となる.
検証環境
以下の環境で動作を確認した.
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サーバーがインストールされていない場合,以下のコマンドでインストールする.
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ブロックを終了
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接続を確立しておくこと.または,コンソールが掴める状態で作業を行うこと.
sudo sshd -t
sudo systemctl restart sshd
ステップ 6: 動作確認
学内(UECWireless等)からSSH接続を試み,パスワード認証が成功することを確認する.また学外(Wi2・テザリング等)からSSH接続を試み,パスワード認証が拒否されることを確認する. 下記の例では,学外からのパスワード認証試行が拒否される様子を示す.
[testuser@gakugai ~]$ ssh -o PreferredAuthentications=password testbench.cc.uec.ac.jp
Permission denied (publickey).
[testuser@gakugai ~]$