Skip to content

レポート課題2(2日目):ファイアウォール設定・SSH鍵認証の確認

本実験は1回分(4時限分 × 1)を想定している。

実験レポートのファイル名は T3情報工学2_[学生番号]_[氏名].pdf とすること。

【基礎知識】ファイアウォールの役割

ファイアウォールは、サーバーへの通信のうち、必要なものだけを許可し、不要な通信を遮断するための仕組みである。Linuxでは ufw を用いて設定することが多く、SSH接続やWeb公開に必要なポートだけを開放することで、外部からの不正なアクセスや意図しない通信のリスクを低減できる。

【基礎知識】SSHと鍵認証

SSHはサーバーへ遠隔接続して管理するための仕組みであり、パスワード認証よりも公開鍵認証のほうが安全である。公開鍵をサーバーに登録し、sshd_config でパスワード認証を無効化することで、総当たり攻撃などのリスクを低減できる。

1. 目的

ファイアウォールの基本設定とSSHの鍵認証設定を行い、安全にサーバーへ接続できるリモート管理環境を構築する。

作業区分ラベル

  • [Webブラウザ(Proxmox)]: Proxmoxの画面操作
  • [Windows 11 ターミナル]: Windows 11 の PowerShell 操作
  • [Ubuntuサーバー ターミナル]: Ubuntu Server 上のコマンド操作
  • [Windows 11 ターミナル(SSH接続)]: Windows 11 からSSHログイン後のサーバー内コマンド操作(以降はこちらを優先)

コマンド表記ルール: bash ブロックは推奨手順(Windows Terminalでbash互換エイリアスが使える場合はこちらを優先)、powershell ブロックはPowerShell固有記法の参考例。

