Introduzione ai firewall

SoftLayer fornisce due tipi di servizio firewall che condividono alcuni componenti API. È possibile interagire con le soluzioni firewall per singolo dispositivo mediante il servizio SoftLayer_Network_Component_Firewall ed è possibile accedere ai firewall VLAN con
il servizio SoftLayer_Network_Firewall_AccessControlList.

Firewall per singolo dispositivo

Elenco

Poiché gli oggetti SoftLayer_Network_Component_Firewall sono collegati al dispositivo per cui stanno fornendo protezione, il miglior modo per richiamare un elenco di tutti i firewall che proteggono dei server dedicati consiste nel richiamare SoftLayer_Account::getHardware con una maschera oggetto per "firewallServiceComponent". Un elenco di firewall che proteggono delle CCI (Cloud Computing Instance) può essere trovato con SoftLayer_Account::getVirtualGuests utilizzando la stessa maschera oggetto.

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

Regole

Elenco

Ogni oggetto SoftLayer_Network_Component_Firewall memorizza le sue regole nella proprietà relazionale "rules". Questa proprietà contiene un array di oggetti SoftLayer_Network_Component_Firewall_Rule. Questi oggetti definiscono la regola firewall e come si comporterà. Possiamo richiamare un elenco di queste regole con SoftLayer_Network_Component_Firewall::getRules.

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

Modifica

Una serie di regole del firewall viene modificata passando un oggetto modello SoftLayer_Network_Firewall_Update_Request a SoftLayer_Network_Firewall_Update_Request::createObject. L'intera serie di regole viene riscritta con ciascuna richiesta di aggiornamento. Questo significa che è necessario includere tutte le vecchie regole non modificate insieme alle eventuali modifiche e aggiunte. Questa operazione può essere eseguita facilmente raccogliendo le regole esistenti come descritto precedentemente e modificando quindi l'array raccolto.
Ciascun oggetto SoftLayer_Network_Component_Firewall_Update_Request_Rule richiede:

  • action - permit o deny
  • destinationIpAddress - indirizzo di destinazione
  • destinationIpSubnetMask - maschera di sottorete per la destinazione
  • sourceIpAddress - indirizzo di origine
  • sourceIpSubnetMask - maschera di sottorete per l'indirizzo di origine
  • protocol - tcp/udp
  • destinationPortRangeStart - prima porta su cui la regola avrà effetto
  • destinationPortRangeEnd - ultima porta su cui la regola avrà effetto
  • orderValue - l'ordine in cui vengono applicate le regole (più basso il valore e prima vengono applicate)
$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]);
    }
}

L'oggetto richiesta di aggiornamento richiede le seguenti proprietà:

$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 restituirà un oggetto SoftLayer_Network_Firewall_Update_Request del tutto compilato che verrà quindi inserito nella coda di aggiornamento. La richiesta viene di norma elaborata entro 60 secondi.

Firewall con instradamento VLAN

I firewall con instradamento VLAN forniscono protezione a una intera SoftLayer_Network_Vlan, invece che
a uno specifico server. Molti dei concetti relativi ai firewall per singolo dispositivo valgono anche per i firewall con instradamento VLAN; esistono tuttavia
delle piccole differenze. Il punto di interazione per i firewall con instradamento VLAN è il servizio SoftLayer_Network_Firewall_AccessControlList.

Ogni VLAN ha due tipi di firewallInterface: 'inside' e 'outisde'. I firewallContextAccessControlLists sono organizzati da una direzione 'in' o 'out'. Attualmente, la piattaforma SoftLayer supporta le firewallInterfaces 'outside' e gli ACL 'in'.

Elenco

Un elenco di tutti i firewall con instradamento VLAN può essere raccolto con una chiamata a SoftLayer_Account::getNetworkVlans con una maschera oggetto per 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);
    }
}

Regole

Elenco

Ogni oggetto SoftLayer_Network_Firewall_AccessControlList memorizza le sue regole nella proprietà relazionale "rules". Questa proprietà contiene un array di oggetti SoftLayer_Network_Component_Firewall_Rule. Questi oggetti definiscono la regola firewall e come si comporterà. Possiamo richiamare un elenco di queste regole con SoftLayer_Network_Firewall_AccessConrtolList::getRules.

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

Modifica

Una serie di regole del firewall viene modificata passando un oggetto modello SoftLayer_Network_Firewall_Update_Request a SoftLayer_Network_Firewall_Update_Request::createObject. L'intera serie di regole viene riscritta con ciascuna richiesta di aggiornamento. Questo significa che è necessario includere tutte le vecchie regole non modificate insieme alle eventuali modifiche e aggiunte. Questa operazione può essere eseguita facilmente raccogliendo le regole esistenti come descritto precedentemente e modificando quindi l'array raccolto.
Ciascun oggetto SoftLayer_Network_Component_Firewall_Update_Request_Rule richiede:

  • action - permit o deny
  • destinationIpAddress - indirizzo di destinazione
  • destinationIpSubnetMask - maschera di sottorete per la destinazione
  • sourceIpAddress - indirizzo di origine
  • sourceIpSubnetMask - maschera di sottorete per l'indirizzo di origine
  • protocol - tcp/udp
  • destinationPortRangeStart - prima porta su cui la regola avrà effetto
  • destinationPortRangeEnd - ultima porta su cui la regola avrà effetto
  • orderValue - l'ordine in cui vengono applicate le regole (più basso il valore e prima vengono applicate)
$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]);
    }
}

L'oggetto richiesta di aggiornamento richiede le seguenti proprietà:

$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 restituirà un oggetto SoftLayer_Network_Firewall_Update_Request del tutto compilato che verrà quindi inserito nella coda di aggiornamento. La richiesta viene di norma elaborata entro 60 secondi.