Princípios Essenciais do UFW: Regras e Comandos Comuns do Firewall

Introdução

O UFW (uncomplicated firewall) é uma ferramenta de configuração de firewall que roda sobre o iptables, incluído por padrão nas distribuições Ubuntu. Ele fornece uma interface simplificada para configurar casos de uso comuns de firewall via linha de comando.

Este guia em formato de folha de dicas fornece uma referência rápida para casos de uso comuns do UFW e comandos, incluindo exemplos de como permitir e bloquear serviços por porta, interface de rede e endereço IP de origem.

Como Usar Este Guia

  • Este guia está no formato de folha de dicas com trechos de linha de comando autocontidos.
  • Vá para qualquer seção relevante para a tarefa que você está tentando completar.
  • Quando você vir texto destacado nos comandos deste guia, tenha em mente que este texto deve se referir a endereços IP da sua própria rede.

Lembre-se de que você pode verificar sua configuração atual do UFW com sudo ufw status ou sudo ufw status verbose.

Implemente suas aplicações frontend do GitHub usando a Plataforma de Aplicativos DigitalOcean. Deixe a DigitalOcean focar em dimensionar seu aplicativo.

Verificar Status do UFW

Para verificar se o ufw está habilitado, execute:

  1. sudo ufw status
Output
Status: inactive

A saída indicará se o seu firewall está ativo ou não.

Habilitar o UFW

Se você receber uma mensagem Status: inactive ao executar ufw status, significa que o firewall ainda não está habilitado no sistema. Você precisará executar um comando para habilitá-lo.

Por padrão, quando habilitado, o UFW bloqueará o acesso externo a todas as portas em um servidor. Na prática, isso significa que se você estiver conectado a um servidor via SSH e habilitar o ufw antes de permitir o acesso via porta SSH, você será desconectado. Certifique-se de seguir a seção sobre como habilitar o acesso SSH deste guia antes de habilitar o firewall, se este for o seu caso.

Para habilitar o UFW em seu sistema, execute:

  1. sudo ufw enable

Você verá uma saída como esta:

Output
Firewall is active and enabled on system startup

Para ver o que está atualmente bloqueado ou permitido, você pode usar o parâmetro verbose ao executar ufw status, da seguinte forma:

  1. sudo ufw status
Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip

Desabilitar o UFW

Se por algum motivo você precisar desabilitar o UFW, pode fazer isso com o seguinte comando:

  1. sudo ufw disable

Tenha em mente que este comando desabilitará completamente o serviço de firewall em seu sistema.

Bloquear um Endereço IP

Para bloquear todas as conexões de rede que se originam de um endereço IP específico, execute o seguinte comando, substituindo o endereço IP destacado pelo endereço IP que você deseja bloquear:

  1. sudo ufw deny from 203.0.113.100
Output
Rule added

Neste exemplo, from 203.0.113.100 especifica um endereço IP de origem de “203.0.113.100”.

Se você executar sudo ufw status agora, verá o endereço IP especificado listado como negado:

Output
Status: active To Action From -- ------ ---- Anywhere DENY 203.0.113.100

Todas as conexões, entrando ou saindo, são bloqueadas para o endereço IP especificado.

Bloquear uma Sub-rede

Se você precisar bloquear uma sub-rede completa, pode usar o endereço da sub-rede como parâmetro from no comando ufw deny. Isso bloquearia todos os endereços IP na sub-rede de exemplo 203.0.113.0/24:

  1. sudo ufw deny from 203.0.113.0/24
Output
Rule added

Bloquear Conexões de Entrada para uma Interface de Rede

Para bloquear conexões recebidas de um endereço IP específico para uma interface de rede específica, execute o seguinte comando, substituindo o endereço IP destacado pelo endereço IP que você deseja bloquear:

  1. sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added

O parâmetro in indica ao ufw que aplique a regra apenas para conexões recebidas, e o parâmetro on eth0 especifica que a regra se aplica apenas à interface eth0. Isso pode ser útil se você tiver um sistema com várias interfaces de rede (incluindo virtuais) e precisar bloquear o acesso externo a algumas dessas interfaces, mas não a todas.

Permitir um Endereço IP

Para permitir todas as conexões de rede que se originam de um endereço IP específico, execute o seguinte comando, substituindo o endereço IP destacado pelo endereço IP do qual você deseja permitir o acesso:

  1. sudo ufw allow from 203.0.113.101
