Firewall pfSense em ambiente cloud da Amazon AWS

Muitas pessoas acham que a solução mágica para os problemas de infra estrutura é a migração para “a nuvem”.  A realidade não é bem essa. Quando você migra os servidores da sua rede para a nuvem a unica coisa que o provedor se responsabiliza é a estrutura física que inclui o local, energia, resfriamento e a comunicação de dados. O que vai rodar na infra do provedor é responsabilidade do cliente. Uma boa leitura para esclarecer as duvidas é o artigo “Modelo de responsabilidade compartilhada” da AWS.

Seria bastante simples se simplesmente fosse possível colocar todos os servidores em uma unica rede, todos eles com endereços validos atribuídos ,mas em muitas situações isso não é possível e nem recomendável. É possível restringir a comunicação usando ACLs e grupos de segurança, porem esse tipo de gerencia não é fácil de ser mantida. Quando é necessário ter histórico de log do que foi aceito e o que foi negado ai fica bastante complicado. Sem mencionar que não é possível implementar um IPS sem ter um ponto central por onde passa o trafego.

Antes de começar é importante deixar claro que a AWS cobra os recursos alocados por hora, mês ou ano. Portanto cuidado, pois o uso pode gerar cobranças. Se criar um recurso, exclua ele no fim do teste se não for usar mais! Não deixe instancias rodando enquanto não estiver usando!

A rede para esse artigo é bem simples e segue, no meu entender, a arquitetura tradicional de ambiente “on premise” que conta com um link de Internet conectando no firewall juntamente com todas as redes privadas e o firewall sendo o responsável por controlar a comunicação de todos os segmentos da rede.

Nesse caso escolhi criar duas redes privadas que estão ligadas no firewall e precisam de regras de liberação para se comunicarem ou saírem para a Internet. Apenas lembrando que o tráfego entre duas máquinas na mesma subnet não passam pelo firewall e se precisar restringir tem que usar as funcionalidades de ACLs ou grupos de segurança.

 

Exemplo de rede de teste
Exemplo de rede de teste

 

Como a Amazon realiza mudanças e lança novos serviços muito rapidamente, algumas telas podem não ser exatamente iguais às que são apresentadas nesse tutorial. Se tiver qualquer duvida, no final do post vou adicionar alguns links da documentação da AWS que considero importantes.

Os passos abaixo podem ser usados para implementar qualquer tipo de firewall. Se for criar ambiente de produção, verifique na documentação qual a instancia recomendada, pois o numero máximo de interfaces de rede muda de acordo com o tipo escolhido.

1 – Assim que se logar no console do AWS procure pela opção de “VPC”. Clique nela e na primeira tela clique no botão “Launch VPC Wizard”. Deixe selecionada a primeira opção que é “VPC with a Single Public Subnet” e clique no “Select”. Apos isso escolha um bloco IPv4 privado, defina o nome da VPC, o bloco IPv4 da rede que será a publica e a zona da AWS onde será criada a rede. Repare que a zona selecionada é a “us-east-1c”. É importante que todos os recursos usados sejam criados na mesma zona:

 

 

2 – Após completar a criação da VPC ela aparecera como disponível no menu de “Your VPCs”:

 

3 – Clique no menu de “Subnets” para criar as redes privadas. Já vai aparecer a “VPC_PUBLIC_SUBNET” como disponível:

 

4 – Clique no botão de “Create subnet”. Defina um nome, selecione a VPC, a zona e defina um bloco de IPv4:

 

5 – Apos completar a criação a primeira rede privada vai aparecer juntamente com a rede publica.

 

6 – Clique novamente no botão “Create subnet” para criar a segunda rede. Repita os passos do item 4, trocando apenas o valor do bloco de IPv4:

 

7 – Apos completar a criação a todas as redes necessárias estarão disponíveis para uso;

 

8 – Apos terminada a criação das redes, volte a tela principal do console do AWS e entre na opção de “EC2”. Aqui serão criados os recursos computacionais das VMs. Escolha no lado esquerdo o menu de “Security Groups” para criar as regras de trafego dentro da AWS. clique no botão “Create security group”. Na tela de criação coloque uma descrição em “Security group name” ( sem espaços ) e “Description”. Deixe marcado “VPC” no escopo e selecione a VPC na lista.

 

