金子邦彦研究室インストールUbuntu サーバ,リモート接続SSH サーバのインストール,設定(Ubuntu 上)

SSH サーバのインストール,設定(Ubuntu 上)

要約】 Ubuntu上のSSHサーバの設定と公開鍵の設定は,セキュアなリモート接続を実現する手段である.SSHサーバの設定ファイル(/etc/ssh/sshd_config)を編集し,rootログインや空パスワードの抑止,認証試行回数の制限などを行う.また,公開鍵暗号方式を採用することで,パスワードがネットワークを流れるのを防ぐ.公開鍵・秘密鍵のペアは「ssh-keygen」コマンドで生成し,公開鍵をSSHサーバ側に登録する.これにより,公開鍵による認証のみでログインが可能となる.

サイト内の関連ページ

SSH サーバの設定(SSH サーバは Ubuntu マシン)

openssh のインストール (Ubuntu の場合)

接続先(SSH サーバ側)での /etc/ssh/sshd_config の設定 (Ubuntu の場合)

以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.

/etc/ssh/sshd_config を書き換える.

接続先(SSH サーバ側)で,公開鍵を使うように設定 (Ubuntu の場合)

以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.

  1. /etc/ssh/sshd_config を編集する
  2. sshd の再起動

    Ubuntu ならば、

    sudo service ssh restart
    

SSH サーバへの接続ログの確認(Ubuntu の場合)

Ubuntu では,SSH サーバの接続ログは /var/log/auth.log に残る

cat /var/log/auth.log

SSH サーバの再起動(Ubuntu の場合)

Ubuntu では,次のコマンドで SSH サーバを再起動.設定ファイルの書き換えを行った場合には, 再起動の後の動作確認を忘れないこと.

sudo service ssh restart

TCP Wrapper による接続先 IP アドレスの制限(Ubuntu の場合)

以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.

ポート番号によるアクセス制限(ufw を使用)

これは,SSH に限定せず,通信全般をポート番号により遮断するもの.

Ubuntu の場合

の設定例
sudo ufw enable
sudo ufw default DENY
sudo ufw allow from any port 22
sudo ufw allow to any port 22
sudo ufw allow from any port 80
sudo ufw allow to any port 80
sudo ufw allow from any port 443
sudo ufw allow to any port 443
sudo ufw limit ssh

ブラックリストサイトからの接続拒否(Fail2Ban を利用)(Ubuntu の場合)

以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.

https://github.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning の公開情報による

  1. 次のコマンドを実行
    sudo apt -y update
    sudo apt -y install fail2ban
    sudo fail2ban-client reload
    sudo fail2ban-client status sshd
    sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/filter.d/blacklist.conf -O /etc/fail2ban/filter.d/blacklist.conf
    sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/action.d/blacklist.conf -O /etc/fail2ban/action.d/blacklist.conf
    sudo service fail2ban restart
    
  2. /etc/fail2ban/jail.local に次の設定を追加

    このファイルがないときは,ファイルを新規作成.

    [DEFAULT]
    port = 0:65535
    filter = %(__name__)s
    
    [blacklist]
    enabled = true
    logpath  = /var/log/fail2ban.*
    filter = blacklist
    banaction = blacklist
    action = %(action_)s
    bantime  = 31536000   ; 1 year
    findtime = 31536000   ; 1 year
    maxretry = 10
    
  3. 次のコマンドを実行
    sudo touch /etc/fail2ban/ip.blacklist
    sudo chmod 775 /etc/fail2ban/ip.blacklist
    sudo service fail2ban restart
    sudo fail2ban-client reload
    sudo service sshd restart
    
  4. しばらく運用した後,次のコマンドでログなどを確認.
    cat /var/log/fail2ban.log
    cat /etc/fail2ban/ip.blacklist
    

接続元(ユーザマシン)でのキーペア(公開鍵,秘密鍵)の生成,接続先(SSH サーバ側)への転送(Windows マシンなど)

以下の操作は,接続元(ユーザマシン)で,各ユーザが行う.

