Gately v0.6.6 リリース
2026年11月12日
ダウンロード v0.6.6 · GitHub Release
セキュリティ強化を中心としたリリースです。すべてのユーザーにアップグレードをお勧めします。
セキュリティ修正
- 送信元リクエストヘッダーの偽装:これまでは訪問者が付けた
X-Real-Ipなどの完全一致するヘッダーだけを削除していました。PHP、WSGI、CGI などのバックエンドはX_Forwarded_ForやX_Real_IPを正規のヘッダーと同じ変数として扱うため、訪問者がバックエンドに任意のクライアントアドレスやアクセスプロトコルを伝えられました。現在は、訪問者が付けた送信元系・送信元ポート系のリクエストヘッダーを、アンダースコア表記の変種も含めて転送前にすべて削除します。転送認証のサブリクエストにも同じ処理を行い、X-Original-URIは Gately が書き込むため、パスで許可を判断する認証サービスが訪問者の値に惑わされることはありません。 - ファイルサービスのログイン試行制限:WebDAV、FTP、SMB のパスワード検証には試行回数の制限がありませんでした。現在は同一の送信元が 15 分間に 10 回失敗すると、ウィンドウが終わるまで拒否します(IPv6 は /64 単位、ログイン成功では回数をリセットしません)。最近検証に成功した認証情報は枠を消費せず、SMB の匿名アクセスの試行は集計に含めません。
- バックアップの復元:アカウントファイルの復元では新しいセッション鍵を使うため、古いバックアップによって、その後のログアウトや「すべてのデバイスからログアウト」で失効したトークンが再び有効になることはありません。展開後の合計が 128 MB を超える、またはファイルが 256 個を超えるバックアップは拒否されます。
- その他:nginx 設定のインポートでブロックのネスト深度を制限しました(深くネストした設定でスタックが尽き、プロセスが終了していました)。300 バイトを超える Host ヘッダーには 400 を返します。ログイン失敗時に監査記録とログへ書き込むユーザー名を 64 文字に切り詰めます。
- 依存関係:Go 1.26.11 標準ライブラリのセキュリティ修正を取り込み、golang.org/x/net、klauspost/compress、andybalholm/brotli を更新しました。ストレージマウントの SMB クライアントはメンテナンスされている cloudsoda/go-smb2 に切り替えました(GO-2026-5051)。
アカウントとセッション
- サーバー側のセッション失効:ログアウト時にそのトークンを失効させます。「設定 → アカウントとセキュリティ → ログインセッション」に「すべてのデバイスからログアウト」(
POST /api/account/sessions/revoke)を追加しました。パスワード、Passkey、サードパーティログイン、fnOS ゲートウェイログインで発行されたセッションがすべて直ちに無効になります。API トークンは影響を受けません。 - 外向きリクエストの制限(
restrictOutbound、デフォルトはオフ):オンにすると、Webhook、通知、IP リスト購読、DDNS コールバック、更新確認、サードパーティログインなど、管理者が設定した外向きリクエストがループバック、プライベート、リンクローカル(169.254.169.254 を含む)のアドレスを拒否します。解決後の IP を接続のたびに検査するため、リダイレクトと DNS リバインディングもカバーします。リバースプロキシのアップストリーム、Wake-on-LAN、ストレージマウントなど内部ネットワーク向けの機能は影響を受けません。 - 低速リクエスト対策:管理ポートはエンドポイントごとにリクエストボディの読み取りを制限します。通常のエンドポイントは 60 秒以内に送信を終える必要があります。バックアップの復元、アップグレードパッケージ、ファイルアップロードなどの大容量エンドポイントは合計時間に上限がありませんが、平均で毎秒 4 KiB 以上の速度で送信し続ける必要があります。
Web サービス
- パス別バックエンドのプレフィックス除去(#86):パス別バックエンドに「転送時にパスのプレフィックスを除去」を追加しました。
/api/zyqd/abcはバックエンドへ/abcとして送られ、バックエンドアドレス自体のパスがその前に付きます。nginx のproxy_pass http://バックエンド/;に相当し、nginx 設定のインポート時に自動で変換されます。 - 訪問者の送信元ポート(#83):「X-Forwarded-* を付与」をオンにすると、
X-Real-PortとX-Forwarded-For-Portをバックエンドに送ります。Gately が CDN やリバースプロキシの背後にある場合は、グローバル設定で「実ポートヘッダー」を指定できます。 - 2 層構成の Gately(#81):外側は WAF だけ、内側がログインを担当する構成では、両方に同じ認証マーカーキーを設定し、外側のサイトで「バックエンドの認証マーカーを信頼」をオンにします。内側で認証済みの訪問者は、外側でも WAF を通りません。
バックアップと復元(#85)
設定の復元に「現在の管理者アカウントを保持」を追加しました。バックアップ内のアカウント、API トークン、管理画面のサードパーティログイン設定は現在の値のままとなり、バックアップに account.json を含めなくてもかまいません。別のインスタンスの設定を移行する場合に便利です。詳しくは 設定 · バックアップと復元 をご覧ください。
不具合修正
- ダイナミック DNS(#84):dynv6 のレコードでメインドメインを
dynv6.net、サブドメインをxxxxと入力した場合に、同期とプロバイダー側レコードの削除が 404 を返す問題を修正しました。xxxx.dynv6.netのゾーンに自動で対応付けられます。
パフォーマンス
- 大量の遮断がある場合でも、遮断リストの追加と削除で CIDR リストを再構築しなくなりました。サイトのルーティングは完全一致のドメインが見つからない場合にだけワイルドカードドメインを比較します。レート制限とログイン失敗記録の期限切れ整理は 1 秒に 1 回までになりました。
- サイトの Basic 認証と WebDAV は bcrypt の検証成功結果を 10 分間キャッシュし、リクエストごとの CPU コストを約 85 ミリ秒からマイクロ秒レベルに下げました。
- ポート転送は splice を使えない場合にバッファを再利用します。リアルタイム接続リストは返す 500 行だけを構築します。送信元系ヘッダーの除去ではメモリ割り当てが発生しなくなりました。
- 管理画面のサイト統計、Docker の状態とログ、ターミナルセッション一覧は、ブラウザーのタブが非表示の間ポーリングを停止します。
アップグレードの注意
- Docker:新しいイメージを取得してコンテナーを再作成します。OpenWrt:新しい
.apk/.ipkを上書きインストールします。fnOS:アプリセンターで新しい.fpkを手動でインストールします。その他の構成は「システム設定」からオンラインでアップグレードできます。 - アップグレード後もログイン済みのセッションは有効です。すべてのデバイスで再ログインさせたい場合は「すべてのデバイスからログアウト」を使用してください。