2. 実験方法(使用機器と手順)

  1. [Ubuntuサーバー ターミナル] ファイアウォールの設定

    ufw を用いて必要なポートのみを開放する。SSH(22/tcp)と後続の実験で利用するHTTP(80/tcp)を許可し、それ以外の不要な通信を遮断する。

    bash(推奨):

    sudo ufw allow 22/tcp
    sudo ufw enable
    
  2. [Ubuntuサーバー ターミナル] ファイアウォール設定の確認

    設定後、許可したポートのみが開放されていることを確認する。

    bash(推奨):

    sudo ufw status numbered
    sudo ss -tuln
    
  3. [Windows 11 ターミナル] クライアントからの通信確認

    Windows 11 のクライアント端末からサーバーに対して、許可したポートには接続でき、許可していないポートには接続できないことを確認する。PowerShell を用いて、外部から見た通信可否を確認する。192.168.100.xxx は自分のサーバーのIPアドレスとする。

    PowerShell(参考):

    Test-NetConnection 192.168.100.xxx -Port 22
    

    この結果から、22/tcp には接続できること、未許可の 80/tcp と 443/tcp には接続できないことを確認する。

  4. [Windows 11 ターミナル] パスワード認証でのSSH接続確認

    通信確認でポート22が開放されていることが確認できたので、実際にパスワード認証でサーバーに接続できることを確認する。

    bash(推奨):

    ssh <user>@192.168.100.xxx
    

    PowerShell(参考):

    ssh <user>@192.168.100.xxx
    

    サーバーのパスワードを入力してログインでき、$ プロンプトが表示されることを確認する。接続確認後は exit コマンドでサーバーからログアウトする。

    bash(推奨):

    exit
    

    PowerShell(参考):

    exit
    
  5. [Windows 11 ターミナル] Windows 11でのSSH鍵作成

    Windows 11 でSSH鍵ペアを作成する。以下の2つの方法がある。

    方法1: ssh-keygen コマンドを使用する(推奨)

    ssh-keygen コマンドを使用してSSH鍵ペアを作成する。このコマンドは Windows 11 の PowerShell や Command Prompt から直接実行できる。

    デフォルトの保存場所($env:USERPROFILE\.ssh\id_ed25519)に保存する場合:

    bash(推奨):

    ssh-keygen -t ed25519 -C "t3-lab"
    

    PowerShell(参考):

    ssh-keygen -t ed25519 -C "t3-lab"
    

    ここで -C はコメント(comment)を指定するオプションであり、鍵の識別用メモとして記録される。実行時にパスフレーズの入力を求められたら、パスフレーズを入力するか、何も入力せずに Enter キーを押して完了させる。鍵の生成が完了したことを確認する。

    bash(推奨):

    ls ~/.ssh/id_ed25519*
    

    PowerShell(参考):

    Get-ChildItem $env:USERPROFILE\.ssh\id_ed25519*
    

    保存場所を指定する場合(例:id_ed25519 というファイル名で保存):

    bash(推奨):

    ssh-keygen -t ed25519 -C "t3-lab" -f ~/.ssh/id_ed25519
    

    PowerShell(参考):

    ssh-keygen -t ed25519 -C "t3-lab" -f $env:USERPROFILE\.ssh\id_ed25519
    

    実行後、鍵の生成が完了したことを確認する。

    bash(推奨):

    ls ~/.ssh/id_ed25519*
    

    PowerShell(参考):

    Get-ChildItem $env:USERPROFILE\.ssh\id_ed25519*
    

    方法2: PowerShell コマンドを使用する

    PowerShell のネイティブコマンドを使用してSSH鍵を作成することもできる。あらかじめ .ssh ディレクトリを作成し、ssh-keygen コマンドで鍵を生成する。

    bash(推奨):

    mkdir -p ~/.ssh
    ssh-keygen -t ed25519 -C "t3-lab" -f ~/.ssh/id_ed25519
    ls ~/.ssh/id_ed25519*
    

    PowerShell(参考):

    New-Item -ItemType Directory -Force -Path $env:USERPROFILE\.ssh
    ssh-keygen -t ed25519 -C "t3-lab" -f $env:USERPROFILE\.ssh\id_ed25519
    Get-ChildItem $env:USERPROFILE\.ssh\id_ed25519*
    

    必要に応じて id_ed25519.pub の内容を確認し、次の手順でサーバーへ登録する。

  6. [Ubuntuサーバー ターミナル] SSH鍵認証の設定

    作成した公開鍵(id_ed25519.pub)をサーバーへ登録する。公開鍵を設置する段階では、まだパスワード認証を有効のままにしておき、パスワード接続で登録作業を行う。公開鍵認証でのログイン確認後に、パスワード認証を無効化する。

    公開鍵の登録手順(例):

    1. [Windows 11 ターミナル] から、まずパスワード認証でサーバーへ接続する。

    bash(推奨):

    ssh <user>@192.168.100.xxx
    

    PowerShell(参考):

    ssh <user>@192.168.100.xxx
    
    1. [Windows 11 ターミナル(SSH接続)].ssh ディレクトリと authorized_keys を作成し、権限を設定する。

    bash(推奨):

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    touch ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
    1. [Windows 11 ターミナル] で接続を終了する。

    bash(推奨):

    exit
    

    PowerShell(参考):

    exit
    
    1. [Windows 11 ターミナル] から scp コマンドで公開鍵ファイルをサーバーに転送する。

    bash(推奨):

    scp ~/.ssh/id_ed25519.pub <user>@192.168.100.xxx:~/id_ed25519.pub
    

    PowerShell(参考):

    scp $env:USERPROFILE\.ssh\id_ed25519.pub <user>@192.168.100.xxx:~/id_ed25519.pub
    
    1. [Windows 11 ターミナル] から再度パスワード認証でサーバーへ接続する。

    bash(推奨):

    ssh <user>@192.168.100.xxx
    

    PowerShell(参考):

    ssh <user>@192.168.100.xxx
    
    1. [Windows 11 ターミナル(SSH接続)] で転送された公開鍵の内容を authorized_keys に追記する。
    cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
    

    その後、公開鍵ファイルは削除して良い。

    rm ~/id_ed25519.pub
    
    1. [Windows 11 ターミナル] で接続を終了する。

    bash(推奨):

    exit
    

    PowerShell(参考):

    exit
    
    1. [Windows 11 ターミナル] から秘密鍵を指定して接続し、公開鍵認証でログインできることを確認する。

    bash(推奨):

    ssh -i ~/.ssh/id_ed25519 <user>@192.168.100.xxx
    

    PowerShell(参考):

    ssh -i $env:USERPROFILE\.ssh\id_ed25519 <user>@192.168.100.xxx
    

    ※ デフォルト名で作成した場合は -i を省略して ssh <user>@192.168.100.xxx としてよい。

    1. [Windows 11 ターミナル(SSH接続)] SSH接続を公開鍵認証のみにする設定を行う。

      a. /etc/ssh/sshd.config の編集

      sshd_config 編集例:

      PubkeyAuthentication yes
      PasswordAuthentication no
      KbdInteractiveAuthentication no
      PermitRootLogin no
      

      b. sshd再起動と確認:

      sudo sshd -t
      sudo systemctl restart ssh
      sudo systemctl status ssh
      
    2. (上記接続は保ったまま) [Windows 11 ターミナル] からSSH接続し、設定反映後もパスワードなしでログインできることを再確認する。うまくいかなかった場合は、保持してあったssh接続から再編集・再起動する。

    bash(推奨):

    ssh -i ~/.ssh/id_ed25519 <user>@192.168.100.xxx
    

    PowerShell(参考):

    ssh -i $env:USERPROFILE\.ssh\id_ed25519 <user>@192.168.100.xxx
    
  7. [Windows 11 ターミナル] SSHファイル転送(scp)演習

    Windows 11 クライアントからサーバーへファイルを送信し、サーバーからクライアントへファイルを受信する。送受信の両方を実施し、リモート運用時の基本操作を確認する。

    PowerShell またはコマンドプロンプトから scp コマンドで実行できる。

    bash(推奨):

    scp sample.txt <user>@192.168.100.xxx:~/sample_from_win.txt
    scp <user>@192.168.100.xxx:~/sample_from_win.txt sample_from_server.txt
    

    または PowerShell で相対パスを指定する場合:

    bash(推奨):

    scp ./sample.txt <user>@192.168.100.xxx:~/sample_from_win.txt
    scp <user>@192.168.100.xxx:~/sample_from_win.txt ./sample_from_server.txt
    

    PowerShell(参考):

    scp .\sample.txt <user>@192.168.100.xxx:~/sample_from_win.txt
    scp <user>@192.168.100.xxx:~/sample_from_win.txt .\sample_from_server.txt
    

    転送後、Windows側とサーバー側でファイルの存在を確認する。