Output
Rule added

Se você executar sudo ufw status agora, verá uma saída semelhante a esta, mostrando a palavra ALLOW ao lado do endereço IP que acabou de ser adicionado.

Output
Status: active To Action From -- ------ ---- ... Anywhere ALLOW 203.0.113.101

Você também pode permitir conexões de toda uma sub-rede fornecendo a máscara de sub-rede correspondente para um host, como 203.0.113.0/24.

Permitir Conexões Recebidas para uma Interface de Rede

Para permitir conexões de entrada de um endereço IP específico para uma interface de rede específica, execute o seguinte comando, substituindo o endereço IP destacado pelo endereço IP que você deseja permitir:

  1. sudo ufw allow in on eth0 from 203.0.113.102
Output
Rule added

O parâmetro in informa ao ufw para aplicar a regra apenas para conexões de entrada, e o parâmetro on eth0 especifica que a regra se aplica apenas para a interface eth0.

Se você executar sudo ufw status agora, verá uma saída semelhante a esta:

Output
Status: active To Action From -- ------ ---- ... Anywhere on eth0 ALLOW 203.0.113.102

Excluir Regra do UFW

Para excluir uma regra que você configurou anteriormente dentro do UFW, use ufw delete seguido pela regra (allow ou deny) e pela especificação do alvo. O seguinte exemplo exclui uma regra previamente configurada para permitir todas as conexões de um endereço IP de 203.0.113.101:

  1. sudo ufw delete allow from 203.0.113.101
Output
Rule deleted

Outra maneira de especificar qual regra você deseja excluir é fornecendo o ID da regra. Essas informações podem ser obtidas com o seguinte comando:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] Anywhere DENY IN 203.0.113.100 [ 2] Anywhere on eth0 ALLOW IN 203.0.113.102

A partir da saída, você pode ver que existem duas regras ativas. A primeira regra, com os valores destacados, nega todas as conexões provenientes do endereço IP 203.0.113.100. A segunda regra permite conexões na interface eth0 vindas do endereço IP 203.0.113.102.

Como por padrão o UFW já bloqueia todo acesso externo a menos que seja explicitamente permitido, a primeira regra é redundante, então você pode removê-la. Para excluir uma regra pelo seu ID, execute:

  1. sudo ufw delete 1

Você será solicitado a confirmar a operação e garantir que o ID que você está fornecendo se refere à regra correta que você deseja excluir.

Output
Deleting: deny from 203.0.113.100 Proceed with operation (y|n)? y Rule deleted

Se você listar suas regras novamente com sudo ufw status, verá que a regra foi removida.

Listar Perfis de Aplicativos Disponíveis

Após a instalação, aplicativos que dependem de comunicações de rede geralmente configuram um perfil UFW que você pode usar para permitir conexões de endereços externos. Isso muitas vezes é o mesmo que executar ufw allow from, com a vantagem de fornecer um atalho que abstrai os números de porta específicos que um serviço usa e fornece uma nomenclatura amigável ao usuário para serviços referenciados.

Para listar quais perfis estão atualmente disponíveis, execute o seguinte:

  1. sudo ufw app list

Se você instalou um serviço como um servidor web ou outro software dependente de rede e um perfil não foi disponibilizado no UFW, primeiro certifique-se de que o serviço está habilitado. Para servidores remotos, você geralmente terá o OpenSSH prontamente disponível:

Output
Available applications: OpenSSH

Ativar Perfil de Aplicativo

Para ativar um perfil de aplicativo UFW, execute ufw allow seguido pelo nome do perfil de aplicativo que deseja ativar, o qual você pode obter com o comando sudo ufw app list. No exemplo a seguir, estamos ativando o perfil OpenSSH, que permitirá todas as conexões SSH de entrada na porta SSH padrão.

  1. sudo ufw allow “OpenSSH”
Output
Rule added Rule added (v6)

Lembre-se de citar os nomes de perfil que consistem em várias palavras, como Nginx HTTPS.

Desativar Perfil de Aplicativo

