Como configurar um firewall com UFW no Ubuntu
Introdução
UFW, ou Uncomplicated Firewall, é uma interface para iptables
que visa simplificar o processo de configuração de um firewall. Embora iptables
seja uma ferramenta sólida e flexível, pode ser difícil para iniciantes aprender como usá-la para configurar corretamente um firewall. Se você deseja começar a proteger sua rede e não tem certeza de qual ferramenta usar, o UFW pode ser a escolha certa para você.
Este tutorial mostrará como configurar um firewall com UFW no Ubuntu v18.04 e superior.
Pré-requisitos
Se você estiver usando o Ubuntu versão 16.04 ou inferior, recomendamos que você atualize para uma versão mais recente, pois o Ubuntu não oferece mais suporte para essas versões. Esta coleção de guias irá ajudá-lo a atualizar sua versão do Ubuntu.
Para seguir este tutorial, você precisará de:
Um servidor rodando Ubuntu, junto com um usuário não-root com privilégios
sudo
. Para obter orientação sobre como configurá-los, escolha sua distribuição nesta lista e siga nosso Guia de configuração inicial do servidor.-
O UFW é instalado por padrão no Ubuntu. Se ele foi desinstalado por algum motivo, você pode instalá-lo com
sudo apt install ufw
.
Configure o firewall do Ubuntu com UFW
- Habilitar IPv6
- Configurar políticas padrão
- Permitir conexões SSH
- Habilitando UFW
- Permitir quaisquer outras conexões necessárias
- Negando conexões
- Excluindo regras de firewall
- Verifique o status e as regras do UFW
- Como desativar ou redefinir o firewall no Ubuntu
Passo 1 — Certificando-se de que o IPv6 está ativado
Nas versões recentes do Ubuntu, o IPv6 está habilitado por padrão. Na prática, isso significa que a maioria das regras de firewall adicionadas ao servidor incluirão uma versão IPv4 e uma versão IPv6, esta última identificada por v6
na saída do comando de status do UFW. Para garantir que o IPv6 esteja habilitado, você pode verificar seu arquivo de configuração UFW em /etc/default/ufw
. Abra este arquivo usando nano
ou seu editor de linha de comando favorito:
sudo nano /etc/default/ufw
Em seguida, certifique-se de que o valor de IPV6
esteja definido como yes
. Deveria ficar assim:
IPV6=yes
Salve e feche o arquivo. Se estiver usando nano
, você pode fazer isso digitando CTRL+X
, depois Y
e ENTER
para confirme.
Quando o UFW for habilitado em uma etapa posterior deste guia, ele será configurado para gravar regras de firewall IPv4 e IPv6.
Passo 2 — Configurando políticas padrão
Se você está apenas começando com o UFW, um bom primeiro passo é verificar suas políticas de firewall padrão. Essas regras controlam como lidar com o tráfego que não corresponde explicitamente a nenhuma outra regra.
Por padrão, o UFW está configurado para negar todas as conexões de entrada e permitir todas as conexões de saída. Isso significa que qualquer pessoa que tente acessar seu servidor não conseguirá se conectar, enquanto qualquer aplicativo dentro do servidor poderá acessar o mundo externo. Regras adicionais para permitir serviços e portas específicas estão incluídas como exceções a esta política geral.
Para ter certeza de que conseguirá acompanhar o restante deste tutorial, agora você configurará suas políticas padrão do UFW para tráfego de entrada e saída.
Para definir a política de entrada UFW padrão como deny
, execute:
sudo ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Para definir a política de saída UFW padrão como allow
, execute:
sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Esses comandos definem os padrões para negar conexões de entrada e permitir conexões de saída. Esses padrões de firewall por si só podem ser suficientes para um computador pessoal, mas os servidores normalmente precisam responder às solicitações recebidas de usuários externos. Veremos isso a seguir.
Passo 3 — Permitindo conexões SSH
Se você habilitasse seu firewall UFW agora, ele negaria todas as conexões de entrada. Isso significa que você precisará criar regras que permitam explicitamente conexões de entrada legítimas – conexões SSH ou HTTP, por exemplo – se quiser que seu servidor responda a esses tipos de solicitações. Se estiver usando um servidor em nuvem, você provavelmente desejará permitir conexões SSH de entrada para poder se conectar e gerenciar seu servidor.
Permitindo o perfil do aplicativo OpenSSH UFW
Após a instalação, a maioria dos aplicativos que dependem de conexões de rede registrará um perfil de aplicativo no UFW, que permite aos usuários permitir ou negar rapidamente o acesso externo a um serviço. Você pode verificar quais perfis estão atualmente registrados na UFW com:
sudo ufw app list
Available applications:
OpenSSH
Para habilitar o perfil do aplicativo OpenSSH, execute:
sudo ufw allow OpenSSH
Rule added
Rule added (v6)
Isso criará regras de firewall para permitir todas as conexões na porta 22
, que é a porta que o daemon SSH escuta por padrão.
Permitindo SSH por nome de serviço
Outra maneira de configurar o UFW para permitir conexões SSH de entrada é referenciando o nome do serviço: ssh
.
sudo ufw allow ssh
Rule added
Rule added (v6)
O UFW sabe quais portas e protocolos um serviço usa com base no arquivo /etc/services
.
Permitindo SSH por número de porta
Como alternativa, você pode escrever a regra equivalente especificando a porta em vez do perfil do aplicativo ou do nome do serviço. Por exemplo, este comando funciona da mesma forma que os exemplos anteriores:
sudo ufw allow 22
Rule added
Rule added (v6)
Se você configurou seu daemon SSH para usar uma porta diferente, será necessário especificar a porta apropriada. Por exemplo, se o seu servidor SSH estiver escutando na porta 2222
, você poderá usar este comando para permitir conexões nessa porta:
sudo ufw allow 2222
Rule added
Rule added (v6)
Agora que seu firewall está configurado para permitir conexões SSH de entrada, você pode habilitá-lo.
Passo 4 — Habilitando o UFW
Seu firewall agora deve estar configurado para permitir conexões SSH. Para verificar quais regras foram adicionadas até o momento, mesmo com o firewall ainda desabilitado, você pode usar:
sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Depois de confirmar que você possui uma regra para permitir conexões SSH de entrada, você pode ativar o firewall com:
sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Você receberá um aviso informando que o comando pode interromper as conexões SSH existentes. Você já configurou uma regra de firewall que permite conexões SSH, então não há problema em continuar. Responda ao prompt com y
e pressione ENTER
.
O firewall agora está ativo. Execute o comando sudo ufw status verbose
para ver as regras definidas. O restante deste tutorial aborda como usar o UFW com mais detalhes, como permitir ou negar diferentes tipos de conexões.
Passo 5 — Permitindo outras conexões
Neste ponto, você deve permitir todas as outras conexões às quais seu servidor precisa responder. As conexões que você deve permitir dependem de suas necessidades específicas. Você já sabe como escrever regras que permitem conexões baseadas em um perfil de aplicativo, um nome de serviço ou uma porta; você já fez isso para SSH na porta 22
. Você também pode fazer isso para:
- HTTP na porta 80, que é a usada pelos servidores web não criptografados, usando
sudo ufw permitir http
ousudo ufw permitir 80
- HTTPS na porta 443, que é a que os servidores web criptografados usam, usando
sudo ufw permitir https
ousudo ufw permitir 443
- Apache com HTTP e HTTPS, usando
sudo ufw permitir ‘Apache Full’
- Nginx com HTTP e HTTPS, usando
sudo ufw permitir ‘Nginx Full’
Não se esqueça de verificar quais perfis de aplicativos estão disponíveis para o seu servidor com sudo ufw app list
.
Existem várias outras maneiras de permitir conexões, além de especificar uma porta ou um nome de serviço conhecido. Veremos alguns deles a seguir.
Intervalos de portas específicos
Você pode especificar intervalos de portas com UFW. Alguns aplicativos usam múltiplas portas, em vez de uma única porta.
Por exemplo, para permitir conexões X11, que usam as portas 6000
-6007
, use estes comandos:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
Ao especificar intervalos de portas com UFW, você deve especificar o protocolo (tcp
ou udp
) ao qual as regras devem ser aplicadas. Não mencionamos isso antes porque não especificar o protocolo permite automaticamente ambos os protocolos, o que é aceitável na maioria dos casos.
Endereços IP específicos
Ao trabalhar com UFW, você também pode especificar endereços IP dentro de suas regras. Por exemplo, se você deseja permitir conexões de um endereço IP específico, como um endereço IP comercial ou residencial de 203.0.113.4
, você precisa usar o parâmetro from
, fornecendo então o endereço IP que você deseja permitir:
sudo ufw allow from 203.0.113.4
Rule added
Você também pode especificar uma porta à qual o endereço IP pode se conectar adicionando a qualquer porta
seguido pelo número da porta. Por exemplo, se você deseja permitir que 203.0.113.4
se conecte à porta 22
(SSH), use este comando:
sudo ufw allow from 203.0.113.4 to any port 22
Rule added
Sub-redes
Se quiser permitir uma sub-rede de endereços IP, você poderá fazer isso usando a notação CIDR para especificar uma máscara de rede. Por exemplo, se você quiser permitir todos os endereços IP variando de 203.0.113.1
a 203.0.113.254
você pode usar este comando:
sudo ufw allow from 203.0.113.0/24
Rule added
Da mesma forma, você também pode especificar a porta de destino à qual a sub-rede 203.0.113.0/24
pode se conectar. Novamente, usaremos a porta 22
(SSH) como exemplo:
sudo ufw allow from 203.0.113.0/24 to any port 22
Rule added
Conexões a uma interface de rede específica
Se quiser criar uma regra de firewall que se aplique apenas a uma interface de rede específica, você pode fazer isso especificando “permitir entrada em” seguido do nome da interface de rede.
Você pode procurar suas interfaces de rede antes de continuar. Para fazer isso, use este comando:
ip addr
Output Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
A saída destacada indica os nomes das interfaces de rede. Eles normalmente são nomeados como eth0
ou enp3s2
.
Portanto, se o seu servidor tiver uma interface de rede pública chamada eth0
, você poderá permitir o tráfego HTTP (porta 80
) com este comando:
sudo ufw allow in on eth0 to any port 80
Rule added
Rule added (v6)
Isso permitiria que seu servidor recebesse solicitações HTTP da Internet pública.
Ou, se você quiser que seu servidor de banco de dados MySQL (porta 3306
) escute conexões na interface de rede privada eth1
, por exemplo, você pode usar este comando:
sudo ufw allow in on eth1 to any port 3306
Rule added
Rule added (v6)
Isso permitiria que outros servidores da sua rede privada se conectassem ao seu banco de dados MySQL.
Passo 6 — Negando conexões
Se você não alterou a política padrão para conexões de entrada, o UFW estará configurado para negar todas as conexões de entrada. Geralmente, isso simplifica o processo de criação de uma política de firewall segura, exigindo que você crie regras que permitam explicitamente a passagem de portas e endereços IP específicos.
No entanto, às vezes você desejará negar conexões específicas com base no endereço IP ou sub-rede de origem, talvez porque saiba que seu servidor está sendo atacado a partir daí. Além disso, se quiser alterar sua política de entrada padrão para permitir (o que não é recomendado), você precisará criar regras de negação para quaisquer serviços ou endereços IP que você não usar. não quero permitir conexões.
Para escrever regras deny, você pode usar os comandos descritos anteriormente, substituindo allow por deny.
Por exemplo, para negar conexões HTTP, você poderia usar este comando:
sudo ufw deny http
Rule added
Rule added (v6)
Ou se você quiser negar todas as conexões de 203.0.113.4
você pode usar este comando:
sudo ufw deny from 203.0.113.4
Rule added
Em alguns casos, você também pode bloquear conexões de saída do servidor. Para impedir que todos os usuários usem uma porta no servidor, como a porta 25
para tráfego SMTP, você pode usar deny out
seguido do número da porta:
sudo ufw deny out 25
Rule added
Rule added (v6)
Isso bloqueará todo o tráfego SMTP de saída no servidor.
Passo 7 — Excluindo Regras
Saber como excluir regras de firewall é tão importante quanto saber como criá-las. Existem duas maneiras diferentes de especificar quais regras excluir: pelo número da regra ou pela sua denominação legível por humanos (semelhante à forma como as regras foram especificadas quando foram criadas).
Excluindo uma regra UFW por número
Para excluir uma regra UFW pelo seu número, primeiro você deseja obter uma lista numerada de todas as suas regras de firewall. O comando de status do UFW tem a opção de exibir números ao lado de cada regra, conforme demonstrado aqui:
sudo ufw status numbered
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Se você decidir excluir a regra número 2, aquela que permite conexões da porta 80 (HTTP), você pode especificá-la em um comando de exclusão UFW como este:
sudo ufw delete 2
Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Isso solicitará uma confirmação e excluirá a regra 2, que permite conexões HTTP. Observe que se você tiver o IPv6 habilitado, você também desejará excluir a regra IPv6 correspondente.
Excluindo uma regra UFW por nome
Em vez de usar números de regra, você também pode se referir a uma regra por sua denominação legível por humanos, que é baseada no tipo de regra (normalmente allow
ou deny
) e no serviço nome ou número da porta que foi alvo desta regra ou o nome do perfil do aplicativo, caso tenha sido usado. Por exemplo, se quiser excluir uma regra allow
para um perfil de aplicativo chamado Apache Full
que foi habilitado anteriormente, você pode usar:
sudo ufw delete allow "Apache Full"
Rule deleted
Rule deleted (v6)
O comando delete
funciona da mesma maneira para regras que foram criadas referenciando um serviço por seu nome ou porta. Por exemplo, se você definiu anteriormente uma regra para permitir conexões HTTP com sudo ufw permitir http
, é assim que você pode excluir essa regra:
sudo ufw delete allow http
Rule deleted
Rule deleted (v6)
Como os nomes dos serviços são intercambiáveis com os números das portas ao especificar regras, você também pode referir-se à mesma regra como allow 80
, em vez de allow http
:
sudo ufw delete allow 80
Rule deleted
Rule deleted (v6)
Ao excluir regras UFW por nome, as regras IPv4 e IPv6 serão excluídas, se existirem.
Passo 8 — Verificando o status e as regras do UFW
A qualquer momento, você pode verificar o status do UFW com este comando:
sudo ufw status verbose
Se o UFW estiver desabilitado, o que é o padrão, você verá algo assim:
Status: inactive
Se o UFW estiver ativo, o que deveria estar se você seguiu a Etapa 3, a saída dirá que está ativo e listará todas as regras definidas. Por exemplo, se o firewall estiver configurado para permitir conexões SSH (porta 22
) de qualquer lugar, a saída poderá ser semelhante a esta:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Use o comando status
se quiser verificar como o UFW configurou o firewall.
Passo 9 — Desative ou redefina o Firewall
Se decidir que não deseja usar o firewall UFW, você pode desativá-lo com este comando:
sudo ufw disable
Firewall stopped and disabled on system startup
Quaisquer regras que você criou com o UFW não estarão mais ativas. Você sempre pode executar sudo ufw enable
se precisar ativá-lo mais tarde.
Se você já tiver regras UFW configuradas, mas decidir recomeçar, poderá usar o comando reset:
sudo ufw reset
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'
Isso desativará o UFW e excluirá quaisquer regras definidas anteriormente. Isso deve lhe proporcionar um novo começo com o UFW. Lembre-se de que as políticas padrão não serão alteradas para suas configurações originais, caso você as modifique a qualquer momento.
Implante seus aplicativos frontend do GitHub usando DigitalOcean App Platform. Deixe a DigitalOcean se concentrar em dimensionar seu aplicativo.
Conclusão
Seu firewall agora está configurado para permitir (pelo menos) conexões SSH. Certifique-se de permitir quaisquer outras conexões de entrada que seu servidor exija, ao mesmo tempo que limita quaisquer conexões desnecessárias, para que seu servidor seja funcional e seguro.
Para saber mais sobre configurações UFW mais comuns, confira o tutorial UFW Essentials: Common Firewall Rules and Commands.