Compartilhar via


Parte 2.4 - Proteja o Linux usando firewall local e permita acesso HTTP remoto

Aplica-se a: .NET Core 2.1, .NET Core 3.1, .NET 5

Este artigo apresenta como configurar um firewall local para proteger sua máquina virtual (VM) Linux.

Pré-requisitos

Não há pré-requisitos para concluir esta parte do tutorial.

Objetivo desta parte

Você aprenderá a proteger sua VM do Linux configurando um firewall.

Embora não haja pré-requisitos para esta parte, a configuração ideal seguiria as orientações das partes anteriores. Você deve ter o seguinte:

  • Nginx rodando automaticamente e escutando solicitações enviadas na porta 80
  • Nginx configurado como um proxy reverso e roteando solicitações de entrada para um aplicativo ASP.NET Core que está escutando na porta 5000.
  • O aplicativo ASP.NET Core configurado para iniciar automaticamente após a reinicialização do servidor ou quando o processo é interrompido ou trava

Configurar um firewall local para permitir o acesso de computadores remotos

Quase todas as distribuições Linux incluem um firewall local chamado iptables. Este guia para iniciantes é suficiente para um início rápido. O Iptables é um firewall leve, mas poderoso, que usa cadeias de políticas para permitir ou bloquear o tráfego.

De acordo com a página de ajuda da comunidade Ubuntu, por padrão, o iptables é instalado em todas as distribuições oficiais do Ubuntu e é configurado para permitir todo o tráfego.

Embora o iptables seja um firewall leve, não é fácil gerenciar as regras persistentes. Felizmente, existem várias ferramentas de configuração de firewall que facilitam muito a tarefa de configurar regras de firewall no Linux. De acordo com a documentação oficial do firewall do Ubuntu, a ferramenta de configuração de firewall padrão para o Ubuntu é ufw. Esta ferramenta fornece um método mais amigável do que o iptables fornece para criar um firewall baseado em host IPv4 ou IPv6.

Observação

ufw é inicialmente desabilitado por padrão. Portanto, você deve habilitá-lo para poder usá-lo.

A VM do Linux que foi usada ao longo deste tutorial não é protegida por nenhuma regra de firewall. Isso ocorre porque, embora o iptables esteja instalado e em execução, não há regras definidas.

Captura de tela do comando sudo iptables.

O objetivo aqui é permitir que apenas o tráfego HTTP e SSH (Secure Shell) chegue à VM de fora. Para conseguir isso, siga estas etapas:

  1. Antes de habilitar ufwo , verifique se a regra de política padrão está definida como permitir. Caso contrário, você corre o risco de perder a conexão SSH com a VM. A regra padrão é a regra que é processada se nenhuma outra regra for correspondida. Habilitar a regra padrão "permitir" garantirá que o tráfego SSH de entrada não seja bloqueado. Neste ponto, não há nenhuma regra de "negação". Portanto, todo o tráfego de entrada é permitido.
  2. Importante

    Adicione explicitamente as regras de "permissão" SSH e HTTP. Observe também que, se você configurou a porta SSH para um valor diferente do padrão de 22, deverá permitir essa porta. Por exemplo, se você alterou a porta SSH para 2222, execute este comando: sudo ufw allow 2222.

  3. Defina a regra padrão como uma regra de "negação". Isso garante que, se o protocolo for diferente de SSH ou HTTP, a regra padrão de "negação" negará o tráfego. Por exemplo, o tráfego HTTP de entrada será negado.
  4. Ative o ufw.

Os comandos para essas etapas estão listados na captura de tela a seguir.

Captura de tela de seis comandos sudo.

