# プライベート システムへの Webhook の配信

プライベート システムのインターネットへの露出を制限するために、リバース プロキシを使用して、webhook を GitHub からプライベート システムに転送できます。

## リバース プロキシを使用したプライベート システムとの統合について

ci システム、作業管理ツール、カスタム アプリなど、インターネットから直接アクセスできないプライベート システムに GitHub Webhook を配信できます。 リバース プロキシを使用して、 GitHub から Webhook ペイロードを受信し、プライベート システムに配信できます。

リバース プロキシは、クライアントとアプリケーションの間に配置される Web サーバーです。 リバース プロキシは、クライアントから要求を受信し、アプリケーションに転送します。 これにより、インターネット上のクライアントと基盤となるアプリケーションの間で直接通信が行われなくなります。 リバース プロキシには、次のようなさまざまなシステムを使用できます。

* Web サーバー ([nginx](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/) など)
* API ゲートウェイ
* 無料のオープンソース オーバーレイ ネットワーク ([OpenZiti](https://openziti.io) など)
* 商用のイングレス管理ツール ([ngrok](https://ngrok.com/partners/github) など)
* 無料のオープンソース イングレス管理ツール ([zrok](https://zrok.io) など)

リバース プロキシを構成する方法は、使用しているシステムによって異なります。

## リバース プロキシへのトラフィックのセキュリティ保護

リバース プロキシをデプロイするときは、リバース プロキシ プロバイダーが推奨するすべてのプラクティスに従って、基盤となるプロキシ サーバーをセキュリティで保護する必要があります。 さらに、次の手順を実行して、 GitHub からの要求のみがアプリケーションに転送されることを確認する必要があります。

### 受信トラフィックを GitHub Webhook に制限する

Webhook の配信に使用される IP 範囲のサブセットからの HTTPS POST 要求のみを許可するようにリバース プロキシを構成する必要があります。 これにより、リバース プロキシが他の要求を処理または転送しないようにします。

[
`/meta` エンドポイント](/ja/rest/meta/meta#get-github-meta-information)は、GITHUBの IP 範囲を一覧表示する JSON オブジェクトを返します。 Webhook の配信に使用される IP 範囲が `hooks` 要素に一覧表示されます。

### Webhook ペイロードの検証

Webhook がシークレット トークンで構成されている場合、 GitHub には各 webhook ペイロードの暗号化ハッシュが含まれます。 プライベート システムによってアクションが実行される前に、このハッシュを使用して GitHub から受信したペイロードを検証する必要があります。 詳しくは、「[Webhook 配信を検証する](/ja/webhooks/using-webhooks/validating-webhook-deliveries)」をご覧ください。

ペイロード検証は、リバース プロキシまたはプライベート システムのいずれかに実装できます。