エンハンスドロードバランサ | さくらのクラウド マニュアル
高機能なプロキシ型ロードバランサ「エンハンスドロードバランサ」の説明ページです。
こんにちは、UOZUです!
今回は、さくらのクラウドの「エンハンスドロードバランサ」を利用する際に、実サーバ(オリジンサーバ)への直接アクセスを制限する方法について紹介します。
エンハンスドロードバランサを利用すると、
クライアント
│
▼
エンハンスドロードバランサ
│
▼
実サーバ
という構成でWebサイトへアクセスできます。
しかし、実サーバにグローバルIPアドレスが設定されている場合、エンハンスドロードバランサを経由せず、実サーバのIPアドレスへ直接アクセスできてしまいます。
そこで今回は、
・プロキシ元IPアドレスを利用したアクセス制限
・オリジンガードを利用したアクセス制限
の2つを確認してみます。
制限前の状態は以下です。エンハンスドロードバランサへのアクセスも、オリジンサーバのアクセスも双方が可能な状態になっています。
# curl -I http://203.0.113.130/index.html
HTTP/1.1 200 OK
date: Sun, 06 Sep 2026 07:44:19 GMT
server: Apache/2.4.63 (AlmaLinux)
last-modified: Sun, 09 Aug 2026 08:12:00 GMT
etag: "9-65898cac78b13"
accept-ranges: bytes
content-length: 9
content-type: text/html; charset=UTF-8
via: 1.1 sac-elb
# curl -I http://198.51.100.189/index.html
HTTP/1.1 200 OK
Date: Sun, 06 Sep 2026 07:44:54 GMT
Server: Apache/2.4.63 (AlmaLinux)
Last-Modified: Sun, 09 Aug 2026 08:12:00 GMT
ETag: "9-65898cac78b13"
Accept-Ranges: bytes
Content-Length: 9
Content-Type: text/html; charset=UTF-8
エンハンスドロードバランサはプロキシ型のロードバランサのため、クライアントから受信したリクエストを実サーバへプロキシします。
そのため、実サーバから見ると、接続元はエンハンスドロードバランサとなります。
エンハンスドロードバランサの「情報」画面を確認すると、「プロキシ元ネットワーク」という項目があります。

