Mise en route avec les pare-feu

SoftLayer propose deux types d'instance de service de pare-feu qui ont des composants d'API en commun. L'interaction avec les solutions de pare-feu pour une seule unité est gérée par le service SoftLayer_Network_Component_Firewall. Les pare-feu pour VLAN sont accessibles via le service SoftLayer_Network_Firewall_AccessControlList.

Pare-feu pour une seule unité

Liste

Tous les objets SoftLayer_Network_Component_Firewall sont associés à l'unité qu'ils protègent. La meilleure solution pour récupérer la liste de tous les pare-feu protégeant des serveurs dédiés est un appel à SoftLayer_Account::getHardware à l'aide d'un masque d'objet de "firewallServiceComponent". Vous trouverez la liste des pare-feu protégeant les CCI (Cloud Computing Instances) à l'aide de SoftLayer_Account::getVirtualGuests avec le même masque d'objet.

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

Règles

Liste

Chaque objet SoftLayer_Network_Component_Firewall stocke ses règles dans la propriété relationnelle "rules". Cette propriété contient une matrice d'objets SoftLayer_Network_Component_Firewall_Rule. Ces objets définissent la règle de pare-feu et son comportement. Nous pouvons récupérer la liste de ces règles avec SoftLayer_Network_Component_Firewall::getRules.

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

Modification

Pour modifier le jeu de règles d'un pare-feu, passez un objet de modèle SoftLayer_Network_Firewall_Update_Request à SoftLayer_Network_Firewall_Update_Request::createObject. Le jeu de règles complet est réécrit à chaque demande de mise à jour. Il est donc nécessaire d'inclure toutes les règles antérieures non modifiées ainsi que la totalité des modifications ou des ajouts. Pour ce faire, vous devez récupérer les règles existantes comme indiqué précédemment, puis modifier la matrice collectée.
Chaque objet SoftLayer_Network_Component_Firewall_Update_Request_Rule nécessite ce qui suit :

  • action - autoriser ou refuser
  • destinationIpAddress - adresse de destination
  • destinationIpSubnetMask - masque de sous-réseau de la destination
  • sourceIpAddress - adresse d'origine
  • sourceIpSubnetMask - masque de sous-réseau de l'adresse d'origine
  • protocol - tcp/udp
  • destinationPortRangeStart - premier port concerné par la règle
  • destinationPortRangeEnd - dernier port concerné par la règle
  • orderValue - ordre d'application des règles (règle de niveau inférieur en premier)
$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'objet de demande mis à jour nécessite les propriétés suivantes :

$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 renvoie un objet SoftLayer_Network_Firewall_Update_Request entièrement rempli et entre dans la file d'attente de mise à jour. La demande est en général traitée dans les 60 secondes.

Pare-feu routés pour VLAN

Les pare-feu routés pour VLAN offrent une protection à tout un SoftLayer_Network_Vlan et non à un serveur particulier. De nombreux concepts s'appliquant aux pare-feu pour une seule unité sont aussi valables pour les pare-feu routés pour VLAN, à quelques petites différences près. Le point d'interaction des pare-feu routés pour VLAN est le service SoftLayer_Network_Firewall_AccessControlList.

Chaque VLAN comporte deux types de firewallInterface : interne ("inside") et externe ("outside"). Les listes de contrôle d'accès firewallContextAccessControlLists sont organisées dans le sens entrant ("in") ou sortant ("out"). Actuellement, la plateforme SoftLayer prend en charge les firewallInterfaces externes ("outside") et les ACL entrantes ("in").

Liste

Pour récupérer la liste de tous les pare-feu routés pour VLAN, lancez un appel à SoftLayer_Account::getNetworkVlans à l'aide d'un masque d'objet de 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);
    }
}

Règles

Liste

Chaque objet SoftLayer_Network_Firewall_AccessControlList stocke ses règles dans la propriété relationnelle "rules". Cette propriété contient une matrice d'objets SoftLayer_Network_Component_Firewall_Rule. Ces objets définissent la règle de pare-feu et son comportement. Nous pouvons récupérer la liste de ces règles avec SoftLayer_Network_Firewall_AccessConrtolList::getRules.

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

Modification

Pour modifier le jeu de règles d'un pare-feu, passez un objet de modèle SoftLayer_Network_Firewall_Update_Request à SoftLayer_Network_Firewall_Update_Request::createObject. Le jeu de règles complet est réécrit à chaque demande de mise à jour. Il est donc nécessaire d'inclure toutes les règles antérieures non modifiées ainsi que la totalité des modifications ou des ajouts. Pour ce faire, vous devez récupérer les règles existantes comme indiqué précédemment, puis modifier la matrice collectée.
Chaque objet SoftLayer_Network_Component_Firewall_Update_Request_Rule nécessite ce qui suit :

  • action - autoriser ou refuser
  • destinationIpAddress - adresse de destination
  • destinationIpSubnetMask - masque de sous-réseau de la destination
  • sourceIpAddress - adresse d'origine
  • sourceIpSubnetMask - masque de sous-réseau de l'adresse d'origine
  • protocol - tcp/udp
  • destinationPortRangeStart - premier port concerné par la règle
  • destinationPortRangeEnd - dernier port concerné par la règle
  • orderValue - ordre d'application des règles (règle de niveau inférieur en premier)
$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'objet de demande mis à jour nécessite les propriétés suivantes :

$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 renvoie un objet SoftLayer_Network_Firewall_Update_Request entièrement rempli et entre dans la file d'attente de mise à jour. La demande est en général traitée dans les 60 secondes.