Para desativar um perfil de aplicativo que você havia configurado anteriormente dentro do UFW, será necessário remover sua regra correspondente. Por exemplo, considere a seguinte saída de sudo ufw status:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Esta saída indica que o perfil de aplicativo Nginx Full está atualmente ativado, permitindo todas as conexões para o servidor web tanto via HTTP quanto via HTTPS. Se você deseja permitir apenas solicitações HTTPS do e para o seu servidor web, primeiro deverá habilitar a regra mais restritiva, que neste caso seria Nginx HTTPS, e então desativar a regra Nginx Full atualmente ativa:

  1. sudo ufw allow "Nginx HTTPS"
  2. sudo ufw delete allow "Nginx Full"

Lembre-se de que você pode listar todos os perfis de aplicativos disponíveis com sudo ufw app list.

Permitir SSH

Ao trabalhar com servidores remotos, você vai querer garantir que a porta SSH esteja aberta para conexões, para que você consiga fazer login no seu servidor remotamente.

O comando a seguir vai habilitar o perfil de aplicativo OpenSSH UFW e permitir todas as conexões na porta SSH padrão do servidor:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

Embora menos amigável para o usuário, uma sintaxe alternativa é especificar o número da porta exata do serviço SSH, que geralmente é definido como 22 por padrão:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

Permitir SSH de Entrada de um Endereço IP ou Sub-rede Específico

Para permitir conexões de entrada de um endereço IP ou sub-rede específicos, você incluirá uma diretiva from para definir a origem da conexão. Isso exigirá que você também especifique o endereço de destino com um parâmetro to. Para bloquear essa regra apenas para SSH, você limitará o proto (protocolo) para tcp e então usará o parâmetro port e o definirá como 22, a porta padrão do SSH.

O seguinte comando permitirá apenas conexões SSH provenientes do endereço IP 203.0.113.103:

  1. sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Output
Rule added

Você também pode usar um endereço de sub-rede como parâmetro from para permitir conexões SSH de entrada de uma rede inteira:

  1. sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
Output
Rule added

Permitir Rsync de Entrada de um Endereço IP Específico ou Sub-rede

O programa Rsync, que roda na porta 873, pode ser usado para transferir arquivos de um computador para outro.

Para permitir conexões rsync de entrada de um endereço IP específico ou sub-rede, use o parâmetro from para especificar o endereço IP de origem e o parâmetro port para definir a porta de destino 873.
O seguinte comando permitirá apenas conexões Rsync provenientes do endereço IP 203.0.113.103:

  1. sudo ufw allow from 203.0.113.103 to any port 873
Output
Rule added

Para permitir que toda a sub-rede 203.0.113.0/24 possa rsync para seu servidor, execute:

  1. sudo ufw allow from 203.0.113.0/24 to any port 873
Output
Rule added

Permitir Nginx HTTP / HTTPS

Após a instalação, o servidor web Nginx configura alguns perfis UFW diferentes dentro do servidor. Depois de ter o Nginx instalado e habilitado como um serviço, execute o seguinte comando para identificar quais perfis estão disponíveis:

  1. sudo ufw app list | grep Nginx
Output
Nginx Full Nginx HTTP Nginx HTTPS

Para permitir tanto o tráfego HTTP quanto HTTPS, escolha Nginx Completo. Caso contrário, escolha Nginx HTTP para permitir apenas HTTP ou Nginx HTTPS para permitir apenas HTTPS.

