メインコンテンツへスキップ

VPSを堅牢化する:20分で終わるチェックリスト

このガイドは英語から翻訳されています。リンク先の一部のページは英語のみです。

日和見的な攻撃の大多数を止める、具体的な手順。

サーバーを完全に安全にすることはできません。しかし約20分で「狙う価値の低い標的」にすることはできます。それだけで、自動化された攻撃のほぼすべてをかわせます。

1. 鍵のみのSSH

詳しくはSSH鍵とアクセスで説明しています。これが最も効果の高い単独の手順です。パスワードの総当たりは公開インターネット上で最も一般的な侵入手法であり、これで排除できます。

text
PasswordAuthentication no
PermitRootLogin prohibit-password

2. デフォルト拒否のファイアウォール

実際に提供しているものだけを許可します。Debian/Ubuntuの場合:

bash
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp          # SSH — see the warning below
ufw allow 80,443/tcp      # web
ufw enable
ufw status verbose

RHEL系ではfirewalldを使います。

bash
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

警告: SSHセッションを開いたままファイアウォールを有効にし、切断する前にSSHが許可されていることを確認してください。SSHポートを変更する場合は、先に新しいポートを許可してください。詳細はファイアウォールの基本をご覧ください。常に許可しておく必要がある当社のプライベートメッシュインターフェースについても記載しています。

3. 自動セキュリティアップデート

bash
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades    # choose yes
# verify:
systemctl status unattended-upgrades --no-pager

RHEL系ではdnf-automaticが同じ役割を果たします。自動セキュリティパッチにより、脆弱性の公開から悪用までの猶予(実際には数時間のことも多い)を埋められます。

4. Fail2ban

ログイン失敗が繰り返されたIPをブロックし、終わりのない総当たり攻撃を行き止まりにします。Fail2banの基本をご覧ください。

bash
apt install -y fail2ban
systemctl enable --now fail2ban

5. 使わないものは止める

待ち受けているサービスはすべて侵入口になり得ます。

bash
ss -tulpn        # what is listening, and who owns it
systemctl --type=service --state=running   # what is running

依頼していないものは停止して無効にしてください。最小構成のサーバーは安全なサーバーです。

6. サービスは権限のないユーザーで実行する

データベース、Webアプリ、ワーカーをrootで実行してはいけません。ほとんどのパッケージは専用のサービスユーザーを自動作成するので、それを使います。独自のユニットファイルを書く場合は、User=とGroup=を明示してください。

7. 秘密情報を守る

  • 秘密情報をgitにコミットしない。chmod 600の環境ファイルを使う。

  • パスワードや鍵を含む設定ファイルを、全員が読める状態にしない。

  • 共有の管理者資格情報1つより、サービスごとの資格情報を優先する。

8. 戻る手段を用意する

9. 監視する

一度も見ないサーバーは守れません。監視チェックを追加し、ときどきログを読みましょう。方法はログの読み方で説明しています。

オプション:侵入検知

価値の高いホストには、CrowdSec(クラウドソース型ブロック、MITライセンス)とWazuh(ホスト型侵入検知)が実質的な深みを加えます。どちらもアプリホスティングガイドで解説しています。

関連記事