3.4. マルチポートサービスとロードバランサー
マルチポートのロードバランサーサービスを作成する場合、LVS ルーターはどのトポロジーでも追加の設定が必要になります。HTTP (ポート 80) および HTTPS (ポート 443) などの異なる関連するプロトコルをバンドル化するファイアウォールマークを使用したり、FTP などの実際のマルチポートプロトコルを用いてロードバランサーを使用したりする場合、マルチポートサービスは人為的に作成されます。どちらの場合でも、LVS ルーターはファイアウォールマークを使用して異なるポートに送信されるパケットを認識しますが、同じファイアマークが付けられているため同様に処理する必要があります。また、ファイアウォールマークを永続性と組み合わせると、永続性パラメーターによって指定された期間内に接続が発生する限り、クライアントマシンからの接続は同じホストへルーティングされます。
実サーバー上で負荷を分散するために使用されるメカニズムである IPVS は、パケットに割り当てられたファイアウォールマークを認識しますが、IPVS 自体はファイアウォールを割り当てできません。ファイアウォールマークの 割り当て は、ネットワークパケットフィルターである iptables が行う必要があります。Red Hat Enterprise Linux 7 のデフォルトのファイアウォール管理ツールは、
firewalld
で、iptables の設定に使用できます。iptables を直接使用することもできます。Red Hat Enterprise Linux 7 で iptables を使用する方法については、Red Hat Enterprise Linux 7 セキュリティーガイド を参照してください。
3.4.1. firewalld を使用したファイアウォールマークの割り当て リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
管理者は
firewalld
の firewall-cmd ユーティリティーを使用して、特定のポートに送信されるパケットにファイアウォールマークを割り当てることができます。
必要に応じて、
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
システム起動時に
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
firewalld
が実行されていることを確認します。
systemctl status firewalld
# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since Tue 2016-01-26 05:23:53 EST; 7h ago
firewalld
を開始するには、以下を入力します。
systemctl start firewalld
# systemctl start firewalld
firewalld
が有効な状態で開始するようにするには、以下を実行します。
systemctl enable firewalld
# systemctl enable firewalld
ここでは、HTTP と HTTPS をバンドルする方法を例を用いて説明しますが、FTP も一般的に使用されるクラスター化されたマルチポートプロトコルです。
ファイアウォールマークを使用する場合の基本ルールとして、Keepalived でファイアウォールマークを使用する各プロトコルには、ファイアウォールマークをネットワークパケットに割り当てるための同等のファイアウォールルールが必要になります。
ネットワークパケットのフィルタールールを作成する前に、すでに他のルールが存在しないか確認します。これを行うには、シェルプロンプトを開いて、
root
でログインして以下のコマンドを実行します。
firewall-cmd --list-rich-rules
# firewall-cmd --list-rich-rules
リッチルールが存在しない場合は、プロンプトがすぐに再表示されます。
firewalld
がアクティブでリッチルールが存在する場合は、ルールのセットが表示されます。
すでに存在するルールが重要である場合は、
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
--permanent オプションは設定を永続化しますが、コマンドは次回のシステム起動時にのみ有効になります。設定を即座に反映する必要がある場合は、--permanent オプションを省略してコマンドを繰り返し実行します。
/etc/firewalld/zones/
の内容をチェックし、維持するルールを安全な場所にコピーしてから手順を続行します。次の形式のコマンドを使用して、不要なリッチルールを削除します。firewall-cmd --zone=zone --remove-rich-rule='rule' --permanent
firewall-cmd --zone=zone --remove-rich-rule='rule' --permanent
最初に設定するロードバランサーに関連するファイアウォールルールは、Keepalived サービスの VRRP トラフィックを許可します。ターミナルで以下のコマンドを入力します。
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
ゾーンを省略すると、デフォルトのゾーンが使用されます。
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
# firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
以下のルールは、ファイアウォールマーク
80
をポート 80 および 443 上でフローティング IP アドレス n.n.n.n が宛先となる受信トラフィックに割り当てます。
ゾーンを省略すると、デフォルトのゾーンが使用されます。
firewalld
のリッチ言語コマンドの使用に関する詳細は、Red Hat Enterprise Linux 7 セキュリティーガイド を参照してください。
3.4.2. iptables を使用したファイアウォールマークの割り当て リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
特定ポート宛のパケットにファイアウォールマークを割り当てる場合、管理者は iptables を使用できます。
ここでは、HTTP と HTTPS をバンドルする方法を例を用いて説明しますが、FTP も一般的に使用されるクラスター化されたマルチポートプロトコルです。
ファイアウォールマークを使用する場合の基本ルールとして、Keepalived でファイアウォールマークを使用する各プロトコルには、ファイアウォールマークをネットワークパケットに割り当てるための同等のファイアウォールルールが必要になります。
ネットワークパケットのフィルタールールを作成する前に、すでに他のルールが存在しないか確認します。これを行うには、シェルプロンプトを開いて、
root
でログインして以下のコマンドを実行します。
/usr/sbin/service iptables status
iptables が実行されていない場合、すぐにプロンプトが再出現します。
iptables がアクティブな場合は、一連のルールが表示されます。ルールが存在する場合は、以下のコマンドを実行します。
/sbin/service iptables stop
すでに存在するルールが重要である場合は、
/etc/sysconfig/iptables
の内容をチェックし、維持するルールを安全な場所にコピーしてから手順を続行します。
ファイアウォールルールの設定に関連する最初のロードバランサーは、Keepalived サービスの VRRP トラフィックを許可します。
/usr/sbin/iptables -I INPUT -p vrrp -j ACCEPT
/usr/sbin/iptables -I INPUT -p vrrp -j ACCEPT
以下のルールは、ファイアウォールマーク
80
をポート 80 および 443 上でフローティング IP アドレス n.n.n.n が宛先となる受信トラフィックに割り当てます。
/usr/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 -m multiport --dports 80,443 -j MARK --set-mark 80
/usr/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 -m multiport --dports 80,443 -j MARK --set-mark 80
初めてルールを発行する前に、
root
としてログインし、iptables のモジュールをロードする必要があります。
上述の iptables コマンドの n.n.n.n は、使用中の HTTP および HTTPS 仮想サーバーのフローティング IP で置き換える必要があります。これらのコマンドは、該当するポート上の VIP が送信先となっている全トラフィックをファイアウォールマーク 80 に割り当てることと同様の効果があります。これが IPVS に認識され、適切に転送されます。
警告
上記のコマンドは即座に有効になりますが、システムを再起動すると保持されません。