新しいLinux VPSを10分でセキュリティ強化:SSH鍵・ファイアウォール・Fail2ban・自動更新
グローバルIPを持つ新しいVPSは、公開から数分で自動化されたログイン試行を受け始めます。このチェックリストでは、新しいLinux VPSを約10分でセキュリティ強化する手順を紹介します。パッケージの更新、sudoユーザーの作成、SSH鍵認証への切り替え、rootのパスワードログイン無効化、必要なポートだけを開けるファイアウォール、fail2banによる総当たり攻撃対策、自動セキュリティ更新の有効化までをカバーします。コマンドはDebian/UbuntuとCentOS/Rocky Linux/AlmaLinuxの両方を掲載しており、ヨハネスブルグ・モスクワ・東京・ソウルのどのJUSTGクラウドサーバーでも使えます。
ステップ1:すべてのパッケージを更新する
rootでログインし(SSH接続ガイドを参照)、まず最新のセキュリティパッチを適用します。
# Debian / Ubuntu
apt update && apt upgrade -y
# CentOS / Rocky / AlmaLinux
dnf upgrade -y
# reboot if a new kernel was installed
reboot
ステップ2:新しいsudoユーザーを作成する
常にrootで作業すると打ち間違い一つが致命傷になり、しかも root は攻撃者が最初に狙うユーザー名です。sudo権限を持つ一般ユーザー(ここでは deploy)を作成しましょう。管理グループはDebian/Ubuntuでは sudo、RHEL系では wheel です。
# Debian / Ubuntu
adduser deploy
usermod -aG sudo deploy
# CentOS / Rocky / AlmaLinux
useradd -m deploy
passwd deploy
usermod -aG wheel deploy
ステップ3:SSH鍵認証を設定する
SSH鍵はパスワードよりはるかに強力で、推測される心配がありません。鍵ペアはサーバーではなく 自分のPC で作成し、公開鍵を新しいユーザーにコピーします。作成時には秘密鍵にパスフレーズを設定してください。
# on your own computer (Windows PowerShell, macOS, Linux)
ssh-keygen -t ed25519 -C "my-laptop"
# macOS / Linux: copy the public key to the server
ssh-copy-id [email protected]
# Windows PowerShell (no ssh-copy-id)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
新しい ターミナルを開き、鍵でログインでき、sudoが使えることを確認します。
ssh [email protected]
sudo whoami
ステップ4:rootログインとSSHパスワード認証を無効にする
新しいリリース(Debian 12、Ubuntu 22.04以降、Rocky/AlmaLinux 9)は /etc/ssh/sshd_config.d/ の設定ファイルを読み込み、最初に見つかった値が優先されます。クラウドイメージが 50-cloud-init.conf でパスワード認証を有効にしている場合に備え、01-hardening.conf のように先に読まれる名前を付けてください。古いシステムでは /etc/ssh/sshd_config の同じ項目を直接編集します。
sudo nano /etc/ssh/sshd_config.d/01-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
構文を確認してSSHを再起動します。
sudo sshd -t
# Debian / Ubuntu
sudo systemctl restart ssh
# CentOS / Rocky / AlmaLinux
sudo systemctl restart sshd
新しいターミナルから再テストします。ssh [email protected] は拒否され、ssh [email protected] は引き続きログインできれば成功です。
ステップ5:必要なポートだけを許可するファイアウォール設定
受信は既定ですべて拒否し、SSHと実際に動かすサービス(Webサイトなら80と443)だけを開放します。ファイアウォールを有効にする 前に 必ずSSHを許可してください。SSHポートを変更した場合はそのポートを許可します。
# Debian / Ubuntu (ufw)
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable
# CentOS / Rocky / AlmaLinux (firewalld)
sudo dnf install firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
ufwもfirewalldも、ルールをIPv4とJUSTG VPSの無料IPv6アドレスの両方に適用します。
ステップ6:fail2banで総当たり攻撃をブロックする
パスワードログインを無効にしていても、fail2banを入れておけばログがすっきりし、スキャナーも遮断できます。認証失敗を監視して、送信元IPを一定時間ブロックします。systemd バックエンドはjournalを読むため、どちらのディストリビューション系統でも動作します。
# Debian / Ubuntu
sudo apt install fail2ban python3-systemd
# CentOS / Rocky / AlmaLinux
sudo dnf install epel-release
sudo dnf install fail2ban python3-systemd
sudo nano /etc/fail2ban/jail.local
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
ステップ7:自動セキュリティ更新を有効にする
侵害の多くは、すでに修正パッチがある脆弱性を突いたものです。Debian/Ubuntuでは unattended-upgrades、CentOS/Rocky/AlmaLinuxでは dnf-automatic でセキュリティ更新を自動適用させましょう。
# Debian / Ubuntu
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
sudo unattended-upgrade --dry-run --debug
# CentOS / Rocky / AlmaLinux
sudo dnf install dnf-automatic
sudo nano /etc/dnf/automatic.conf
# upgrade_type = security
# apply_updates = yes
sudo systemctl enable --now dnf-automatic.timer
systemctl list-timers dnf-automatic.timer
カーネル更新の反映には再起動が必要です。定期的に短いメンテナンス再起動を計画するか、Debian/Ubuntuでは /var/run/reboot-required の有無を確認してください。
よくある質問
パスワードログインを無効にしたら入れなくなりました。
JUSTGクライアントエリアからVNCコンソールを開いてログインし、/etc/ssh/sshd_config.d/ の設定ファイルやファイアウォールのルールを修正してください。コンソールはSSHやファイアウォールに依存しません。
SSHのポートも変更すべきですか?
22番から変更するとログのノイズは減りますが、それだけでは本当の防御にはなりません。変更する場合は先にファイアウォールを更新し、SELinuxが有効なRocky/AlmaLinuxでは semanage port -a -t ssh_port_t -p tcp 2222 も実行します。
Windows VPSでも同じですか?
考え方は同じです。Windows Updateを有効にし、強力なAdministratorパスワードを使い、Windows Defender ファイアウォールでRDPを自分のIPだけに制限してください。
サーバーのセキュリティ設定でお困りの場合は、チケットを送信してJUSTGテクニカルサポートにご相談ください。