ファイアウォール入門

SoftLayer は、同じ API コンポーネントを共有するファイアウォールの 2 つのフレーバーを提供します。単一デバイス・ファイアウォール・ソリューションとは、SoftLayer_Network_Component_Firewall サービスを通して対話し、VLAN ファイアウォールには SoftLayer_Network_Firewall_AccessControlList サービスを使用してアクセスできます。

単一デバイス・ファイアウォール

リスト

SoftLayer_Network_Component_Firewall オブジェクトは、保護するデバイスに接続されます。専用サーバーを保護しているすべてのファイアウォールのリストを取得する最適な方法は、「firewallServiceComponent」のオブジェクト・マスクを指定して SoftLayer_Account::getHardware を呼び出すことです。クラウド・コンピューティング・インスタンスを保護しているファイアウォールのリストは、同じオブジェクト・マスクを使用した SoftLayer_Account::getVirtualGuests によって検出できます。

$client = SoftLayer_SoapClient::getClient('SoftLayer_Account', null, $apiUser, $apiKey);
$objectMask = "mask.firewallServiceComponent";
$client->setObjectMask($objectMask);
$domains = $client->getHardware();
print_r($domains);

ルール

リスト

SoftLayer_Network_Component_Firewall オブジェクトは、「rules」リレーショナル・プロパティーにルールを保管します。このプロパティーには、SoftLayer_Network_Component_Firewall_Rule オブジェクトの配列が入っています。これらのオブジェクトは、ファイアウォール・ルールとその動作を定義します。これらのルールのリストは、SoftLayer_Network_Component_Firewall::getRules を使用して取得できます。

$client = SoftLayer_SoapClient::getClient('SoftLayer_Network_Component_Firewall', 12345, $apiUser, $apiKey);
$rules = $client->getRules();
print_r($rules);

変更

ファイアウォールのルール・セットは、SoftLayer_Network_Firewall_Update_Request テンプレート・オブジェクトを SoftLayer_Network_Firewall_Update_Request::createObject に渡すことによって変更されます。ルール・セット全体は、各更新要求によって再作成されます。つまり、すべての変更や追加のほか、変更されていない過去のルールをすべて組み込む必要があります。この作業は、上記で説明したように既存のルールをプルしてから、収集された配列を変更することにより、簡単に実行できます。
SoftLayer_Network_Component_Firewall_Update_Request_Rule オブジェクトには以下が必要です。

  • action - 許可または拒否
  • destinationIpAddress - 宛先アドレス
  • destinationIpSubnetMask - 宛先のサブネット・マスク
  • sourceIpAddress - 発信元アドレス
  • sourceIpSubnetMask - 発信元アドレスのサブネット・マスク
  • protocol - tcp/udp
  • destinationPortRangeStart - ルールが影響する最初のポート
  • destinationPortRangeEnd - ルールが影響する最後のポート
  • orderValue - 適用されるルールの順序 (低いものほど早い)
$firewallId = 123456;
$firewallClient = SoftLayer_SoapClient::getClient('SoftLayer_Network_Component_Firewall', $firewallId, $apiUser, $apiKey);
$rules = $firewallClient->getRules();
 
// Adding a rule
$newRule = new stdClass();
$newRule->action = 'permit';
$newRule->destinationIpAddress = '172.16.0.1';
$newRule->destinationIpSubnetMask = '255.255.255.255';
$newRule->destinationPortRangeStart = 1;
$newRule->destinationPortRangeEnd = 25;
$newRule->orderValue = count(rules) + 1;
$newRule->protocol = 'tcp';
$newRule->sourceIpAddress = '192.168.1.1';
$newRule->sourceIpSubnetMask = '255.255.255.255';
$rules[] = $newRule;
 
// Modifying a rule
$ipToAllow = '192.168.1.2';
foreach ($rules as $key => $rule) {
    if ($rule->sourceIpAddress == $ipToAllow) {
        $rules[$key]->action = 'deny';
    }
}
 
// Deleting a rule
$ipToDelete = '192.168.1.3';
foreach ($rules as $key => $rule) {
    if($rule->sourceIpAddress == $ipToDelete) {
        unset($rules[$key]);
    }
}

更新要求オブジェクトには、以下のプロパティーが必要です。

$updateRequestClient = SoftLayer_SoapClient::getClient('SoftLayer_Network_Firewall_Update_Request', Null, $apiUser, $apiKey);
$updateRequestTemplate = new stdClass();
$updateRequestTemplate->networkComponentFirewallId = $firewallId;
$updateRequestTemplate->rules = $rules;
$result = $updateRequestClient->createObject($updateRequestTemplate);
print_r($result);

SoftLayer_Network_Firewall_Update_Request::createObject は、完全にデータが取り込まれた SoftLayer_Network_Firewall_Update_Request オブジェクトを返し、このオブジェクトは更新キューに入れられます。この要求は通常、60 秒以内で処理されます。

VLAN 経路指定ファイアウォール

