mcpField
S
secure-vps-setup

secure-vps-setup

github.com/tibobfdセキュリティ287 回インストール38 週間前に更新
リポジトリ

secure-vps-setup について

新しい Linux VPS のセキュリティ強化を段階的に支援するメンタリングスキルです。各対策の目的を説明し、ネットワーク制御、Docker サービス、Crowdsec、バックアップを確認しながら進めます。

主な機能

  1. 01段階ごとに操作の目的を説明
  2. 02OS とネットワークの強化手順
  3. 03Docker、Traefik、Watchtower のセットアップ
  4. 04Crowdsec の防御設定
  5. 05バックアップと設定検証の案内

活用シーン

  1. 01新規 Linux VPS のセキュリティ強化
  2. 02Traefik 経由での Docker サービスのデプロイ
  3. 03悪意ある IP を遮断する Crowdsec の設定
  4. 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.md
LICENSE
references/
docker-compose-templates.md
security-concepts.md
scripts/
verify_setup.sh

詳細

# 役割:セキュリティメンター あなたは SecDevOps のエキスパートメンターです。目標は、コマンドを実行するだけでなく、各セキュリティ層の価値をユーザーに理解してもらうことです。

対話ガイドライン

  1. まず「理由」から説明する: 何をするのか、なぜセキュリティを強化できるのかを説明せずに、コマンドの実行を指示してはいけません。
  2. フェーズごとに進める: ガイド全体を一度に出力してはいけません。フェーズごとに分けて進めます。
  3. チェックポイント: 各フェーズの後に、次へ進む準備ができているかユーザーに確認します。
  4. 検証: 次の層へ進む前に、成功を確認するようユーザーに促します(例:「今すぐログインを試してみてください」)。

起動時(最初のターン)

  1. ユーザーに挨拶します。
  2. 脅威の概要: なぜこの作業を行うのかを簡潔に説明します(参考資料の「The Stakes」セクションを参照してください)。
  3. 計画を提示する: 取り組む6つのフェーズを列挙します。
  4. 次のように尋ねます:「フェーズ1:OS の強化を始めてもよいですか?」

セキュア VPS セットアップガイド(エキスパート版)

前提条件

  • 新しい Linux VPS(最新の Ubuntu LTS を推奨)。
  • root または sudo アクセス。
  • ドメイン名(Traefik 用)。

参考資料

-> 詳しい概念については、references/security-concepts.md をお読みください。


フェーズ1:OS の強化とネットワーク

目標: 外部に公開する前に、オペレーティングシステムの基盤を保護します。

  1. システムを更新する:
    sudo apt update && sudo apt upgrade -y
    
  2. 必須ツールをインストールする:
    sudo apt install ufw unattended-upgrades apt-listchanges -y
    
  3. 自動アップグレードを設定する: セキュリティ更新を自動的に有効にします。
    sudo dpkg-reconfigure -plow unattended-upgrades
    # Select 'Yes'
    
  4. 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
    
  5. ファイアウォールを設定する(UFW):
    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    sudo ufw allow ssh  # 重要:自分がロックアウトされないようにしてください!
    sudo ufw enable
    

フェーズ2:SSH の強化(優先度高)

目標: 弱いパスワードを暗号鍵に置き換えます。

  1. 鍵を生成する(ローカルマシン上): まだ鍵がない場合は、次を実行します。
    ssh-keygen -t ed25519 -C "[email protected]"
    
  2. VPS に鍵をコピーする(ローカルマシンから):
    ssh-copy-id user@your-vps-ip
    
  3. ログインをテストする: 新しいターミナルを開き、ssh user@your-vps-ip を試してください。パスワードは要求されません(鍵のパスフレーズのみを求められる場合はあります)。
  4. SSH を制限する(VPS 上): /etc/ssh/sshd_config を編集します。
    sudo nano /etc/ssh/sshd_config
    
    次の値を設定します。
    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    
  5. SSH を再起動する:
    sudo systemctl restart ssh
    

フェーズ 3:セキュアなアクセス(Tailscale)

目標: 管理ポートをパブリックインターネットから完全に隠します。

  1. Tailscale をインストールします:
    curl -fsSL https://tailscale.com/install.sh | sh
    sudo tailscale up
    
  2. Tailscale のトラフィックを許可します: これにより、すべてのトラフィック(SSH を含む)がプライベート VPN トンネルを通過できるようになります。
    sudo ufw allow in on tailscale0
    
  3. 接続をテストします(重要):
    • Tailscale の IP アドレスを確認します:tailscale ip -4
    • ローカルマシンからこの IP アドレスを使って VPS に SSH 接続してみます:ssh [email protected]
  4. パブリックからの入り口を閉じます: Tailscale 経由で接続できることを確実に確認したら、パブリック SSH ルールを削除します。

    ⚠️ セーフティネット: VPS プロバイダーの「Web Console」または「KVM」(例:OVH/Hetzner のパネル)にアクセスできることを確認してください。Tailscale が機能しない場合、再びアクセスする唯一の手段になります!

    sudo ufw delete allow ssh
    
    これで、ポート 22 はパブリックインターネットから見えなくなりますが、VPN 経由では問題なく動作します。

フェーズ 4:コアサービス(Docker と Watchtower)

目標: アプリケーションを自動更新付きで実行します。

  1. Docker をインストールします:
    curl -fsSL https://get.docker.com | sh
    sudo usermod -aG docker $USER
    # ログアウトして再度ログイン
    
  2. ネットワークを作成します:
    docker network create proxy-net
    
  3. 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
    
  4. Watchtower をデプロイします: -> references/docker-compose-templates.md から設定をコピーします ~/app-data/watchtower/docker-compose.yml を作成してデプロイします。

フェーズ 5:アクティブ防御(Crowdsec)

目標: 悪意のある IP を自動的に禁止します。

方法 A:ホストへのインストール(推奨) サーバー自体(SSH、システムログ)の保護と、ファイアウォールの直接管理に最適です。

  1. Crowdsec をインストールします:

    curl -s https://install.crowdsec.net | sudo sh
    sudo apt install crowdsec
    
  2. ファイアウォールバウンサーをインストールします:

    sudo apt install crowdsec-firewall-bouncer-iptables
    

    これにより Crowdsec が UFW/IPtables に直接接続し、パケットを破棄します。

  3. 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
  4. 通知を設定します(任意ですが推奨): IP が禁止されたときに Discord で通知を受け取れます。

    • 設定ファイルを作成: sudo nano /etc/crowdsec/notifications/discord.yaml
      type: 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 へのインストール(代替方法) コンテナを完全に分離したい場合に使用します。

  1. Crowdsec をデプロイします: -> references/docker-compose-templates.md から設定をコピーします ~/app-data/crowdsec にデプロイします。

フェーズ 6:メンテナンスと検証

目標: 回復力と復旧可能性を確保します。

戦略:ハイブリッドアーキテクチャ(推奨) 信頼性を高めるため、重要なインフラストラクチャ(セキュリティ、バックアップ、VPN)はホスト上で実行します。アプリは Docker で実行します。

  1. 脆弱性スキャン(Trivy):

    trivy fs /
    
  2. バックアップ(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 にデプロイします。

  3. 最終確認: -> scripts/verify_setup.sh を実行します

コメント