secure-vps-setup について
新しい Linux VPS のセキュリティ強化を段階的に支援するメンタリングスキルです。各対策の目的を説明し、ネットワーク制御、Docker サービス、Crowdsec、バックアップを確認しながら進めます。
主な機能
- 01段階ごとに操作の目的を説明
- 02OS とネットワークの強化手順
- 03Docker、Traefik、Watchtower のセットアップ
- 04Crowdsec の防御設定
- 05バックアップと設定検証の案内
活用シーン
- 01新規 Linux VPS のセキュリティ強化
- 02Traefik 経由での Docker サービスのデプロイ
- 03悪意ある IP を遮断する Crowdsec の設定
- 04VPS のバックアップ計画と最終確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tibobfd/ skills-secure-vps-for-beginners --skill secure-vps-setupインストール後、Claude Code で/secure-vps-setupを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdLICENSEreferences/docker-compose-templates.mdsecurity-concepts.mdscripts/verify_setup.sh詳細
対話ガイドライン
- まず「理由」から説明する: 何をするのか、なぜセキュリティを強化できるのかを説明せずに、コマンドの実行を指示してはいけません。
- フェーズごとに進める: ガイド全体を一度に出力してはいけません。フェーズごとに分けて進めます。
- チェックポイント: 各フェーズの後に、次へ進む準備ができているかユーザーに確認します。
- 検証: 次の層へ進む前に、成功を確認するようユーザーに促します(例:「今すぐログインを試してみてください」)。
起動時(最初のターン)
- ユーザーに挨拶します。
- 脅威の概要: なぜこの作業を行うのかを簡潔に説明します(参考資料の「The Stakes」セクションを参照してください)。
- 計画を提示する: 取り組む6つのフェーズを列挙します。
- 次のように尋ねます:「フェーズ1:OS の強化を始めてもよいですか?」
セキュア VPS セットアップガイド(エキスパート版)
前提条件
- 新しい Linux VPS(最新の Ubuntu LTS を推奨)。
- root または
sudoアクセス。 - ドメイン名(Traefik 用)。
参考資料
-> 詳しい概念については、references/security-concepts.md をお読みください。
フェーズ1:OS の強化とネットワーク
目標: 外部に公開する前に、オペレーティングシステムの基盤を保護します。
- システムを更新する:
sudo apt update && sudo apt upgrade -y - 必須ツールをインストールする:
sudo apt install ufw unattended-upgrades apt-listchanges -y - 自動アップグレードを設定する:
セキュリティ更新を自動的に有効にします。
sudo dpkg-reconfigure -plow unattended-upgrades # Select 'Yes' - Sysctl の強化(カーネルセキュリティ):
一般的なネットワーク攻撃(IP スプーフィング、リダイレクト)をブロックします。
cat <<EOF | sudo tee /etc/sysctl.d/99-security.conf net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.tcp_syncookies = 1 EOF sudo sysctl --system - ファイアウォールを設定する(UFW):
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh # 重要:自分がロックアウトされないようにしてください! sudo ufw enable
フェーズ2:SSH の強化(優先度高)
目標: 弱いパスワードを暗号鍵に置き換えます。
- 鍵を生成する(ローカルマシン上):
まだ鍵がない場合は、次を実行します。
ssh-keygen -t ed25519 -C "[email protected]" - VPS に鍵をコピーする(ローカルマシンから):
ssh-copy-id user@your-vps-ip - ログインをテストする:
新しいターミナルを開き、
ssh user@your-vps-ipを試してください。パスワードは要求されません(鍵のパスフレーズのみを求められる場合はあります)。 - SSH を制限する(VPS 上):
/etc/ssh/sshd_configを編集します。
次の値を設定します。sudo nano /etc/ssh/sshd_configPermitRootLogin no PasswordAuthentication no ChallengeResponseAuthentication no - SSH を再起動する:
sudo systemctl restart ssh
フェーズ 3:セキュアなアクセス(Tailscale)
目標: 管理ポートをパブリックインターネットから完全に隠します。
- Tailscale をインストールします:
curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up - Tailscale のトラフィックを許可します:
これにより、すべてのトラフィック(SSH を含む)がプライベート VPN トンネルを通過できるようになります。
sudo ufw allow in on tailscale0 - 接続をテストします(重要):
- Tailscale の IP アドレスを確認します:
tailscale ip -4 - ローカルマシンからこの IP アドレスを使って VPS に SSH 接続してみます:
ssh [email protected]
- Tailscale の IP アドレスを確認します:
- パブリックからの入り口を閉じます:
Tailscale 経由で接続できることを確実に確認したら、パブリック SSH ルールを削除します。
⚠️ セーフティネット: VPS プロバイダーの「Web Console」または「KVM」(例:OVH/Hetzner のパネル)にアクセスできることを確認してください。Tailscale が機能しない場合、再びアクセスする唯一の手段になります!
これで、ポート 22 はパブリックインターネットから見えなくなりますが、VPN 経由では問題なく動作します。sudo ufw delete allow ssh
フェーズ 4:コアサービス(Docker と Watchtower)
目標: アプリケーションを自動更新付きで実行します。
- Docker をインストールします:
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER # ログアウトして再度ログイン - ネットワークを作成します:
docker network create proxy-net - Traefik をデプロイします:
-> references/docker-compose-templates.md から設定をコピーします
~/app-data/traefikにデプロイします。 重要な事前準備: Traefik では、証明書ファイルに厳格なアクセス許可が必要です。mkdir -p ~/app-data/traefik/letsencrypt touch ~/app-data/traefik/letsencrypt/acme.json chmod 600 ~/app-data/traefik/letsencrypt/acme.json - Watchtower をデプロイします:
-> references/docker-compose-templates.md から設定をコピーします
~/app-data/watchtower/docker-compose.ymlを作成してデプロイします。
フェーズ 5:アクティブ防御(Crowdsec)
目標: 悪意のある IP を自動的に禁止します。
方法 A:ホストへのインストール(推奨) サーバー自体(SSH、システムログ)の保護と、ファイアウォールの直接管理に最適です。
-
Crowdsec をインストールします:
curl -s https://install.crowdsec.net | sudo sh sudo apt install crowdsec -
ファイアウォールバウンサーをインストールします:
sudo apt install crowdsec-firewall-bouncer-iptablesこれにより Crowdsec が UFW/IPtables に直接接続し、パケットを破棄します。
-
Traefik のログを接続します(重要): Crowdsec がウェブ攻撃を阻止するには、Traefik のログを読み取れる必要があります。
- コレクションをインストール:
sudo cscli collections install crowdsecurity/traefik # 推奨追加項目(2025 年のベストプラクティス): sudo cscli collections install crowdsecurity/whitelist-good-actors crowdsecurity/http-cve - 取得設定:
/etc/crowdsec/acquis.yamlに以下を追加します:filenames: - /home/ubuntu/app-data/traefik/logs/access.log labels: type: traefik - 再起動:
sudo systemctl restart crowdsec
- コレクションをインストール:
-
通知を設定します(任意ですが推奨): IP が禁止されたときに Discord で通知を受け取れます。
- 設定ファイルを作成:
sudo nano /etc/crowdsec/notifications/discord.yamltype: http name: discord_default log_level: info url: YOUR_WEBHOOK_URL method: POST headers: Content-Type: application/json format: | { "username": "CrowdSec-VPS", "content": "🚨 **CrowdSec Alert**\n{{range . -}}\nIP: **{{.Source.IP}}** ({{.Source.Cn}})\nReason: *{{.Scenario}}*\n{{end}}" } - プロファイルで有効化:
/etc/crowdsec/profiles.yamlを編集し、notifications:の下にdiscord_defaultを追加します。 - 再起動:
sudo systemctl restart crowdsec
- 設定ファイルを作成:
方法 B:Docker へのインストール(代替方法) コンテナを完全に分離したい場合に使用します。
- Crowdsec をデプロイします:
-> references/docker-compose-templates.md から設定をコピーします
~/app-data/crowdsecにデプロイします。
フェーズ 6:メンテナンスと検証
目標: 回復力と復旧可能性を確保します。
戦略:ハイブリッドアーキテクチャ(推奨) 信頼性を高めるため、重要なインフラストラクチャ(セキュリティ、バックアップ、VPN)はホスト上で実行します。アプリは Docker で実行します。
-
脆弱性スキャン(Trivy):
trivy fs / -
バックアップ(Duplicati): 方法 A:ホストへのインストール(堅牢) 災害復旧に最適です(Docker が停止していても Docker の設定を復元できます)。
- Duplicati をサービスとしてインストールします。
- 重要: 外部から見えないように、ローカルホストまたは Tailscale IP のみでリッスンするように設定します。
--webservice-interface=100.x.y.z
方法 B:Docker へのインストール -> references/docker-compose-templates.md から設定をコピーします ファイルを編集し、
127.0.0.1を Tailscale IP に置き換えます。~/app-data/duplicatiにデプロイします。 -
最終確認: ->
scripts/verify_setup.shを実行します