接続元(ユーザマシン)が Windows のときの操作

  1. MobaXTerm のインストール

    Windows での MobaXTerm のインストール: 別ページ »で説明している.

    Windows マシン の場合は,MobaXTermをインストールし,それに内蔵の ssh-keygen, ssh を使うのが便利.

  2. コマンドプロンプトを管理者として実行する

    Windowsコマンドプロンプト管理者として実行するには, 検索窓で「cmd」と入れたあと, 右クリックメニューで「管理者として実行」を選ぶのが簡単.

    [image]
  3. キーペア(公開鍵と秘密鍵)の生成

    ssh-keygen」を使う. ssh-keygen は,キーペア(公開鍵と秘密鍵)を生成できる機能をもったコマンドである. 公開鍵は,接続先(SSH サーバ側)の所定のファイルに追加して使う.

    管理者として実行したコマンドプロンプトで次を実行

    「-C ''」はコメントである.ここではコメントは空としている.

    ssh-keygen -t ed25519 -m PEM -C ''
    

    「Enter file in which to save the key ...」に対しては Enter キー

    このコマンドの実行のときに,パスフレーズを設定. 同じパスフレーズを2回入れること. パスフレーズは画面に表示されないのは正常動作である.

    [image]
  4. キーペア(公開鍵と秘密鍵)のファイルが生成されるので確認する.

    キーペアのファイル %HOMEPATH%/.ssh/id_ed25519(秘密鍵), %HOMEPATH%/.ssh/id_ed25519.pub(公開鍵) が,各ユーザのホームディレクトリ下に作成されるので確認

    cd %HOMEPATH%
    cd .ssh
    dir /w
    

    [image]
  5. キーペアのファイルを MobaXterm の配下にコピーする.

    <Documents のフォルダ>\MobaXterm\home\.ssh に id_ed25519, id_ed25519.pub をコピーする

    [image]
  6. FileZillaを使うときは,キーペアのファイルを使うように設定する.

    SFTP, 「鍵ファイル」,鍵ファイルとして先ほど生成した id_ed25519 を設定する.

    設定すると,「対応していません。ファイルを変換しますか?」のように表示される. ここで,「はい」を選ぶ. ppk ファイルへの変換が自動で行われ,次のように表示される.

    [image]
  7. 公開鍵のファイルを,接続先(SSH サーバ側)にアップロードする.

    「mkdir $HOME/.ssh」は .ssh ディレクトリを作るためのもの. .ssh ディレクトリを作成済みのときは,「type id_ed25519.pub | ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> "cat >>$HOME/.ssh/authorized_keys"」 のように実行

    cd %HOMEPATH%
    cd .ssh
    type id_ed25519.pub | ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> "mkdir $HOME/.ssh; cat >>$HOME/.ssh/authorized_keys"
    <接続先のマシンに接続するためのパスワード(キーペアのパスワードではない)>
    

    [image]
  8. 試しにログインしてみる

    今度は,「Enter passphrase for key ...」のように表示されるようになる.キーペアが利用されていることが確認できる.

    ssh <ユーザ名>@<接続先のマシン名またはIPアドレス>
    <パスワード(キーペアのパスワード)>
    

    [image]

接続元(ユーザマシン)が Ubuntu のときの操作

  1. キーペア(公開鍵と秘密鍵)の生成

    ssh-keygen」を使う. ssh-keygen は,キーペア(公開鍵と秘密鍵)を生成できる機能をもったコマンドである. 公開鍵は,接続先(SSH サーバ側)の所定のファイルに追加して使う.

    「-C ''」はコメントである.ここではコメントは空としている.

    ssh-keygen -t ed25519 -m PEM -C ''
    

    「Enter file in which to save the key ...」に対しては Enter キー

    このコマンドの実行のときに,パスフレーズを設定. 同じパスフレーズを2回入れること. パスフレーズは画面に表示されないのは正常動作である.

    [image]
  2. キーペア(公開鍵と秘密鍵)のファイルが生成されるので確認する.

    キーペアのファイル $HOME/.ssh/id_ed25519(秘密鍵), $HOME/.ssh/id_ed25519.pub(公開鍵) が,各ユーザのホームディレクトリ下に作成されるので確認

    cd $HOME
    cd .ssh
    ls
    

    [image]
  3. 公開鍵のファイルを,接続先(SSH サーバ側)にアップロードする.

    「mkdir $HOME/.ssh」は .ssh ディレクトリを作るためのもの. .ssh ディレクトリを作成済みのときは,「cat id_ed25519.pub | ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> "cat >>$HOME/.ssh/authorized_keys"」 のように実行

    cd $HOME
    cd .ssh
    cat id_ed25519.pub | ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> "mkdir $HOME/.ssh; cat >>$HOME/.ssh/authorized_keys"
    <接続先のマシンに接続するためのパスワード(キーペアのパスワードではない)>
    

    [image]
  4. 試しにログインしてみる

    今度は,「Enter passphrase for key ...」のように表示されるようになる.キーペアが利用されていることが確認できる.

    ssh <ユーザ名>@<接続先のマシン名またはIPアドレス>
    <パスワード(キーペアのパスワード)>
    

    [image]

パスワードによる認証の禁止

以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.

SSH サーバは,公開鍵による認証のみを行い,パスワードでの認証を行わなくなる.公開鍵による設定を終えたあとで行うこと.

問題が起きたときの動作チェック

問題が起きたときは,下記の手順を参考に SSH の動作チェックを行う.
  1. 接続先のSSH サーバを,手動で,デバッグモードで起動する.

    「/usr/sbin/sshd -d」とあるのは、デバッグモードでの起動.

    services sshd stop
    /usr/sbin/sshd -d 
    
  2. 接続元から接続してみる

    「-2」は ssh のバージョン指定

    ssh -2 -l <ユーザ名> <接続先の IP アドレスまたはマシン名>