VLAN 経路指定ファイアウォールは、特定のサーバーではなく、SoftLayer_Network_Vlan 全体を保護します。単一デバイス・ファイアウォールの概念の多くが VLAN 経路指定ファイアウォールにも適用されますが、わずかな相違点があります。VLAN 経路指定ファイアウォールの相互作用点は、SoftLayer_Network_Firewall_AccessControlList サービスです。

各 VLAN には、「内側」と「外側」という 2 つのタイプの firewallInterface があります。firewallContextAccessControlLists は、「内」 または「外」の指示で編成されます。現在、SoftLayer プラットフォームは、「外側」の firewallInterfaces と「内側」の ACL をサポートします。

リスト

すべての VLAN 経路指定ファイアウォールのリストは、firewallInterfaces.firewallContextAccessControlLists のオブジェクト・マスクを指定した SoftLayer_Account::getNetworkVlans への呼び出しによって収集できます。

$client = SoftLayer_SoapClient::getClient('SoftLayer_Account', null, $apiUser, $apiKey);
$objectMask = "mask.firewallInterfaces.firewallContextAccessControlLists";
$client->setObjectMask($objectMask);
$vlans = $client->getNetworkVlans();
 
foreach ($vlans as $vlan) {
    if ($vlan->firewallInterfaces) {
        print_r($vlan);
    }
}

ルール

リスト

SoftLayer_Network_Firewall_AccessControlList オブジェクトは、「rules」リレーショナル・プロパティーにルールを保管します。このプロパティーには、SoftLayer_Network_Component_Firewall_Rule オブジェクトの配列が入っています。これらのオブジェクトは、ファイアウォール・ルールとその動作を定義します。これらのルールのリストは、SoftLayer_Network_Firewall_AccessConrtolList::getRules を使用して取得できます。

$vlanFirewalId = 1234;
$client = SoftLayer_SoapClient::getClient('SoftLayer_Network_Firewall_AccessControlList', $vlanFirewalId, $apiUser, $apiKey);
$rules = $client->getRules();
print_r($rules);

変更

ファイアウォールのルール・セットは、SoftLayer_Network_Firewall_Update_Request テンプレート・オブジェクトを SoftLayer_Network_Firewall_Update_Request::createObject に渡すことによって変更されます。ルール・セット全体は、各更新要求によって再作成されます。つまり、すべての変更や追加のほか、変更されていない過去のルールをすべて組み込む必要があります。この作業は、上記で説明したように既存のルールをプルしてから、収集された配列を変更することにより、簡単に実行できます。
SoftLayer_Network_Component_Firewall_Update_Request_Rule オブジェクトには以下が必要です。

  • action - 許可または拒否
  • destinationIpAddress - 宛先アドレス
  • destinationIpSubnetMask - 宛先のサブネット・マスク
  • sourceIpAddress - 発信元アドレス
  • sourceIpSubnetMask - 発信元アドレスのサブネット・マスク
  • protocol - tcp/udp
  • destinationPortRangeStart - ルールが影響する最初のポート
  • destinationPortRangeEnd - ルールが影響する最後のポート
  • orderValue - 適用されるルールの順序 (低いものほど早い)
$vlanFirewalId = 123456;
$firewallClient = SoftLayer_SoapClient::getClient('SoftLayer_Network_Firewall_AccessControlList', $vlanFirewalId, $apiUser, $apiKey);
$rules = $firewallClient->getRules();
 
// Adding a rule
$newRule = new stdClass();
$newRule->action = 'permit';
$newRule->destinationIpAddress = '172.16.0.1';
$newRule->destinationIpSubnetMask = '255.255.255.255';
$newRule->destinationPortRangeStart = 1;
$newRule->destinationPortRangeEnd = 25;
$newRule->orderValue = count(rules) + 1;
$newRule->protocol = 'tcp';
$newRule->sourceIpAddress = '192.168.1.1';
$newRule->sourceIpSubnetMask = '255.255.255.255';
$rules[] = $newRule;
 
// Modifying a rule
$ipToAllow = '192.168.1.2';
foreach ($rules as $key => $rule) {
    if ($rule->sourceIpAddress == $ipToAllow) {
        $rules[$key]->action = 'deny';
    }
}
 
// Deleting a rule
$ipToDelete = '192.168.1.3';
foreach ($rules as $key => $rule) {
    if($rule->sourceIpAddress == $ipToDelete) {
        unset($rules[$key]);
    }
}

更新要求オブジェクトには、以下のプロパティーが必要です。

$updateRequestClient = SoftLayer_SoapClient::getClient('SoftLayer_Network_Firewall_Update_Request', Null, $apiUser, $apiKey);
$updateRequestTemplate = new stdClass();
$updateRequestTemplate-> firewallContextAccessControlListId = $vlanFirewalId;
$updateRequestTemplate->rules = $rules;
$result = $updateRequestClient->createObject($updateRequestTemplate);
print_r($result);

SoftLayer_Network_Firewall_Update_Request::createObject は、完全にデータが取り込まれた SoftLayer_Network_Firewall_Update_Request オブジェクトを返し、このオブジェクトは更新キューに入れられます。この要求は通常、60 秒以内で処理されます。