このネットワークは、エンハンスドロードバランサが実サーバへ接続する際や、ヘルスチェックを実行する際の送信元となるネットワークです。
つまり、このネットワークからの通信のみを実サーバ側で許可すれば、
インターネット
│
▼
エンハンスドロードバランサ
│
│ (エンハンスドロードバランサからのアクセスのみ許可)
▼
実サーバ
という経路に制限できます。
サーバ内のファイアウォールや、パケットフィルタで制限を行うことで、オリジンサーバ自体へのアクセス制限を行います。
Firewalldで制限を行うなら、serviceからhttpを削除し、エンハンスドロードバランサのプロキシ元IPのみ、tcp 80 へのアクセスを許可する、といった制限が可能です。
[root@uozu-orgin ~]# firewall-cmd --list-all
public (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="203.0.113.160/27" port port="80" protocol="tcp" accept
# curl -I http://203.0.113.130/index.html
HTTP/1.1 200 OK
date: Sun, 06 Sep 2026 07:50:10 GMT
server: Apache/2.4.63 (AlmaLinux)
last-modified: Sun, 09 Aug 2026 08:12:00 GMT
etag: "9-65898cac78b13"
accept-ranges: bytes
content-length: 9
content-type: text/html; charset=UTF-8
via: 1.1 sac-elb
# curl -I http://198.51.100.189/index.html
curl: (7) Failed to connect to 198.51.100.189 port 80 after 0 ms: Could not connect to server
上記方法では、実サーバ側でエンハンスドロードバランサのプロキシ元ネットワークのみを許可しました。
しかし、利用している環境によっては、ネットワークやファイアウォール側で送信元IPアドレスによるアクセス制限を行えない場合もあります。
そのような場合に利用できるのが、エンハンスドロードバランサの「オリジンガード」機能です。
オリジンガードは、エンハンスドロードバランサから実サーバへリクエストを送信する際に、専用のHTTPヘッダーを付与する機能です。
エンハンスドロードバランサに「オリジンガードトークン」を設定すると、実サーバへのリクエストに、
X-Origin-Guard
というHTTPヘッダーが追加されます。
例えば、
X-Origin-Guard: xxxxxxxxxxxxxxxx
のような形です。
実サーバ側では、このヘッダーに設定されたトークンを確認します。
エンハンスドロードバランサ
│
│ X-Origin-Guard: 正しいトークン
▼
実サーバ
│
└─ 許可
ただし、実サーバへ直接アクセスした場合には、正しい X-Origin-Guard ヘッダーが付与されていないため、
クライアント
│
│ X-Origin-Guardなし
▼
実サーバ
│
└─ 403 Forbidden
といった形で拒否できます。
IPアドレスではなく、エンハンスドロードバランサが付与するトークンを使ってアクセスを判定する仕組みです。
それでは、オリジンガードを設定してみます。
さくらのクラウドのコントロールパネルから、対象のエンハンスドロードバランサを開きます。

オリジンガードトークンには、実サーバとの確認に使用するトークンを設定します。
トークンには8~32文字の英数字・記号を指定できます。
例えば、
0Nuiynnsa4rgxxhqggGw
のようなトークンを設定します。

※実際には推測されにくい十分にランダムな文字列を使用してください。また、記事やスクリーンショットに実際のトークンを掲載しないよう注意してください。
設定を反映すると、エンハンスドロードバランサから実サーバへのリクエストに、
X-Origin-Guard: 0Nuiynnsa4rgxxhqggGw
が付与されるようになります。
ただし、ここで重要なのは、エンハンスドロードバランサ側でオリジンガードトークンを設定しただけでは、実サーバへの直接アクセスは拒否されないという点です。
実サーバ側でも X-Origin-Guard の値を検証する設定が必要です。
実サーバがApacheの場合には、mod_rewriteを利用して X-Origin-Guard ヘッダーを確認できます。
例えば以下のように設定します。
[root@uozu-orgin ~]# vi /var/www/html/.htaccess
[root@uozu-orgin ~]# cat /var/www/html/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Origin-Guard} !^0Nuiynnsa4rgxxhqggGw$
RewriteRule ^ - [F]
</IfModule>
正しいトークンが送信されていない場合には、アクセスを拒否します。
エンハンスドロードバランサ経由でアクセスすると、
X-Origin-Guard: 0Nuiynnsa4rgxxhqggGw
が付与されるため、通常どおりWebサイトを表示できます。
一方、実サーバへ直接アクセスすると正しいトークンが存在しないため、アクセスが拒否されます。
# curl -I http://203.0.113.130/index.html
HTTP/1.1 200 OK
date: Sun, 06 Sep 2026 08:05:21 GMT
server: Apache/2.4.63 (AlmaLinux)
last-modified: Sun, 09 Aug 2026 08:12:00 GMT
etag: "9-65898cac78b13"
accept-ranges: bytes
content-length: 9
content-type: text/html; charset=UTF-8
via: 1.1 sac-elb
# curl -I http://198.51.100.189/index.html
HTTP/1.1 403 Forbidden
Date: Sun, 06 Sep 2026 08:05:22 GMT
Server: Apache/2.4.63 (AlmaLinux)
Content-Type: text/html; charset=iso-8859-1
オリジンガードはHTTPヘッダーを利用した仕組みです。そのため、トークンが外部へ漏えいしないように管理することが重要です。
設定ファイルを公開リポジトリへ登録したり、トークンが表示された管理画面のスクリーンショットをそのまま公開したりしないよう注意しましょう。
また、オリジンガードを有効にしただけでは実サーバ側のアクセス制御は行われません。
必ずApacheやNginxなどの実サーバ側で X-Origin-Guard ヘッダーを検証し、トークンが一致しないリクエストを拒否する設定を行います。
今回は、さくらのクラウドのエンハンスドロードバランサを利用する際に、実サーバへの直接アクセスを防ぐ方法について確認しました。
実サーバ側でアクセス元IPアドレスを制限できる場合には、エンハンスドロードバランサの「プロキシ元ネットワーク」を利用することで、ロードバランサ経由の通信だけを許可できます。
一方、IPアドレスによるアクセス制限を行えない環境では、「オリジンガード」を利用する方法があります。
オリジンガードでは、エンハンスドロードバランサが実サーバへのリクエストに X-Origin-Guard ヘッダーを付与し、実サーバ側でトークンを検証することで、エンハンスドロードバランサを経由しないアクセスを抑制できます。
エンハンスドロードバランサを利用する際には、ロードバランサを構築するだけでなく、実サーバへ直接アクセスできる状態になっていないかについても確認しておくとよいでしょう。
今回はここまでです。
最後まで読んでいただき、ありがとうございました!