Introdução a firewalls

O SoftLayer fornece dois tipos de serviços de firewall que compartilham alguns componentes da API. Soluções de firewall de dispositivo único têm interação por meio do serviço SoftLayer_Network_Component_Firewall e firewalls de VLAN podem ser acessados com o serviço SoftLayer_Network_Firewall_AccessControlList.

Firewalls de dispositivo único

Listando

Os objetos SoftLayer_Network_Component_Firewall estão conectados ao dispositivo que estão protegendo. A melhor maneira de recuperar uma lista de todos os firewalls que estão protegendo servidores dedicados é uma chamada para SoftLayer_Account::getHardware com uma máscara de objeto para "firewallServiceComponent". Uma lista de firewalls que protegem Cloud Computing Instances pode ser encontrada com SoftLayer_Account::getVirtualGuests usando a mesma 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);

Regras

Listando

Cada objeto SoftLayer_Network_Component_Firewall armazena suas regras na propriedade relacional "rules". Essa propriedade contém uma matriz de objetos SoftLayer_Network_Component_Firewall_Rule. Esses objetos definem a regra de firewall e como ela irá se comportar. Podemos recuperar uma lista dessas regras com SoftLayer_Network_Component_Firewall::getRules.

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

Modificação

Um conjunto de regras de firewall é modificado passando um objeto de modelo SoftLayer_Network_Firewall_Update_Request para SoftLayer_Network_Firewall_Update_Request::createObject. O conjunto de regras inteiro é reescrito com cada solicitação de atualização. Isso significa que é necessário incluir todas as regras anteriores inalteradas com quaisquer modificações ou adições. Isso é realizado facilmente efetuando pull nas regras existentes, conforme descrito acima, em seguida, modificando a matriz reunida.
Cada objeto SoftLayer_Network_Component_Firewall_Update_Request_Rule requer:

  • action - permitir ou negar
  • destinationIpAddress - endereço de destino
  • destinationIpSubnetMask - máscara de sub-rede para destino
  • sourceIpAddress - endereço de origem
  • sourceIpSubnetMask - máscara de sub-rede para endereço de origem
  • protocol - tcp/udp
  • destinationPortRangeStart - primeira porta que a regra irá efetuar
  • destinationPortRangeEnd - última porta que a regra irá efetuar
  • orderValue - ordem na qual regras são aplicadas (mais baixo é antes)
$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]);
    }
}

O objeto de solicitação de atualização requer as propriedades a seguir:

$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 retornará um objeto SoftLayer_Network_Firewall_Update_Request totalmente preenchido e entrará na fila de atualização. A solicitação é geralmente processada dentro de 60 segundos.

Firewalls encaminhados pela VLAN

Firewalls encaminhados pela VLAN fornecem proteção a uma SoftLayer_Network_Vlan inteira, em vez de a um servidor específico. Muitos dos conceitos de firewalls de dispositivo único são convertidos para firewalls encaminhados pela VLAN; no entanto, há algumas pequenas diferenças. O ponto de interação para firewalls encaminhados pela VLAN é o serviço SoftLayer_Network_Firewall_AccessControlList.

Cada VLAN tem dois tipos de firewallInterface: 'inside' e 'outside'. firewallContextAccessControlLists são organizadas por uma direção de 'in' ou 'out'. Atualmente, a Plataforma SoftLayer suporta as firewallInterfaces 'outside' e as ACLs 'in'.

Listando

Uma lista de todos os firewalls encaminhados pela VLAN pode ser reunida com uma chamada para SoftLayer_Account::getNetworkVlans com uma máscara de objeto para 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);
    }
}

Regras

Listando

Cada objeto SoftLayer_Network_Firewall_AccessControlList armazena suas regras na propriedade relacional "rules". Essa propriedade contém uma matriz de objetos SoftLayer_Network_Component_Firewall_Rule. Esses objetos definem a regra de firewall e como ela irá se comportar. Podemos recuperar uma lista dessas regras com 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ção

Um conjunto de regras de firewall é modificado passando um objeto de modelo SoftLayer_Network_Firewall_Update_Request para SoftLayer_Network_Firewall_Update_Request::createObject. O conjunto de regras inteiro é reescrito com cada solicitação de atualização. Isso significa que é necessário incluir todas as regras anteriores inalteradas com quaisquer modificações ou adições. Isso é realizado facilmente efetuando pull nas regras existentes, conforme descrito acima, em seguida, modificando a matriz reunida.
Cada objeto SoftLayer_Network_Component_Firewall_Update_Request_Rule requer:

  • action - permitir ou negar
  • destinationIpAddress - endereço de destino
  • destinationIpSubnetMask - máscara de sub-rede para destino
  • sourceIpAddress - endereço de origem
  • sourceIpSubnetMask - máscara de sub-rede para endereço de origem
  • protocol - tcp/udp
  • destinationPortRangeStart - primeira porta que a regra irá efetuar
  • destinationPortRangeEnd - última porta que a regra irá efetuar
  • orderValue - ordem na qual regras são aplicadas (mais baixo é antes)
$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]);
    }
}

O objeto de solicitação de atualização requer as propriedades a seguir:

$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 retornará um objeto SoftLayer_Network_Firewall_Update_Request totalmente preenchido e entrará na fila de atualização. A solicitação é geralmente processada dentro de 60 segundos.