9 – Em seguida em “Inbound rules” clique no botão de “Add rule” e altere o “Type” para “All traffic”. Em “Source” deixe em “Custom” e informe “0.0.0.0/0” no campo de origem. Também pode especificar o “Source” como “Anywhere”. O resultado será o mesmo. Repita o mesmo processo para o “Outbound rules”:

 

10 – Apos a criação do grupo de segurança, escolha o menu de “Instances” e clique no botão “Launch Instance”. Agora vamos criar uma VM em cada subnet privada. Será apresentada a tela a seguir. Deixe selecionada a primeira opção “Amazon Linux 2 AMI (HVM), SSD Volume Type” e clique no “Select”:

 

11 – Em seguida é necessário informar o tipo de instancia que será criada. Pode deixar em “t2.micro” que pode ser executada sem custos e clique no “Next: Configure Instance Details”.

 

12 – Altere o campo de “Subnet” para selecionar a primeira rede privada. Repare que o segundo campo é o nome que foi definido para a rede. O “Auto-assign Public IP” deve ficar em “Disable” por se tratar de rede privada e pode marcar a opção de “Enable termination protection” para não excluir a VM durante os testes em vez de desligar. Finalizado isso, clique em “Next: Add Storage”:

 

13 – Nessa tela pode deixar no padrão. Os 8GB de disco já são suficientes para os testes. Clique no “Next: Add Tags”:

 

14 – Para ambiente de testes não precisa adicionar nenhuma tag a VM. Clique no “Next: Configure Security Group”

 

15 – Escolha o grupo de segurança que criamos. Ele vai permitir todo o trafego de entrada e saída. Ao finalizar, clique no “Review and Launch”:

 

16 – Será apresentada uma tela com as informações da instancia a ser criada/lançada. Clique no “Launch”;

 

17 – Antes de iniciar a instancia é necessário escolher uma chave SSH que será usada para efetuar login remoto. Se já tiver uma chave, use ela. Caso contrario pode criar uma. Após salvar a chave de acesso clique no “Launch Instances”:

 

18 – Será apresentada a tela abaixo confirmando que a instancia está sendo criada e iniciada.

 

19 – Repita os passos de 10 a 18 para criar a segunda instancia na segunda rede privada. Deixe selecionada a primeira opção “Amazon Linux 2 AMI (HVM), SSD Volume Type” e clique no “Select”:

 

20 – Deixe o tipo em “t2.micro” e clique no “Next: Configure Instance Details”

 

21 –  . Altere o campo de “Subnet” para selecionar a segunda rede privada. Repare que o segundo campo é o nome que foi definido para a rede. O “Auto-assign Public IP” deve ficar em “Disable” por se tratar de rede privada e pode marcar a opção de “Enable termination protection” para não excluir a VM durante os testes em vez de desligar. Finalizado isso, clique em “Next: Add Storage”:

 

22 – Nessa tela pode deixar no padrão. Os 8GB de disco ja são suficientes para os testes. Clique no “Next: Add Tags”:

 

23 – Para ambiente de testes não precisa adicionar nenhuma tag a VM. Clique no “Next: Configure Security Group”

 

24 –  Escolha o grupo de segurança que criamos. Ele vai permitir todo o trafego de entrada e saída. Ao finalizar, clique no “Review and Launch”:

 

25 – Será apresentada uma tela com as informações da instancia a ser criada / lançada. Clique no “Launch”;

 

26 – Antes de iniciar a instancia é necessário escolher uma chave SSH que será usada para efetuar login remoto. Se já tiver uma chave, use ela. Caso contrario pode criar uma. Após salvar a chave de acesso clique no “Launch Instances”:

 

27 – Será apresentada a tela abaixo confirmando que a instancia está sendo criada e iniciada.

 

28 – Apos as duas instancias criadas, ambas aparecerão no menu de “Instances” com o status “running” e “Status Checks” verde:

 

29 – Clique no botão de “Launch Instance” novamente. Clique no “AWS Marketplace” e na barra de procura digite “pfsense”. Ao apertar o “Enter” será exibido o resultado da busca. Clique no botão “Select” da opção “pfSense”:

 

30 – Será exibida a tela com as instancias sugeridas pelo fabricante, o valor por hora do software, infra da AWS e total serão apresentados. clique no “Continue”:

 

