Introdução
O UFW (Firewall Descomplicado) é 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 no estilo de folha de dicas fornece uma referência rápida para casos de uso e comandos comuns do UFW, 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ê ver texto destacado nos comandos deste guia, lembre-se de que esse texto deve se referir a endereços IP da sua própria rede.
Lembre-se de que você pode verificar seu conjunto de regras UFW atual 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á ativado, execute:
OutputStatus: inactive
A saída indicará se o seu firewall está ativo ou não.
Ativar 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 ativá-lo.
Por padrão, quando ativado, 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 for o seu caso.
Para habilitar o UFW no seu sistema, execute:
Você verá uma saída como esta:
OutputFirewall 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:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
Desativar o UFW
Se por algum motivo você precisar desativar o UFW, você pode fazer isso com o seguinte comando:
Tenha em mente que este comando desativará completamente o serviço de firewall no seu sistema.
Bloquear um Endereço IP
Para bloquear todas as conexões de rede que têm origem em um endereço IP específico, execute o seguinte comando, substituindo o endereço IP destacado pelo endereço IP que deseja bloquear:
OutputRule 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:
OutputStatus: 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 precisar bloquear uma sub-rede inteira, pode utilizar o endereço de 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
:
OutputRule 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:
OutputRule added
O parâmetro in
indica ao ufw
para aplicar 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 ao qual você deseja permitir o acesso:
OutputRule 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 você acabou de adicionar.
OutputStatus: 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 a 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:
OutputRule added
O parâmetro in
diz 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:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
Excluir Regra UFW
Para excluir uma regra que você configurou anteriormente no UFW, use ufw delete
seguido da regra (allow
ou deny
) e da especificação do alvo. O seguinte exemplo excluiria uma regra previamente definida para permitir todas as conexões de um endereço IP de 203.0.113.101
:
OutputRule 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:
OutputStatus: 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 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
provenientes do endereço IP 203.0.113.102
.
Porque por padrão o UFW já bloqueia todo o acesso externo, a menos que explicitamente permitido, a primeira regra é redundante, então você pode removê-la. Para excluir uma regra pelo seu ID, execute:
Você será solicitado a confirmar a operação e garantir que o ID fornecido se refere à regra correta que você deseja excluir.
OutputDeleting:
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.
Lista de 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 é frequentemente 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 os serviços referenciados.
Para listar quais perfis estão atualmente disponíveis, execute o seguinte:
Se você instalou um serviço como um servidor web ou outro software dependente de rede e um perfil não foi disponibilizado dentro do UFW, primeiro certifique-se de que o serviço está habilitado. Para servidores remotos, geralmente você terá o OpenSSH prontamente disponível:
OutputAvailable applications:
OpenSSH
Ativar Perfil de Aplicativo
Para ativar um perfil de aplicativo UFW, execute ufw allow
seguido pelo nome do perfil de aplicativo que você deseja ativar, o qual pode ser obtido com o comando sudo ufw app list
. No exemplo a seguir, estamos ativando o perfil do OpenSSH, o que permitirá todas as conexões SSH de entrada na porta SSH padrão.
OutputRule 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ê configurou anteriormente no UFW, você precisará remover sua regra correspondente. Por exemplo, considere a saída a seguir de sudo ufw status
:
OutputStatus: 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 ao servidor web tanto via HTTP quanto via HTTPS. Se você quiser permitir apenas solicitações HTTPS de e para o seu servidor web, primeiro deverá ativar a regra mais restritiva, que neste caso seria Nginx HTTPS
, e depois desativar a regra atualmente ativa 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ê possa fazer login no seu servidor remotamente.
O comando a seguir irá habilitar o perfil de aplicativo OpenSSH UFW e permitir todas as conexões na porta SSH padrão do servidor:
OutputRule added
Rule added (v6)
Embora menos amigável ao usuário, uma sintaxe alternativa é especificar o número da porta exata do serviço SSH, que geralmente é definido como 22
por padrão:
OutputRule added
Rule added (v6)
Permitir SSH de Entrada de um Endereço IP ou Sub-rede Específicos
Para permitir conexões de entrada de um endereço IP específico ou sub-rede, 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 restringir essa regra apenas ao 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
:
OutputRule 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:
OutputRule 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
:
OutputRule added
Para permitir que toda a sub-rede 203.0.113.0/24
possa rsync
para o seu servidor, execute:
OutputRule 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 ativado como serviço, execute o seguinte comando para identificar quais perfis estão disponíveis:
Output Nginx Full
Nginx HTTP
Nginx HTTPS
Para permitir tanto tráfego HTTP quanto HTTPS, escolha Nginx Full
. Caso contrário, escolha Nginx HTTP
para permitir apenas HTTP ou Nginx HTTPS
para permitir apenas HTTPS.
O seguinte comando permitirá tanto tráfego HTTP quanto HTTPS no servidor (portas 80
e 443
):
OutputRule 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 ativado como serviço, execute o seguinte comando para identificar quais perfis estão disponíveis:
Output Apache
Apache Full
Apache Secure
Para permitir tanto tráfego HTTP quanto HTTPS, escolha Apache Full
. Caso contrário, escolha Apache
para HTTP ou Apache Secure
para HTTPS.
O seguinte comando permitirá tanto tráfego HTTP quanto HTTPS no servidor (portas 80
e 443
):
OutputRule added
Rule added (v6)
Permitir Todo Tráfego HTTP de Entrada (porta 80
)
Servidores web, como o Apache e o Nginx, geralmente escutam por solicitações HTTP na porta 80
. Se a sua política padrão para 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 de entrada (porta 80
), execute:
OutputRule added
Rule added (v6)
Uma sintaxe alternativa é especificar o número da porta do serviço HTTP:
OutputRule added
Rule added (v6)
Permitir Todas as Conexões HTTPS de Entrada (porta 443
)
O HTTPS geralmente é executado na porta 443
. Se a sua política padrão para 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:
OutputRule added
Rule added (v6)
Uma sintaxe alternativa é especificar o número da porta do serviço HTTPS:
OutputRule added
Rule added (v6)
Permitir Todas as Conexões HTTP e HTTPS de Entrada
Se você deseja permitir tanto o tráfego HTTP quanto HTTPS, você pode criar uma única regra que permita ambas as portas. Esse uso requer também que você 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:
OutputRule added
Rule added (v6)
Permitir Conexão MySQL de um Endereço IP ou Sub-rede Específica
O MySQL ouve conexões de cliente na porta 3306
. Se 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 ou sub-rede específicos, 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 comando a seguir permitirá que o endereço IP 203.0.113.103
se conecte à porta MySQL do servidor:
OutputRule added
Para permitir que toda a sub-rede 203.0.113.0/24
possa se conectar ao seu servidor MySQL, execute:
OutputRule added
Permitir Conexão PostgreSQL de um Endereço IP ou Sub-rede Específicos
O PostgreSQL escuta conexões de clientes na porta 5432
. Se o seu servidor de banco de dados PostgreSQL estiver sendo usado por um cliente em um servidor remoto, você precisa garantir que permita esse tráfego.
Para permitir conexões PostgreSQL de entrada de um endereço IP ou sub-rede específicos, especifique a origem com o parâmetro from
e defina a porta como 5432
:
OutputRule added
Para permitir que toda a sub-rede 203.0.113.0/24
possa se conectar ao seu servidor PostgreSQL, execute:
OutputRule added
Bloquear Envio de Email SMTP
Servidores de email, como Sendmail e Postfix, normalmente usam a porta 25
para o tráfego SMTP. Se o seu servidor não deve enviar emails de saída, você pode querer bloquear esse tipo de tráfego. Para bloquear conexões SMTP de saída, execute:
OutputRule added
Rule added (v6)
Isso configura seu firewall para descartar 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 configurado corretamente. Este guia de referência cobre 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 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:
A página oficial do UFW na documentação do Ubuntu é outro recurso que você pode usar como referência para casos de uso mais avançados e exemplos.
Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands