Erste Schritte mit Firewalls

SoftLayer stellt zwei Versionen von Firewall-Services zur Verfügung, die gewisse API-Komponenten gemeinsam nutzen. Die Interaktion der Firewall-Lösungen für Einzelgeräte erfolgt über den SoftLayer_Network_Component_Firewall-Service. Auf die VLAN-Firewalls kann mit dem SoftLayer_Network_Firewall_AccessControlList-Service zugegriffen werden.

Firewall für Einzelgeräte

Liste

SoftLayer_Network_Component_Firewall-Objekte werden an die Einheit angehängt, die geschützt werden soll. Die beste Möglichkeit, eine Liste aller Firewalls abzurufen, die dedizierte Server schützen, besteht im Aufruf von SoftLayer_Account::getHardware mit einer Objektmaske für "firewallServiceComponent". Eine Liste der Firewalls zum Schutz von CCIs (Cloud-Computing-Instanzen) erhalten Sie über SoftLayer_Account::getVirtualGuests, wenn Sie die gleiche Objektmaske verwenden.

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

Regeln

Liste

Jedes SoftLayer_Network_Component_Firewall-Objekt speichert seine Regeln in der relationalen Eigenschaft "rules". Diese Eigenschaft enthält ein Array von SoftLayer_Network_Component_Firewall_Rule-Objekten. Diese Objekte definieren wiederum die Firewallregel und deren Verhalten. Wir können eine Liste dieser Regeln abrufen über SoftLayer_Network_Component_Firewall::getRules.

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

Änderung

Sie können den Regelsatz einer Firewall ändern, indem Sie ein SoftLayer_Network_Firewall_Update_Request-Vorlagenobjekt an SoftLayer_Network_Firewall_Update_Request::createObject übergeben. Der gesamte Regelsatz wird bei jeder Aktualisierungsanforderung neu geschrieben. Das bedeutet, dass Sie alle bisherigen Regeln, so wie sie sind, mit allen Änderungen oder Ergänzungen aufführen müssen. Dies geschieht ganz einfach, indem Sie die bestehenden Regeln wie oben beschrieben mit einer Pull-Operation extrahieren und anschließend den zusammengestellten Array ändern.
Für jedes SoftLayer_Network_Component_Firewall_Update_Request_Rule-Objekt muss Folgendes angegeben werden:

  • action - zulassen oder verweigern
  • destinationIpAddress - Zieladresse
  • destinationIpSubnetMask - Teilnetzmaske für Zieladresse
  • sourceIpAddress - Ursprungsadresse
  • sourceIpSubnetMask - Teilnetzmaske für Ursprungsadresse
  • protocol - TCP/UDP
  • destinationPortRangeStart - erster Port, auf den die Regel angewendet wird
  • destinationPortRangeEnd - letzter Port, auf den die Regel angewendet wird
  • orderValue - Reihenfolge, in der die Regeln angewendet werden (niedrigerer Wert bedeutet früher)
$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]);
    }
}

Für das Objekt zur Aktualisierungsanforderung müssen folgende Eigenschaften angegeben werden:

$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 gibt ein komplett gefülltes SoftLayer_Network_Firewall_Update_Request-Objekt zurück, es wird dann in die Aktualisierungswarteschlange gestellt. Die Anforderung wird normalerweise innerhalb von 60 Sekunden verarbeitet.

Firewalls mit VLAN-Routing

Firewalls mit VLAN-Routing bieten Schutz für ein ganzes SoftLayer_Network_Vlan und nicht nur für einen bestimmten Server. Viele der Konzepte von Firewalls für Einzelgeräte lassen sich auch auf Firewalls mit VLAN-Routing übertragen. Es gibt jedoch einige geringfügige Unterschiede. Der Interaktionspunkt für Firewalls mit VLAN-Routing ist der SoftLayer_Network_Firewall_AccessControlList-Service.

Jedes VLAN hat zwei Arten von firewallInterface: 'inside' und 'outside'. „firewallContextAccessControlLists“ sind durch eine Richtungsangabe „in“ oder „out“ organisiert. Derzeit unterstützt die SoftLayer-Plattform die „firewallInterfaces“ mit dem Wert „outside“ und die ACLs mit dem Wert „in“.

Liste

Eine Liste aller Firewalls mit VLAN-Routing können Sie mit einem Aufruf von SoftLayer_Account::getNetworkVlans und einer Objektmaske für „firewallInterfaces.firewallContextAccessControlLists“ zusammenstellen.

$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);
    }
}

Regeln

Liste

Jedes SoftLayer_Network_Firewall_AccessControlList-Objekt speichert seine Regeln in der relationalen Eigenschaft "rules". Diese Eigenschaft enthält ein Array von SoftLayer_Network_Component_Firewall_Rule-Objekten. Diese Objekte definieren wiederum die Firewallregel und deren Verhalten. Wir können eine Liste dieser Regeln abrufen mithilfe von SoftLayer_Network_Firewall_AccessConrtolList::getRules.

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

Änderung

Sie können den Regelsatz einer Firewall ändern, indem Sie ein SoftLayer_Network_Firewall_Update_Request-Vorlagenobjekt an SoftLayer_Network_Firewall_Update_Request::createObject übergeben. Der gesamte Regelsatz wird bei jeder Aktualisierungsanforderung neu geschrieben. Das bedeutet, dass Sie alle bisherigen Regeln, so wie sind sind, mit allen Änderungen oder Ergänzungen aufführen müssen. Dies geschieht ganz einfach, indem Sie die bestehenden Regeln wie oben beschrieben mit einer Pull-Operation extrahieren und anschließend den zusammengestellten Array ändern.
Für jedes SoftLayer_Network_Component_Firewall_Update_Request_Rule-Objekt muss Folgendes angegeben werden:

  • action - zulassen oder verweigern
  • destinationIpAddress - Zieladresse
  • destinationIpSubnetMask - Teilnetzmaske für Zieladresse
  • sourceIpAddress - Ursprungsadresse
  • sourceIpSubnetMask - Teilnetzmaske für Ursprungsadresse
  • protocol - TCP/UDP
  • destinationPortRangeStart - erster Port, auf den die Regel angewendet wird
  • destinationPortRangeEnd - letzter Port, auf den die Regel angewendet wird
  • orderValue - Reihenfolge, in der die Regeln angewendet werden (niedrigerer Wert bedeutet früher)
$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]);
    }
}

Für das Objekt zur Aktualisierungsanforderung müssen folgende Eigenschaften angegeben werden:

$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 gibt ein komplett gefülltes SoftLayer_Network_Firewall_Update_Request-Objekt zurück, es wird dann in die Aktualisierungswarteschlange gestellt. Die Anforderung wird normalerweise innerhalb von 60 Sekunden verarbeitet.