31 – Para efeito desse tutorial o tipo minimo que atende é o “t2.small” que é a menor instancia que suporta 3 interfaces de rede – uma publica e duas privadas. Selecione o tipo desejado e clique no Next: Configure Instance Details”:

 

32 – Altere o campo de “Subnet” para selecionar a rede publica. Repare que o segundo campo é o nome que foi definido para a rede. O “Auto-assign Public IP” deve ficar em “Enable” por se tratar da rede publica e pode marcar a opção de “Enable termination protection” para não excluir a VM durante os testes em vez de desligar. Finalizado isso, clique em “Next: Add Storage”:

 

33 – Nessa tela pode deixar no padrão. Os 8GB de disco já são suficientes até para ambiente de produção a não ser que sejam usadas algumas funções mais avançadas como log, cache ou captura de trafego. Clique no “Next: Add Tags”:

 

34 – Para ambiente de testes não precisa adicionar nenhuma tag a VM. Clique no “Next: Configure Security Group”

 

35 – Escolha o grupo de segurança que criamos. Ele vai permitir todo o trafego de entrada e saída. Ao finalizar, clique no “Review and Launch”:

 

36 – Será apresentada uma tela com as informações da instancia a ser criada/lançada. Clique no “Launch”;

 

37 – Antes de iniciar a instancia é necessário escolher uma chave SSH que será usada para efetuar login remoto. Se já tiver uma chave, use ela. Caso contrario pode criar uma. Após salvar a chave de acesso clique no “Launch Instances”:

 

38 – Será apresentada a tela abaixo confirmando que a instancia está sendo criada e iniciada.

 

39 – Ao finalizar a criação da instancia o pfSense vai aparecer na lista com o status “running”. Anote os endereços IPv4 de cada instancia que aparecem na coluna “Private IP Address”:

 

40 – Aguarde aproximadamente 5 minutos e clique na instancia do pfSense. Observe nas propriedades que são exibidas na parte de baixo da tela o campo “IPv4 Public IP”. Este endereço é atribuído dinamicamente a instancia toda vez que ela é iniciada. Nos passos posteriores vamos fixar o IP. Por agora apenas clique o botão direito na instancia do pfSense, escolha o “Instance Settings” e depois “Get System Log”:

 

41 – Na tela do “System Log” vá ate o final e anote a senha informada do “ec2-user”.  Esta senha é gerada aleatoriamente toda vez que a instancia é iniciada enquanto não for realizada a primeira configuração:

 

42 – Abra um browser e acesse o IP que aparece no “IPv4 Public IP” do passo 40 via https. Vai ser apresentada a tela informando que o certificado não é confiável:

 

43 – Ao aceitar o certificado será exibida a tela de login. No primeiro login entre com “ec2-user” e a senha que foi anotada no passo 41. Se nesse meio tempo a instancia foi reiniciada é necessário verificar novamente qual a senha que foi gerada:

 

44 – Apenas clique no “Next”:

 

45 – Apenas clique no “Next”:

 

46 – Informe hostname, domínio e servidores de DNS que quer usar. Se deixar o “Override DNS” serão usados os DNSs que o DHCP da AWS fornecer. Clique no “Next”::

 

47 – Selecione o timezone que deseja usar e clique no “Next”:

 

48 – Defina uma senha para o usuário “admin” e clique no “Next”:

 

49 – Clique no “Reload”:

 

50 – Aguarde ate a configuração seja aplicada:

 

51 – Clique no “Finish”:

 

52 – Será exibido o dashboard do pfSense. Repare que existe somente uma interface que é a “WAN”.

 

53 – Volte ao console da AWS e na lista de instancias clique o botão direito no pfSense, clique em “Instance State” e depois em “Stop”:

 

54 – Confirme o desligamento:

 

55 – Clique no menu “Network Interfaces” e em seguida no botão “Create Network Interface”. Especifique um nome em “Description” e escolha a primeira rede privada:

 

56 – Em “IPv4 Private IP” escolha “Custom” e informe o endereço IP que vai atribuir a interface do firewall nessa rede. Não podem ser usados os endereços .1, .2 e .3 pois são reservados para uso da própria AWS. Em “Security groups” escolha o grupo criado no passo 8:

 

