Cómo empezar con los cortafuegos

SoftLayer proporciona dos versiones de servicio de cortafuegos que comparten algunos componentes de API. Para interactuar con las soluciones de cortafuegos de dispositivo individuales, se utiliza el servicio SoftLayer_Network_Component_Firewall, y para acceder a los cortafuegos de VLAN, se utiliza el servicio SoftLayer_Network_Firewall_AccessControlList.

Cortafuegos de dispositivo individuales

Listado

Cuando se adjuntan objetos SoftLayer_Network_Component_Firewall al dispositivo, proporcionan protección. La mejor forma de recuperar una lista de todos los cortafuegos que protegen los servidores dedicados es invocar SoftLayer_Account::getHardware con una máscara de objeto para "firewallServiceComponent". Puede encontrar una lista de los cortafuegos que protegen las instancias de informática en la nube con SoftLayer_Account::getVirtualGuests utilizando la misma máscara de objeto.

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

Reglas

Listado

Cada objeto SoftLayer_Network_Component_Firewall almacena sus reglas en la propiedad relacional "rules". Esta propiedad contiene una matriz de objetos SoftLayer_Network_Component_Firewall_Rule. Estos objetos definen la regla de cortafuegos y cómo se comportará. Podemos recuperar una lista de estas reglas con SoftLayer_Network_Component_Firewall::getRules.

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

Modificación

Un conjunto de reglas de cortafuegos se modifica pasando un objeto de plantilla SoftLayer_Network_Firewall_Update_Request a SoftLayer_Network_Firewall_Update_Request::createObject. El conjunto de reglas completo se reescribe con cada solicitud de actualización. Esto significa que es necesario incluir todas las reglas pasadas sin modificar junto con las modificaciones o adiciones. Para ello, sólo tiene que incorporar las reglas existentes como se ha descrito anteriormente y modificar la matriz recopilada.
Cada objeto SoftLayer_Network_Component_Firewall_Update_Request_Rule requiere:

  • action: permit o deny
  • destinationIpAddress: dirección de destino
  • destinationIpSubnetMask: máscara de subred de destino
  • sourceIpAddress: dirección de origen
  • sourceIpSubnetMask: máscara de subred de dirección de origen
  • protocol: tcp/udp
  • destinationPortRangeStart: primer puerto al que afectará la regla
  • destinationPortRangeEnd: último puerto al que afectará la regla
  • orderValue: orden en el que se aplican las reglas (cuanto más bajo, antes se aplica)
$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]);
    }
}

El objeto de solicitud de actualización requiere las siguientes propiedades:

$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 devolverá un objeto SoftLayer_Network_Firewall_Update_Request completamente lleno y entrará en la cola de actualización. La solicitud normalmente se procesa en 60 segundos.

Cortafuegos direccionados de VLAN

Los cortafuegos direccionados de VLAN proporcionan protección a una SoftLayer_Network_Vlan completa, en lugar de a un servidor específico. Muchos de los conceptos de los cortafuegos de dispositivo individual se trasladan a los cortafuegos direccionados de VLAN; no obstante, hay algunas pequeñas diferencias. El punto de interacción de los cortafuegos direccionados de VLAN es el servicio SoftLayer_Network_Firewall_AccessControlList.

Cada VLAN tiene dos tipos de firewallInterface: 'interna' y 'externa'. Las propiedades firewallContextAccessControlLists se organizan según la dirección 'in' o 'out'. Actualmente, la plataforma SoftLayer admite las propiedades firewallInterfaces de tipo 'outside' y las ACL de tipo 'in'.

Listado

Puede recopilar una lista de todos los cortafuegos direccionados de VLAN con una llamada a SoftLayer_Account::getNetworkVlans con una máscara de objeto para las 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);
    }
}

Reglas

Listado

Cada objeto SoftLayer_Network_Firewall_AccessControlList almacena sus reglas en la propiedad relacional "rules". Esta propiedad contiene una matriz de objetos SoftLayer_Network_Component_Firewall_Rule. Estos objetos definen la regla de cortafuegos y cómo se comportará. Podemos recuperar una lista de estas reglas 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);

Modificación

Un conjunto de reglas de cortafuegos se modifica pasando un objeto de plantilla SoftLayer_Network_Firewall_Update_Request a SoftLayer_Network_Firewall_Update_Request::createObject. El conjunto de reglas completo se reescribe con cada solicitud de actualización. Esto significa que es necesario incluir todas las reglas pasadas sin modificar junto con las modificaciones o adiciones. Para ello, sólo tiene que incorporar las reglas existentes como se ha descrito anteriormente y modificar la matriz recopilada.
Cada objeto SoftLayer_Network_Component_Firewall_Update_Request_Rule requiere:

  • action: permit o deny
  • destinationIpAddress: dirección de destino
  • destinationIpSubnetMask: máscara de subred de destino
  • sourceIpAddress: dirección de origen
  • sourceIpSubnetMask: máscara de subred de dirección de origen
  • protocol: tcp/udp
  • destinationPortRangeStart: primer puerto al que afectará la regla
  • destinationPortRangeEnd: último puerto al que afectará la regla
  • orderValue: orden en el que se aplican las reglas (cuanto más bajo, antes se aplica)
$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]);
    }
}

El objeto de solicitud de actualización requiere las siguientes propiedades:

$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 devolverá un objeto SoftLayer_Network_Firewall_Update_Request completamente lleno y entrará en la cola de actualización. La solicitud normalmente se procesa en 60 segundos.