開始使用防火牆

SoftLayer 提供防火牆服務的兩種虛擬硬體樣板,共用相同的 API 元件。
單一裝置防火牆解決方案是透過 SoftLayer_Network_Component_Firewall 服務進行互動,而虛擬區域網路防火牆則可以利用 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 秒內處理。

虛擬區域網路遞送的防火牆

虛擬區域網路遞送的防火牆會保護整個 SoftLayer_Network_Vlan 而非特定伺服器。
單一裝置防火牆中的許多概念會轉換成虛擬區域網路遞送的防火牆;然而,其中有一些小小的差異。
虛擬區域網路遞送的防火牆的互動點是 SoftLayer_Network_Firewall_AccessControlList 服務。

每一個虛擬區域網路都有兩種類型的 firewallInterface:'inside' 和 'outisde'。
firewallContextAccessControlLists 是依 'in' 或 'out' 的方向組織。目前「SoftLayer 平台」支援 'outside' firewallInterfaces 及 'in' ACL。

清單

透過呼叫 SoftLayer_Account::getNetworkVlans 並搭配 firewallInterfaces.firewallContextAccessControlLists 的物件遮罩,可以收集所有虛擬區域網路遞送的防火牆清單。

$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 秒內處理。