57 – A interface aparecera na lista com o campo “Instance ID” vazio. Repita os passos para criação da segunda interface privada a ser adicionada no pfSense. Clique no botão “Create Network Interface”:

 

58 – Especifique um nome em “Description” e escolha a segunda rede privada:

 

59 – Em “IPv4 Private IP” escolha “Custom” e informe o endereço IP que vai atribuir a interface do firewall nessa rede. Não podem ser usados os endereços .1, .2 e .3 pois são reservados para uso da própria AWS. Em “Security groups” escolha o grupo criado no passo 8:

 

60 – Volte no console da AWS na opção de “VPC” e entre no menu de “Elastic IPs”. Clique no botão “Allocate new address”:

 

61 – Deixe selecionado em escopo “VPC” e “Amazon pool”. Clique no “Allocate”:

 

62 – Será alocado um IPv4 válido e exibido na lista. Clique o botão direito nele e escolha a opção de “Associate address”:

 

63 – Deixe marcado o “Resource type” como “Instance” e escolha o pfSense na lista das instancias:

 

64 – no campo “Private IP” escolha o único IP que deve aparecer:

 

65 – Clique no botão “Associate”:

 

66 – O endereço valido vai aparecer como associado ao IP da interfaces publica do pfSense:

 

67 – Volte para o menu “Network Interfaces” da opção EC2 e clique o botão direito na interface da primeira rede privada. Repare e anote o “MAC address” da interface. Clique em “Attach”:

 

68 – Escolha a instancia do pfSense e clique no botão “Attach”:

 

69 – Repita a operação para a segunda interface. Clique o botão direito na interface da segunda rede privada. Repare e anote o “MAC address” da interface. Clique em “Attach”:

 

70 – Escolha a instancia do pfSense e clique no botão “Attach”:

 

71 – Ambas as interfaces privadas agora estarão associadas com a instancia do pfSense.

 

72 – Volte para o menu “Instances”, clique o botão direito no pfSense, vá em “Instance State” e clique no “Start”:

 

73 – Clique o botão direito do mouse na instancia da primeira rede privada, vá em “Networking” e selecione a opção de “Change Source/Dest. Check”:

 

74 – Clique no “Yes, Disable”:

 

75 – Clique o botão direito do mouse na instancia da segunda rede privada, vá em “Networking” e selecione a opção de “Change Source/Dest. Check”:

 

76 – Clique no “Yes, Disable”:

 

77 – Clique o botão direito do mouse na instancia do pfSense, vá em “Networking” e selecione a opção de “Change Source/Dest. Check”:

 

78 – Clique no “Yes, Disable”:

 

79 – Inicie a instancia do pfSense clicando o botão direito nela e escolhendo “Start” no “Instance State”. Aguarde até o status mudar para “running” e “Status Checks” ficar verde. Apos isso abra um browser e acesse o IP que foi alocado no passo 62. Apos logar vá em “Interfaces” e depois em “Assignments”:

 

80 – Em “Available network ports” escolha a interface com o MAC address do passo 67 e clique no “Add”:

 

81 – Sera criada a interface “LAN”. Repita o passo anterior para adicionar a segunda interface. Em “Available network ports” escolha a interface com o MAC address do passo 69 e clique no “Add”:

 

81 – Sera criada a interface “OPT1”.

 

82 – Clique na interface “LAN”. Ative a interface marcando “Enable Interface”, troque o nome para “LAN1” e em “IPv4 Configuration Type” escolha “Static IPv4”:

 

83 – Em “IPv4 Address” informe o ip  do passo 56 e cloque no botão “Save”:

 

84 – Volte para a tela de “Assignments” e clique na interface “OPT1”. Ative a interface marcando “Enable Interface”, troque o nome para “LAN2” e em “IPv4 Configuration Type” escolha “Static IPv4”:

 

85 – Em “IPv4 Address” informe o ip  do passo 59 e cloque no botão “Save”:

 

86 – Cloque no logo do pfSense para voltar para o dashboard. Repare que na lista de interfaces agora aparecem as 3 interfaces de rede:

 

87 – Clique no menu de “Diagnostics” e escolha  opção de “Ping”:

 

