レポート課題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. 実験方法(使用機器と手順)
-
[Ubuntuサーバー ターミナル] ファイアウォールの設定
ufwを用いて必要なポートのみを開放する。SSH(22/tcp)と後続の実験で利用するHTTP(80/tcp)を許可し、それ以外の不要な通信を遮断する。bash(推奨):
sudo ufw allow 22/tcp sudo ufw enable -
[Ubuntuサーバー ターミナル] ファイアウォール設定の確認
設定後、許可したポートのみが開放されていることを確認する。
bash(推奨):
sudo ufw status numbered sudo ss -tuln -
[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 には接続できないことを確認する。
-
[Windows 11 ターミナル] パスワード認証でのSSH接続確認
通信確認でポート22が開放されていることが確認できたので、実際にパスワード認証でサーバーに接続できることを確認する。
bash(推奨):
ssh <user>@192.168.100.xxxPowerShell(参考):
ssh <user>@192.168.100.xxxサーバーのパスワードを入力してログインでき、
$プロンプトが表示されることを確認する。接続確認後はexitコマンドでサーバーからログアウトする。bash(推奨):
exitPowerShell(参考):
exit -
[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_ed25519PowerShell(参考):
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の内容を確認し、次の手順でサーバーへ登録する。 -
[Ubuntuサーバー ターミナル] SSH鍵認証の設定
作成した公開鍵(
id_ed25519.pub)をサーバーへ登録する。公開鍵を設置する段階では、まだパスワード認証を有効のままにしておき、パスワード接続で登録作業を行う。公開鍵認証でのログイン確認後に、パスワード認証を無効化する。公開鍵の登録手順(例):
[Windows 11 ターミナル]から、まずパスワード認証でサーバーへ接続する。
bash(推奨):
ssh <user>@192.168.100.xxxPowerShell(参考):
ssh <user>@192.168.100.xxx[Windows 11 ターミナル(SSH接続)]で.sshディレクトリとauthorized_keysを作成し、権限を設定する。
bash(推奨):
mkdir -p ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys[Windows 11 ターミナル]で接続を終了する。
bash(推奨):
exitPowerShell(参考):
exit[Windows 11 ターミナル]からscpコマンドで公開鍵ファイルをサーバーに転送する。
bash(推奨):
scp ~/.ssh/id_ed25519.pub <user>@192.168.100.xxx:~/id_ed25519.pubPowerShell(参考):
scp $env:USERPROFILE\.ssh\id_ed25519.pub <user>@192.168.100.xxx:~/id_ed25519.pub[Windows 11 ターミナル]から再度パスワード認証でサーバーへ接続する。
bash(推奨):
ssh <user>@192.168.100.xxxPowerShell(参考):
ssh <user>@192.168.100.xxx[Windows 11 ターミナル(SSH接続)]で転送された公開鍵の内容をauthorized_keysに追記する。
cat ~/id_ed25519.pub >> ~/.ssh/authorized_keysその後、公開鍵ファイルは削除して良い。
rm ~/id_ed25519.pub[Windows 11 ターミナル]で接続を終了する。
bash(推奨):
exitPowerShell(参考):
exit[Windows 11 ターミナル]から秘密鍵を指定して接続し、公開鍵認証でログインできることを確認する。
bash(推奨):
ssh -i ~/.ssh/id_ed25519 <user>@192.168.100.xxxPowerShell(参考):
ssh -i $env:USERPROFILE\.ssh\id_ed25519 <user>@192.168.100.xxx※ デフォルト名で作成した場合は
-iを省略してssh <user>@192.168.100.xxxとしてよい。-
[Windows 11 ターミナル(SSH接続)]SSH接続を公開鍵認証のみにする設定を行う。a.
/etc/ssh/sshd.configの編集sshd_config 編集例:
PubkeyAuthentication yes PasswordAuthentication no KbdInteractiveAuthentication no PermitRootLogin nob. sshd再起動と確認:
sudo sshd -t sudo systemctl restart ssh sudo systemctl status ssh -
(上記接続は保ったまま)
[Windows 11 ターミナル]からSSH接続し、設定反映後もパスワードなしでログインできることを再確認する。うまくいかなかった場合は、保持してあったssh接続から再編集・再起動する。
bash(推奨):
ssh -i ~/.ssh/id_ed25519 <user>@192.168.100.xxxPowerShell(参考):
ssh -i $env:USERPROFILE\.ssh\id_ed25519 <user>@192.168.100.xxx -
[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.txtPowerShell(参考):
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点をスクリーンショットで取得し、図としてレポートに挿入・説明すること。
sudo ufw status numberedを実行し、必要なポートのみが許可されていることが確認できる画面- Windows 11 クライアントで
ssh-keygen -t ed25519 -C "t3-lab" -f $env:USERPROFILE\.ssh\id_ed25519とGet-ChildItem $env:USERPROFILE\.ssh\id_ed25519*を実行し、鍵ペアが生成されたことが確認できる画面 sudo sshd -tとsudo systemctl status sshを実行し、SSH設定が有効でサービスが動作していることが確認できる画面- Windows 11 クライアントからSSH接続し、パスワードなしでログインできることが確認できる画面
- Windows 11 クライアントで
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 11 クライアントで
Test-NetConnection 192.168.100.xxx -Port 22、Test-NetConnection 192.168.100.xxx -Port 80、Test-NetConnection 192.168.100.xxx -Port 443を実行し、許可した通信と遮断された通信の違いが確認できる画面
4. 課題
- ファイアウォール設定にて、ポート22(SSH)を許可した理由を説明せよ。また、不要なポートを開放したままにすることの危険性を考察せよ。
- パスワード認証を禁止し、鍵認証のみに制限するセキュリティ上の理由は何か。