O seguinte comando permitirá tanto o tráfego HTTP quanto HTTPS no servidor (portas 80 e 443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

Permitir Apache HTTP / HTTPS

Após a instalação, o servidor web Apache configura alguns perfis UFW diferentes dentro do servidor. Depois de ter o Apache instalado e habilitado como um serviço, execute o seguinte comando para identificar quais perfis estão disponíveis:

  1. sudo ufw app list | grep Apache
Output
Apache Apache Full Apache Secure

Para permitir tanto o tráfego HTTP quanto HTTPS, escolha Apache Completo. Caso contrário, escolha Apache para HTTP ou Apache Seguro para HTTPS.

O seguinte comando permitirá tanto o tráfego HTTP quanto HTTPS no servidor (portas 80 e 443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

Permitir Todo o Tráfego HTTP de Entrada (porta 80)

Servidores web, como o Apache e o Nginx, geralmente escutam as requisições HTTP na porta 80. Se sua política padrão para o tráfego de entrada estiver configurada para descartar ou negar, você precisará criar uma regra UFW para permitir acesso externo na porta 80. Você pode usar tanto o número da porta quanto o nome do serviço (http) como parâmetro para este comando.

Para permitir todas as conexões HTTP (porta 80) de entrada, execute:

  1. sudo ufw allow http
Output
Rule added Rule added (v6)

Uma sintaxe alternativa é especificar o número da porta do serviço HTTP:

  1. sudo ufw allow 80
Output
Rule added Rule added (v6)

Permitir todas as conexões HTTPS de entrada (porta 443)

O HTTPS geralmente é executado na porta 443. Se sua política padrão para o tráfego de entrada estiver configurada para descartar ou negar, você precisará criar uma regra UFW para permitir acesso externo na porta 443. Você pode usar tanto o número da porta quanto o nome do serviço (https) como parâmetro para este comando.

Para permitir todas as conexões HTTPS de entrada (porta 443), execute:

  1. sudo ufw allow https
Output
Rule added Rule added (v6)

Uma sintaxe alternativa é especificar o número da porta do serviço HTTPS:

  1. sudo ufw allow 443
Output
Rule added Rule added (v6)

Permitir todas as conexões HTTP e HTTPS de entrada

Se você deseja permitir tanto o tráfego HTTP quanto o HTTPS, você pode criar uma única regra que permita ambas as portas. Esta utilização requer que você também defina o protocolo com o parâmetro proto, que neste caso deve ser definido como tcp.

Para permitir todas as conexões de entrada HTTP e HTTPS (portas 80 e 443), execute:

  1. sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added Rule added (v6)

Permitir Conexão MySQL de um Endereço IP ou Sub-rede Específica

O MySQL aguarda conexões de clientes na porta 3306. Se o seu servidor de banco de dados MySQL estiver sendo usado por um cliente em um servidor remoto, você precisará criar uma regra UFW para permitir esse acesso.

Para permitir conexões MySQL de entrada de um endereço IP específico ou sub-rede, use o parâmetro from para especificar o endereço IP de origem e o parâmetro port para definir a porta de destino 3306.

O seguinte comando permitirá que o endereço IP 203.0.113.103 se conecte à porta MySQL do servidor:

  1. sudo ufw allow from 203.0.113.103 to any port 3306
Output
Rule added

Para permitir que toda a sub-rede 203.0.113.0/24 possa se conectar ao seu servidor MySQL, execute:

  1. sudo ufw allow from 203.0.113.0/24 to any port 3306
Output
Rule added

Permitir Conexão PostgreSQL de um Endereço IP ou Sub-rede Específica

O PostgreSQL escuta conexões de clientes na porta 5432. Se seu servidor de banco de dados PostgreSQL estiver sendo usado por um cliente em um servidor remoto, é necessário garantir que esse tráfego seja permitido.

Para permitir conexões PostgreSQL de entrada de um endereço IP ou sub-rede específica, especifique a origem com o parâmetro from, e defina a porta como 5432:

  1. sudo ufw allow from 203.0.113.103 to any port 5432
Output
Rule added

Para permitir que toda a sub-rede 203.0.113.0/24 possa se conectar ao seu servidor PostgreSQL, execute:

  1. sudo ufw allow from 203.0.113.0/24 to any port 5432
Output
Rule added

Bloquear Envio de E-mails SMTP

Servidores de e-mail, como Sendmail e Postfix, normalmente utilizam a porta 25 para tráfego SMTP. Se seu servidor não deve enviar e-mails de saída, você pode querer bloquear esse tipo de tráfego. Para bloquear conexões SMTP de saída, execute:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Isto configura o firewall para rejeitar todo o tráfego de saída na porta 25. Se você precisar rejeitar conexões de saída em uma porta diferente, pode repetir este comando e substituir 25 pelo número da porta que deseja bloquear.

Conclusão

O UFW é uma ferramenta poderosa que pode melhorar significativamente a segurança de seus servidores quando configurada corretamente. Este guia de referência abrange algumas regras comuns do UFW que são frequentemente usadas para configurar um firewall no Ubuntu.

A maioria dos comandos neste guia pode ser adaptada para se adequar a diferentes casos de uso e cenários, alterando parâmetros como o endereço IP de origem e/ou a porta de destino. Para obter informações mais detalhadas sobre cada parâmetro de comando e modificadores disponíveis, você pode usar o utilitário man para verificar o manual do UFW:

  1. man ufw

A página oficial do UFW na documentação do Ubuntu é outro recurso que você pode usar como referência para casos de uso e exemplos mais avançados.

Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands