🖥️

自宅サーバーのSSH/UFW設定

2024/03/29に公開

SSHの設定

インストール後のデフォルトの設定ではセキュリティ的によろしくないので設定を変更する

主に変更すること

  • ポート番号(デフォルトの22番には攻撃が多い)
  • rootログインの禁止(ユーザー名rootでログイン試行してくるのが多い)
  • パスワード認証 → 公開鍵認証
  • sshでログインできるユーザーを限定する

手順

  1. クライアント側(自分のノートPCとか)で鍵ペア生成
  2. サーバーに公開鍵をコピー
  3. サーバー側でsshdの設定を変更
  4. sshdを再起動

公開鍵をサーバーにコピーする前にsshdの設定を変えてしまうとサーバーに接続できなくなってしまうのでリモートで設定している人は注意

1.クライアント側で鍵ペア生成

アルゴリズムは ed25519 を指定する(現在最も安全?)
-f オプションで保存先(鍵ファイル名)でわかりやすい名前をつけると良い

クライアント側
# 一般ユーザーで実行
ssh-keygen -t ed25519 -f ~/.ssh/id_myserver

2. サーバーに公開鍵をコピー

-i オプションで先程作成した公開鍵(拡張子が.pubのもの)を指定する

.pubがついていない方のファイルは秘密鍵なので絶対に公開してはいけない

クライアント側
# 一般ユーザーで実行
ssh-copy-id -i ~/.ssh/id_myserver.pub 192.168.1.10

3. サーバー側でsshdの設定を変更

sshdサーバーの設定ファイルは /etc/ssh/sshd_config
sshクライアントの設定ファイル /etc/ssh/ssh_config と間違えないように注意

ポート番号 を自分の好きなポート番号に置き換える
49152~65535 番のプライベートポートの中から選ぶとよい

サーバー側 /etc/ssh/sshd_config
# コメントアウト
# ポート番号を設定
Port ポート番号

# コメントアウト
# 公開鍵認証
PubkeyAuthentication yes

# コメントアウト
# パスワード認証を禁止する
# yes → no に変更する
PasswordAuthentication no

# 追加
# sshでログインできるユーザーを制限する
# この例では user1 と user2 を許可
AllowUsers user1 user2

4. sshdを再起動

sshdを再起動すると、sshd_config の変更がすべて反映される
現在sshで接続して作業している場合、設定に誤りがあると接続できなくなってしまうので注意

  • 公開鍵がサーバーにコピーされているか
  • 設定したポートが開放されているか(ファイアウォールの設定を確認)

を確認する

サーバー側
# sshdを再起動する(systemdを使っている場合)
sudo systemctl restart sshd

ファイアウォールの設定

ufwを使ってファイアウォールを設定する

外から内への通信はホワイトリスト方式で、内から外へはすべて許可する

サーバー側
# サービスの起動&有効化
sudo systemctl enable --now ufw

# ssh接続用のポート番号を許可する(ルールの追加)
sudo ufw allow ポート番号

# ufwを有効化する(ファイアウォールを開始)
sudo ufw enable

# ufwの状態を確認
# Status: active となっていればOK
sudo ufw status

その他の操作

サーバー側
# ルールの設定を確認
sudo ufw status numbered

# ルールを削除
# 上のルール設定確認でルール番号を確認しておく
sudo ufw delete ルール番号

Discussion