リモート接続のセキュリティ対策

# SSH、リモートデスクトップのセキュリティ対策とは

SSHはLinuxサーバーで、リモートデスクトップはWindowsサーバーでよく使われるリモート接続方法です。
どちらもとても便利ですが、簡単に利用できる反面、気をつけて使わないとセキュリティ上の問題が発生することもあります。それではさっそく最低限実施していただきたい対策について見ていきたいと思います。

***SSHを利用する際に最低限しておきたい対策***
それではまずSSHのセキュリティ対策を考えてみます。
なおSSHの設定ファイルは、一般的に/etc/ssh/の下に置かれていることを前提にしています。

###### 1. rootアカウントでの接続を禁止する

SSHはLinuxサーバーでよく使われていると思います。Linuxでは最上位権限を持つユーザーはrootで、これはWindowsにおけるAdministratorと同じく誰もが知るアカウント名です。したがってサイバー攻撃者がまず試みることの1つは、rootでSSH接続することです。それができればそのサーバーで何でもできるようになるからです。

ですので、SSHで直接rootアカウントに接続できないようにすることは必須です。
具体的には、/etc/ssh/の下にあるsshd_configというファイルの内容を以下のように変更します。

:::note info
#PermitRootLogin yes		←コメントアウト
PermitRootLogin no		←rootログインを禁止
:::

ssh_configの変更を反映するためには、SSHサービスの再起動が必要です。ただし再起動をしても、接続中のSSHコネクションは影響を受けないので、設定ミスに気がつかないことがあります。念のため別のコネクションを使って接続テストをしておくことをお勧めします。

###### 2. 接続できるアカウントを必要最小限にする

1.では、rootアカウントで接続できないようにしましたが、それとは逆に接続できるアカウントを指定することもできます。そうすることでサーバーのデフォルトアカウントやソフトウェアをインストールしたときに勝手に作成されてしまうアカウントから接続されるリスクをなくすことができます。

sshd_configにAllowUsersという項目を追加することで、接続を許可するユーザーを指定することができます。



| 指定内容| 構文| 
|:-----------|:------------:|
| 接続を許可するユーザー | AllowUsers ユーザー名 |
| 接続を許可するユーザー（複数） | AllowUsers ユーザー名1 ユーザー名2 …… | 

###### 3. 続元端末を制限する

SSHはデフォルトでは、世界中のどの端末からでも接続できるようになっていますが、それはセキュリティ上非常に危険なことです。接続できる端末を制限することでリスクを軽減できます。

設定方法は、(2)と同じくsshd_configのAllowUsersを使います。※
接続元のIPアドレスを指定することで端末制限が可能です。


| 指定内容| 構文| 
|:-----------|:------------:|
| 接続を許可するユーザー | AllowUsers ユーザー名＠接続元IPアドレス |
| 接続を許可するユーザー（複数） | AllowUsers ユーザー名1＠接続元IPアドレス1 ユーザー名2＠接続元IPアドレス2 …… | 
| 接続を許可する端末（全ユーザー） | AllowUsers *＠接続元IPアドレス |

※sshd_configでの接続元制限は、認証を拒否する機能であって、SSHへのアクセス自体を遮断することは出来ません。SSHサービスの存在自体を隠したい場合はLinuxならiptablesやfirewalld、ufwといったパケットフィルターで制限をかけることをおすすめします。

###### 4. 公開鍵認証方式を設定する

SSHではデフォルトでパスワード認証が使われますが、以下のリスクがあるのでお勧めできません。より強固な公開鍵認証方式にすることを推奨します。

・推測されやすいパスワードが設定されがち
・パスワードの使いまわしする傾向がある
・ブルートフォースアタックや辞書攻撃で暴かれる可能性がある

▼[SSH公開鍵認証についてはこちら](https://pfs.nifcloud.com/navi/words/ssh.htm)


▼[SSHで公開鍵認証接続する方法はこちら](https://qiita.com/soma_sekimoto/items/35845495bc565c38ae9d)


公開鍵認証方式では秘密鍵にパスフレーズが設定できます。パスフレーズを設定しない人もいますが、秘密鍵が漏えいすると誰でも接続できるようになるのでお勧めできません。パスフレーズはできる限りサーバーごとに設定しましょう。

▼[パスフレーズの設定方法はこちら（秘密鍵、公開鍵の作り方も掲載されています）
]( https://qiita.com/soma_sekimoto/items/35845495bc565c38ae9d)


###### 5. ポート番号をデフォルトのまま使わない

その他に、「基本的なお作法」として、「ポート番号をデフォルトのままで使わない」というものがあります。これはポートスキャン（すべてのポートにアクセスして、それぞれのレスポンスを調べること。そのようなことができるツールも出回っています）をされてしまうと、どのポートが何に使われているかをだいたい察知することができます。したがって、実はそれほど有効なセキュリティ対策ではありません。

しかし、ポートスキャンされた（ている）痕跡を検知し、防御することも可能なため、ウェルノウンポート（ポートとサービスの組み合わせを予め定義したポート。0 番から1023番が使用される）だけポートスキャンしてして去っていく攻撃者もいます。何よりもウェルノウンポートをそのままにしておくのはあまりに迂闊であり、それだけでも攻撃者の標的になりやすいので、変更することを推奨します。

▼[ウェルノウンポートの一覧はこちら]( https://www.infraexpert.com/study/tea5.htm
)


***SSHで接続元制限をしつつも外出先などからSSH接続をしたい場合***



SSHのセキュリティ対策の3番目として接続元を制限する方法を述べました。しかしながらIPアドレスを指定する方式なので、外出先からSSH接続したい場合には不便です。そこで外出先から自由に接続したい場合には「踏み台サーバー」を用意して、そこからSSH接続できるようにしておくとよいでしょう。

下図に踏み台サーバーを用いたSSH接続のイメージを示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/1e91c8e0-1a4c-47fe-8252-22dcab61eceb.png)





 
攻撃者に踏み台サーバーの存在を知られ、そちらに接続されてしまえばお手上げですが、そうならない限りは接続できないので、セキュリティリスクをかなり低減できます。

# リモートデスクトップのセキュリティ対策

続いてリモートデスクトップのセキュリティ対策を見ていきましょう。こちらもSSHと同じく、必ず実施していただきたいことをまず挙げます。

***リモートデスクトップを利用する際に最低限しておきたい対策***

###### 1. デフォルトのAdministratorを無効にする

Linuxであればrootアカウントでログインしなくても、一般ユーザーでsuコマンドを使用することで特権が必要なコマンド等も使うことができます。Windowsにはそのような機能がないので、リモートデスクトップサーバー上では、Administrator権限を持つ別のユーザーを作成し、Administratorは無効にしてしまうことを推奨します。

あるいはSSHのセキュリティ対策で紹介した踏み台サーバーを用意して、そこからリモートデスクトップサーバーにAdministratorでログインする手もあります。

###### 2. リモート接続を許可するユーザーを制限する

リモートデスクトップに接続できるユーザーを制限することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/756ca168-d86b-4093-90b7-68615e9139ab.png)


 
設定画面に「ネットワークレベル認証」（NLA）という用語があります。これはリモートデスクトップの接続元（クライアント）と接続先（サーバー）の接続前に資格情報の確認をする方式のことです。これは社内利用や信頼されたネットワーク間での利用を想定しており、インターネットを介したリモート接続ではあまり利用できません。したがってネットワークレベル認証はオフにしておくケースが多いと思います。

###### 3. 接続元端末を制限する

リモートデスクトップ自体にはこの機能がありません。したがってWindows Firewallをはじめとする、ネットワークポリシー制御が可能なツールあるいは機器で設定することになります。

例えばパブリッククラウドに接続先サーバーがある場合には、クラウドサービスが用意しているファイアーウォールを使って制限するのが一般的です。

***SSHポートフォワードを利用してリモートデスクトップに接続する***

SSHは、SSHポートフォワードという機能があります。このポートフォワードをうまく活用すれば以下の2点により安全性が高まります。

・	リモートデスクトップをインターネットに公開しないで済む
・	（前述した）SSHの持つセキュリティ設定を利用できる

Linuxサーバーを踏み台にするのが素直な方法ですが、そのためだけにLinuxサーバーを用意したくないという管理者もいることでしょう。そこでWindows Serverを利用して実現する方法を紹介します（ただしWindows Server 2019以降を想定しています）。

▼[Linux踏み台を使わずにWindowsインスタンスへのリモートデスクトップ接続をSSHトンネル化する](https://dev.classmethod.jp/articles/rdp-over-ssh-without-linux-bastion/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/49d29af1-8553-4251-b00e-cd83767a4da8.png)



 　


# インターネットにポート開放せずにリモート接続する方法

　サーバー上のサービス（アプリケーション）をリモートで利用する際には、IPアドレス＋ポート番号でそのサービスを特定する仕組みになっています。ポート開放とは、外部のサーバーや端末から接続先サーバーのポートが見える(接続できる)ことを意味します。

　ポートが開放されていても、その先にサービスがなければ大きな問題はありませんが、サービスが稼働している場合に、そのサービスにセキュリティ上の脆弱性があると、情報が漏えいしたり、サーバーを自由に操作されたりすることがあります。

　そこで中継サーバーや中継ルーターなどの中継機を用意して、接続先サーバーから中継機に接続することで「トンネル」を作り、それによって接続先サーバーのポートを開放せずにリモート接続サービスを実現する方法が踏み台という考え方になります。

 　
[KUROKO Connect](https://connect.kuroko.cloud/)はこの方式をさらにセキュリティを高めて実現しているサービスになります。