88 – Informe o IP da instancia da primeira rede privada do passo 39 e clique no botão “Ping”. Em “Results” deve aparecer a resposta:

 

89 – Informe o IP da instancia da segunda rede privada do passo 39 e clique no botão “Ping”. Em “Results” deve aparecer a resposta:

 

90 – As instancias das redes privadas não podem ser acessadas diretamente da Internet. Para isso deve ser usada a chave de conexão do passo 17. Primeiramente acesse o pfSense usando a chave:

 

91 – Copie a chave para o pfSense e depois acesse a instancia da primeira rede privada. Para alterar as configurações de rede, edite o arquivo da interface:

 

92 – Ajuste o arquivo de acordo com a necessidade, informando no parâmetro “GATEWAY” o IP do pfSense. No “IPADDR” use o IP que a maquina pegou no DHCP:

 

93 – Assim que terminar a alteração da configuração da interface recarregue a rede com o comando “service network restart”, confira a tabela de roteamento com “route -n” e os IPs da interfaces de rede com “ip addr”. Repita o mesmo procedimento na VM da segunda rede privada:

 

94 – Volte para o pfSense, entre no menu “Firewall”, escolha “NAT” e por fim o “Outbound”. Selecione a opção “Manual Outbound NAT rule generation. (AON – Advanced Outbound NAT)” e clique no botão “Save”. Exclua todas as regras de NAT que existirem.

 

95 – Clique em um dos botões “Add” e preencha os campos de acordo com os dois screenshots abaixo:

 

96 – Ao finalizar a criação, a tela de NAT exibirá apenas a regra recém criada:

 

97 – Entre no menu “Network Interfaces” e desabilite o “Change Source/Dest. Check” das interface do pfSense que foram criadas para as redes privadas. Para isso clique o botão direito na interface, em seguida clique no “Change Source/Dest. Check” e depois marque “Disabled”.  Por fim clique no “Save”:

 

98 – Volte para o console da AWS, Entre no “VPC” e depois no “Route Tables”. Clique no “Create route table”. Defina um nome e selecione a sua VPC. Clique no “Create”:

 

99 – Apos criada a tabela de roteamento, clique na aba “Routes” e em “Edit routes”

 

100 – Clique no “Add route”, em “Destination” informe “0.0.0.0/0” e em “Target” selecione “Network Interface”:

 

101 – Será exibida a lista de interfaces existentes. Como essa tabela de roteamento será para a primeira rede privada ( 10.255.1.0/24 ), selecione a interface do pfSense correspondente a esta rede. Clique em “Save routes”:

 

102 – Após a tabela de roteamento criada, clique o botão direito nela e selecione “Edit subnet associations”

 

103 – Na tela de subnets, selecione a primeira rede privada ( 10.255.1.0/24 ) e clique em “Save”:

 

104 – A tabela de roteamento aparecerá como associada na coluna “Explicit subnet association”:

 

105 – Repita o processo para a segunda rede privada.. Clique no “Create route table”. Defina um nome e selecione a sua VPC. Clique no “Create”:

 

106 – Apos criada a tabela de roteamento, clique na aba “Routes” e em “Edit routes”

 

107 – Clique no “Add route”, em “Destination” informe “0.0.0.0/0” e em “Target” selecione “Network Interface”:

 

108 – Será exibida a lista de interfaces existentes. Como essa tabela de roteamento será para a segunda rede privada ( 10.255.2.0/24 ), selecione a interface do pfSense correspondente a esta rede. Clique em “Save routes”:

 

109 – Após a tabela de roteamento criada, clique o botão direito nela e selecione “Edit subnet associations”

 

110 – Na tela de subnets, selecione a segunda rede privada ( 10.255.2.0/24 ) e clique em “Save”:

 

111 – A tabela de roteamento aparecerá como associada na coluna “Explicit subnet association”:

 

112 – Por fim volte no console do pfSense, sno menu “Firewall” selecione “Rules” e crie as regras de liberação desejadas nas interfaces LAN1 e LAN2. É necessário criar apenas as regras de liberação, pois por padrão o pfSense nega qualquer solicitação. Nesse exemplo os dois servidores das redes privadas podem sair para qualquer destino.

 

Documentação sugerida:

Pares de chaves do Amazon EC2

Interfaces de rede elástica

 

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *