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:
OutputStatus: 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:
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
Desabilitar o UFW
Se por algum motivo você precisar desabilitar o UFW, pode fazer isso com o seguinte comando:
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:
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 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
:
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
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:
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 acabou de ser adicionado.
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 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:
OutputRule 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:
OutputStatus: 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
:
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 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:
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.
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.
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:
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:
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 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.
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ê havia configurado anteriormente dentro do UFW, será necessário remover sua regra correspondente. Por exemplo, considere a seguinte saída 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 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:
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:
OutputRule 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:
OutputRule 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
:
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 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 habilitado como um serviço, execute o seguinte comando para identificar quais perfis estão disponíveis:
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
):
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 habilitado como um serviço, execute o seguinte comando para identificar quais perfis estão disponíveis:
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
):
OutputRule 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:
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 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:
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 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:
OutputRule 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:
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í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
:
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 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:
OutputRule 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:
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