3. 結果と考察

ファイアウォール設定とSSH鍵認証設定後、以下のコマンドを実行し、安全な通信制御とリモート接続が正しく行えることを確認する。

[Windows 11 ターミナル(SSH接続)]

bash(推奨):

sudo ufw status numbered
sudo sshd -t
sudo systemctl status ssh
ls -l ~/sample_from_win.txt

[Windows 11 ターミナル]

bash(推奨):

scp sample.txt <user>@192.168.100.xxx:~/sample_from_win.txt
scp <user>@192.168.100.xxx:~/sample_from_win.txt sample_from_server.txt
mkdir -p ~/.ssh
ssh-keygen -t ed25519 -C "t3-lab" -f ~/.ssh/id_ed25519
ssh -i ~/.ssh/id_ed25519 <user>@192.168.100.xxx

PowerShell(参考):

New-Item -ItemType Directory -Force -Path $env:USERPROFILE\.ssh
ssh-keygen -t ed25519 -C "t3-lab" -f $env:USERPROFILE\.ssh\id_ed25519
Test-NetConnection 192.168.100.xxx -Port 22
ssh -i $env:USERPROFILE\.ssh\id_ed25519 <user>@192.168.100.xxx

📷 【エビデンス取得】 以下の6点をスクリーンショットで取得し、図としてレポートに挿入・説明すること。

  1. sudo ufw status numbered を実行し、必要なポートのみが許可されていることが確認できる画面
  2. Windows 11 クライアントで ssh-keygen -t ed25519 -C "t3-lab" -f $env:USERPROFILE\.ssh\id_ed25519Get-ChildItem $env:USERPROFILE\.ssh\id_ed25519* を実行し、鍵ペアが生成されたことが確認できる画面
  3. sudo sshd -tsudo systemctl status ssh を実行し、SSH設定が有効でサービスが動作していることが確認できる画面
  4. Windows 11 クライアントからSSH接続し、パスワードなしでログインできることが確認できる画面
  5. Windows 11 クライアントで scp sample.txt <user>@192.168.100.xxx:~/sample_from_win.txtscp <user>@192.168.100.xxx:~/sample_from_win.txt sample_from_server.txt を実行し、送受信が成功したことが確認できる画面
  6. Windows 11 クライアントで Test-NetConnection 192.168.100.xxx -Port 22Test-NetConnection 192.168.100.xxx -Port 80Test-NetConnection 192.168.100.xxx -Port 443 を実行し、許可した通信と遮断された通信の違いが確認できる画面

4. 課題

  1. ファイアウォール設定にて、ポート22(SSH)を許可した理由を説明せよ。また、不要なポートを開放したままにすることの危険性を考察せよ。
  2. パスワード認証を禁止し、鍵認証のみに制限するセキュリティ上の理由は何か。