Ubuntu Linux

Linux/UbuntuにインストールしたOpenSSHのセキュアな設定についての覚え書きです。

 

 

環境

Desktop (Ubuntu 16.04)

Raspberry Pi3 Model B (Raspbian)

OpenSSHのインストール

OpenSSHがインストールされていない場合は公式リポジトリからインストールします。

$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install openssh-server

公開鍵認証の設定

SSHで公開鍵認証を利用するとパスワード方式よりも安全にログインできるので設定します。

SSHで公開鍵認証を利用する方法について下記を参照。

【Linux/Ubuntu】SSH公開鍵認証の設定方法 | 積水成淵日記

OpenSSHの設定

/etc/ssh/sshd_config を編集してOpenSSHの設定を変更します。

# OpenSSHの設定を編集
$ sudo vim /etc/ssh/sshd_config

# ポート番号の変更 (xxxxは適当なポート番号に置き換え)
#Port 22
Port xxxx

# パスワード認証を禁止
#PasswordAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no

# rootユーザのログインを禁止
#PermitRootLogin prohibit-password
PermitRootLogin no

# ログインユーザの制限
AllowUsers hiyoshi

# ログをより詳細に出力
#LogLevel INFO
LogLevel VERBOSE

ポート番号の変更

まず不正ログイン対策として ssh のポート番号をデフォルトの22から適当な値に変更します。

ここや /etc/services を確認して割り当てられていないポート番号を設定します。

パスワード認証の禁止

パスワード認証は公開鍵認証と比較してセキュリティが低いので公開鍵認証による設定を済ませた後 PasswordAuthentication と ChallengeResponseAuthentication を no に設定して禁止します。

ChallengeResponseAuthentication はデフォルトで no に設定されていましたが一応確認しておく。

rootユーザのログインを禁止

一般ユーザでも sudo グループに追加しておけばシステムの変更も可能なので root ユーザのログインを禁止します。

OpenSSH v7.0 から PermitRootLogin がデフォルトで prohibit-password になりパスワードによる root ユーザのログインが禁止されるようになったようですが、とりえあず root でログインするつもりはないので公開鍵認証によるログインも禁止しておきます。

ユーザの制限

AllowUsers でログイン可能なユーザを制限します。

ユーザ名 hiyoshi のところは適宜置き換え。

AllowUsers がホワイトリスト、DenyUsers がブラックリストのように使えます。

ログレベルの変更

ログの詳細度は LogLevel の値によって変更できます。

下記の引用元を参考にしより詳細なログが確認できるよう LogLevel VERBOSE に変更しました。

By default, the OpenSSH server logs to the AUTH facility of syslog, at the INFO level. If you want to record more information – such as failed login attempts – you should increase the logging level to VERBOSE.

設定の再読み込み

設定を再読み込みして変更後の設定を反映させます。

# OpenSSHの再読み込み
$ sudo systemctl reload ssh.service

/etc/services の変更

ポート番号を変更したので /etc/services も編集しておきます。

/etc/services のポート番号を修正しなくても動きますが更新しておくと netstat などでポート番号をプロトコルと置き換えてくれるます。

# ポート番号の書き換え
$ sudo vim /etc/services
#ssh		22/tcp				# SSH Remote Login Protocol
ssh		xxxx/tcp				# SSH Remote Login Protocol

確認

最後に変更した内容の確認です。

ポート番号の指定

ポート番号をデフォルトから変更したので ssh 実行時にポート番号を指定しないと接続が拒否されます。

ssh の pオプションで別途ポート番号を指定すると接続できます。

# ポートを指定せずログイン (接続失敗)
$ ssh hiyoshi@192.168.3.4
ssh: connect to host 192.168.3.4 port 22: Connection refused

# ポートを指定してログイン (接続成功, xxxはポート番号に置き換え)
$ ssh hiyoshi@192.168.3.4 -p xxx
Linux raspberrypi 4.9.79-v7+ #1086 SMP Wed Jan 31 18:03:34 GMT 2018 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Feb  8 15:37:54 2018 from 192.168.3.3

ログの確認

/var/log/auth.log を開きアクセスログを確認してみます。

接続元のIPアドレスや認証失敗のログもきちんと残るので不正ログインを試みてるユーザの有無なども確認できそうです。

不正なポート番号でのアクセス履歴はゲートウェイで弾かれて OpenSSH までたどり着いてないので残っていません。

# 認証成功
$ tail /var/log/auth.log
Feb  9 16:42:21 raspberrypi sshd[2218]: Connection from 192.168.3.3 port 41634 on 192.168.3.4 port xxxx
Feb  9 16:42:21 raspberrypi sshd[2218]: Postponed publickey for hiyoshi from 192.168.3.3 port 41634 ssh2 [preauth]
Feb  9 16:42:21 raspberrypi sshd[2218]: Accepted publickey for hiyoshi from 192.168.3.3 port 41634 ssh2: RSA
Feb  9 16:42:21 raspberrypi sshd[2218]: pam_unix(sshd:session): session opened for user hiyoshi by (uid=0)
Feb  9 16:42:21 raspberrypi systemd-logind[310]: New session c17 of user hiyoshi.
Feb  9 16:42:21 raspberrypi sshd[2218]: User child is on pid 2227
Feb  9 16:42:22 raspberrypi sshd[2227]: Starting session: shell on pts/2 for hiyoshi from 192.168.3.3 port 41634 id 0


# 認証失敗を確認
$ tail /var/log/auth.log
Feb  9 16:47:13 raspberrypi sshd[2252]: Connection from 192.168.3.7 port 45192 on 192.168.3.4 port xxxx
Feb  9 16:47:14 raspberrypi sshd[2252]: error: Received disconnect from 192.168.3.7 port 45192:3: com.jcraft.jsch.JSchException: Auth fail [preauth]
Feb  9 16:47:14 raspberrypi sshd[2252]: Disconnected from 192.168.3.7 port 45192 [preauth]

netstat の確認

netstat を実行して /etc/services で追加したSSHとポート番号の対応が正しく反映されているか確認します。

下の結果ではプロトコルの ssh がポート番号 xxxx と置き換えて表示されているので問題なしです。

# 確立済みの接続をプロトコルで表示
$ netstat | head | grep ssh
tcp        0      0 192.168.3.4:ssh         192.168.3.3:56908       ESTABLISHED

# 確立済みの接続をポート番号で表示
$ netstat -n | head | grep xxxx
tcp        0      0 192.168.3.4:xxxx       192.168.3.3:56908       ESTABLISHED

 

【Linux/Ubuntu】OpenSSHのセキュアな設定
Tagged on:             

コメントを残す