LoginSignup
4
3

More than 3 years have passed since last update.

SSH接続時にアクセス元に応じてメッセージを表示する

Last updated at Posted at 2020-04-10

やりたいこと

リモートワークを推進する裏で、SSHのアクセスコントロールをちゃんとしたい。
例えば、本番環境で稼働しているサーバは踏み台を必ず経由したいときなど、あると思います。
SSHポートをiptablesで落とすだけでも良いのですが、その場合なぜユーザがログインできなかったのかの切り分けがやりにくく、開発者が混乱する可能性があると考えました。

そのため、以下の要件を満たせないか考えました。

要件
1. ユーザの接続元とユーザに応じてアクセスをコントロールしたい
   * 172.168.10.0/24からのアクセス かつ sshd_userというユーザのアクセスは拒否したい
   * それ以外のSSHアクセスは通す
2. アクセスしてきたユーザに対して、なぜログインできないのかを明示したい

環境

sshd serverはインストール済みで稼働しているものとします。
今回使用したOpenSSH ServerのバージョンはOpenSSH_8.1p1になります。

設定内容

ユーザの接続元とユーザに応じたアクセスコントロール

こちらはよくある設定ですね。
今回は、以下のユーザからのアクセスを制限したいと思います。

  • IPアドレス172.168.10.0/24からのアクセスである
  • 制限対象のユーザ名は sshd_user とします

接続先サーバのsshd_configに以下のような設定を入れてみましょう。

/etc/ssh/sshd_config
Match Address 172.168.10.* User sshd_user
    PasswordAuthentication no
    PubkeyAuthentication no

こうすると、SSHのコネクションは貼れますが、認証方式が無いため結果としてログインできません。
でも、これだけならDenyUsers構文だけでも十分です。
では、今回やりたかったことを実現してみましょう。

ログインできない理由を表示する

以下のサイトに記載されていた情報を参考にしました。
manページ — SSHD_CONFIG
sshd_configの設定項目の理解を目指す

以下のような記載があります。

Banner (バナー)
司法管区によっては、法的な保護を受けるためには 認証の前に警告メッセージを送ったほうがよい場合があります。 
ここで指定されたファイルの内容は、認証が許可される前に リモートユーザに提示されます。 
このオプションは プロトコル バージョン 2 でのみサポートされています。
デフォルトでは、バナーは表示されません

となっていますので、早速バナーを設定してみましょう。

設定
$ cat << EOF | sudo tee /etc/ssh/banner.txt
********************************************************
*YOU CAN NOT LOGIN TO THIS SERVER FROM YOUR IP ADDRESS.*
********************************************************
EOF

$ sudo chmod 644 /etc/ssh/banner.txt

### 先程の設定を編集しましょう。
$ sudo vim /etc/ssh/sshd_config

Match Address 172.168.10.* User sshd_user
    Banner /etc/ssh/banner.txt
    PasswordAuthentication no
    PubkeyAuthentication no

$ sudo systemctl restart sshd.service

この状態で接続すると以下のように表示されます。

% ssh <上記のSSHの設定したサーバ>
********************************************************
*YOU CAN NOT LOGIN TO THIS SERVER FROM YOUR IP ADDRESS.*
********************************************************
sshd_user@<上記のSSHの設定したサーバ>'s password:
Received disconnect from 上記のSSHの設定したサーバ> port 22:2: Too many authentication failures
Disconnected from 上記のSSHの設定したサーバ> port 22

というわけで、要件は満たせました。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3