Isso é o que ocorre em cada etapa.

  1. Verifica o status do UFW executando o sudo ufw status verbose comando. Por padrão, o ufw não está habilitado e está inativo.

  2. executa sudo ufw default allow comando. Como não há outra regra além da regra padrão "permitir", todas as portas na VM serão consideradas abertas.

  3. Importante

    Adicione o protocolo SSH à lista de permissões executando o sudo ufw allow ssh comando. Protocol.ssh é um protocolo conhecido e é definido no arquivo /etc/services . Portanto, "ssh" pode ser usado em vez de "22". Lembre-se de que, se você configurar o serviço SSH para escutar em uma porta diferente da porta padrão 22, deverá adicionar explicitamente a outra porta. Por exemplo, se você configurar o SSH para escutar a porta 2222, execute este comando: sudo ufw allow 2222.

  4. Permita o protocolo HTTP executando sudo ufw allow http. HTTP é um protocolo conhecido definido no arquivo /etc/services. Portanto, o nome do protocolo pode ser usado e o sudo ufw allow http comando pode ser executado. Correr sudo ufw allow 80 também é perfeitamente válido.

    Observação

    Depois de permitir os protocolos SSH e HTTP, você desejará adicionar todos os outros protocolos à lista de "negação".

  5. Você pode fazer isso alterando a regra padrão para negar executando o sudo ufw default deny comando. Somente os protocolos SSH e HTTP serão permitidos. Os outros protocolos serão negados.

  6. Habilitar ufw.

Aqui está a sudo ufw status verbose saída depois de concluir este procedimento.

Captura de tela do comando sudo ufw status verbose.

Depois que o firewall estiver configurado, teste se ele funciona.

Testar o firewall local

Testar o firewall é fácil: crie uma regra de "negação" para o protocolo HTTP e tente acessar o site de outro computador. A solicitação deve ser bloqueada.

Antes de criar essa regra de "negação", verifique se o aplicativo está acessível ao navegador em sua configuração atual. Para fazer isso, edite o arquivo C:\Windows\System32\drivers\etc\hosts no computador cliente adicionando o nome do host com bugs e usando o endereço IP público da VM do Linux. O nome do host buggyamb resolve o endereço IP da VM do Linux. Você pode adicionar qualquer nome de host ao arquivo hosts ou tentar se conectar diretamente ao endereço IP público da VM do Linux.

Uma captura de tela da página inicial.

Depois de verificar se as solicitações HTTP podem chegar à VM, tente habilitar uma regra que bloqueie o tráfego HTTP. Isso é garantir que o firewall funcione. Para fazer isso, adicione uma regra de "negação" para HTTP executando sudo ufw deny http. Isso adiciona duas regras de "negação" para o protocolo HTTP (na porta 80). Um é para IPv4, o outro é para IPv6.

Captura de tela do comando sudo ufw deny http.

Abra o navegador novamente e tente acessar o aplicativo ASP.NET Core que está sendo executado no Linux.

Captura de tela da página inválida.

Esta captura de tela mostra o resultado esperado.

Você pode executar um teste semelhante diretamente na VM do Linux usando o wget comando. A captura de tela a seguir mostra as etapas necessárias para o mesmo teste executando wgeto .

Captura de tela dos quatro comandos sudo.

Isso é o que ocorre em cada etapa.

  1. A regra "negar" para o protocolo HTTP foi adicionada.

  2. O wget buggyamb-external comando foi executado. Como você pode imaginar, o nome de host "buggyamb-external" resolve o endereço IP público da VM do Linux. Para fazer isso, edite o /etc/hosts arquivo usando o vi. Como mostrado, wget tentei me conectar a ele, mas nunca consegui. Para sair da operação, você tinha que pressionar CTRL+C.

  3. Uma regra "permitir" para o protocolo HTTP foi adicionada.

  4. A execução do wget buggyamb-external comando novamente produziu resultados diferentes. Desta vez, wget foi possível conectar porque o protocolo HTTP foi permitido. Conforme mostrado, wget baixa o arquivo Index.html para o diretório atual.

Agora você está um passo mais perto de concluir a configuração necessária para depurar o aplicativo ASP.NET Core. Antes de ir para a próxima parte, certifique-se novamente de que o SSH e o HTTP sejam permitidos no firewall local.

Captura de tela do comando sudo ufw status.

Próximas etapas

Parte 2.5 – Copie arquivos do seu ambiente de desenvolvimento para uma VM Linux e, em seguida, extraia os arquivos no Linux.