Introdução
O UFW, ou Firewall Descomplicado, é uma interface para iptables
que visa simplificar o processo de configuração de um firewall. Enquanto o iptables
é uma ferramenta sólida e flexível, pode ser difícil para iniciantes aprender como usá-lo para configurar corretamente um firewall. Se você está procurando 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 o UFW no Ubuntu v18.04 e versões posteriores.
Pré-requisitos
Se você estiver usando o Ubuntu versão 16.04 ou inferior, recomendamos que você faça upgrade para uma versão mais recente, já que o Ubuntu não fornece 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 de
sudo
. Para orientações sobre como configurar isso, por favor escolha sua distribuição desta lista e siga nosso Guia de Configuração Inicial do Servidor. -
O UFW é instalado por padrão no Ubuntu. Se foi desinstalado por algum motivo, você pode instalá-lo com
sudo apt install ufw
.
Configurar o firewall do Ubuntu com UFW
- Ativar IPv6
- Configurar Políticas Padrão
- Permitir Conexões SSH
- Habilitar UFW
- Permitir Outras Conexões Necessárias
- Negar Conexões
- Excluindo Regras do Firewall
- Verificar o Status e as Regras do UFW
- Como Desativar ou Reiniciar o Firewall no Ubuntu
Passo 1 — Certificar-se de que o IPv6 está Habilitado
Nas versões mais recentes do Ubuntu, o IPv6 está habilitado por padrão. Na prática, isso significa que a maioria das regras do firewall adicionadas ao servidor incluirá tanto uma versão IPv4 quanto uma versão IPv6, esta última identificada por v6
dentro da saída do comando de status do UFW. Para garantir que o IPv6 esteja habilitado, você pode verificar o arquivo de configuração do UFW em /etc/default/ufw
. Abra este arquivo usando o nano
ou o seu editor de linha de comando favorito:
Em seguida, certifique-se de que o valor de IPV6
esteja definido como yes
. Deverá ficar assim:
Salve e feche o arquivo. Se estiver usando o nano
, você pode fazer isso digitando CTRL+X
, depois Y
e ENTER
para confirmar.
Quando o UFW estiver habilitado em uma etapa posterior deste guia, ele será configurado para escrever regras de firewall tanto IPv4 quanto IPv6.
Passo 2 — Configurando Políticas Padrão
Se você está 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 tentando alcançar seu servidor não será capaz de se conectar, enquanto qualquer aplicativo dentro do servidor será capaz de alcançar o mundo exterior. Regras adicionais para permitir serviços e portas específicos são incluídas como exceções a esta política geral.
Para garantir que você consiga acompanhar o restante deste tutorial, agora você configurará as políticas padrão do UFW para tráfego de entrada e saída.
Para definir a política padrão de entrada do UFW como deny
, execute:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Para definir a política padrão de saída do UFW como allow
, execute:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Esses comandos definem as configurações padrão para negar conexões de entrada e permitir conexões de saída. Essas configurações padrão de firewall podem ser suficientes para um computador pessoal, mas os servidores geralmente precisam responder a solicitações de entrada de usuários externos. Vamos examinar isso a seguir.
Passo 3 — Permitindo Conexões SSH
Se você habilitar seu firewall UFW agora, ele negará todas as conexões de entrada. Isso significa que você precisará criar regras que permitam explicitamente conexões de entrada legítimas — como conexões SSH ou HTTP, por exemplo — se quiser que seu servidor responda a esses tipos de solicitações. Se você estiver usando um servidor na nuvem, provavelmente desejará permitir conexões SSH de entrada para poder se conectar e gerenciar seu servidor.
Permitindo o Perfil de Aplicativo OpenSSH do UFW
Ao instalar, a maioria das aplicações que dependem de conexões de rede registrará um perfil de aplicativo no UFW, o 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 no UFW com:
OutputAvailable applications:
OpenSSH
Para habilitar o perfil de aplicativo OpenSSH, execute:
OutputRule added
Rule added (v6)
Isto criará regras de firewall para permitir todas as conexões na porta 22
, que é a porta na qual 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 seu nome de serviço: ssh
.
OutputRule added
Rule added (v6)
O UFW sabe quais portas e protocolos um serviço utiliza com base no arquivo /etc/services
.
Permitindo SSH por Número de Porta
Alternativamente, você pode escrever a regra equivalente especificando a porta em vez do perfil de aplicativo ou nome do serviço. Por exemplo, este comando funciona da mesma forma que os exemplos anteriores:
OutputRule 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 seu servidor SSH estiver ouvindo na porta 2222
, você pode usar este comando para permitir conexões nesta porta:
OutputRule 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 deve estar configurado para permitir conexões SSH. Para verificar quais regras foram adicionadas até agora, mesmo quando o firewall ainda está desativado, você pode usar:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Após confirmar que tem uma regra para permitir conexões SSH de entrada, você pode habilitar o firewall com:
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Você receberá um aviso que diz que o comando pode interromper conexões SSH existentes. Você já configurou uma regra de firewall que permite conexões SSH, então deve estar tudo bem para continuar. Responda à solicitação com y
e pressione ENTER
.
O firewall está agora ativo. Execute o comando sudo ufw status verbose
para ver as regras que estão configuradas. O resto deste tutorial cobre 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 que o 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 com base 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 é o que os servidores web não criptografados usam, usando
sudo ufw allow http
ousudo ufw allow 80
- HTTPS na porta 443, que é o que os servidores web criptografados usam, usando
sudo ufw allow https
ousudo ufw allow 443
- Apache com ambos HTTP e HTTPS, usando
sudo ufw allow 'Apache Full'
- Nginx com ambos HTTP e HTTPS, usando
sudo ufw allow 'Nginx Full'
Não se esqueça de verificar quais perfis de aplicativos estão disponíveis para seu servidor com sudo ufw app list
.
Há várias outras maneiras de permitir conexões, além de especificar uma porta ou nome de serviço conhecido. Veremos algumas delas a seguir.
Intervalos de Portas Específicos
Você pode especificar intervalos de portas com UFW. Alguns aplicativos usam várias portas, em vez de uma única porta.
Por exemplo, para permitir conexões X11, que usam as portas 6000
–6007
, use esses comandos:
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 é OK 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 o endereço IP de trabalho ou residencial 203.0.113.4
, você precisa usar o parâmetro from
, fornecendo então o endereço IP que deseja permitir:
OutputRule added
Você também pode especificar uma porta à qual o endereço IP está autorizado a se conectar, adicionando to any port
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:
OutputRule added
Sub-redes
Se você deseja permitir uma sub-rede de endereços IP, pode fazer isso usando a notação CIDR para especificar uma máscara de rede. Por exemplo, se você deseja permitir todos os endereços IP que vão de 203.0.113.1
a 203.0.113.254
, você pode usar este comando:
OutputRule added
Da mesma forma, você também pode especificar a porta de destino à qual a sub-rede 203.0.113.0/24
tem permissão para se conectar. Novamente, usaremos a porta 22
(SSH) como exemplo:
OutputRule added
Conexões para uma Interface de Rede Específica
Se você deseja criar uma regra de firewall que se aplique apenas a uma interface de rede específica, pode fazê-lo especificando “permitir em em” seguido pelo nome da interface de rede.
Você pode querer verificar suas interfaces de rede antes de continuar. Para fazer isso, use este comando:
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. Elas geralmente têm nomes como eth0
ou enp3s2
.
Portanto, se o seu servidor tiver uma interface de rede pública chamada eth0
, você poderia permitir o tráfego HTTP (porta 80
) para ela com este comando:
OutputRule added
Rule added (v6)
Fazendo isso permitiria que seu servidor recebesse solicitações HTTP da internet pública.
Ou, se você deseja que seu servidor de banco de dados MySQL (porta 3306
) escute conexões na interface de rede privada eth1
, por exemplo, você poderia usar este comando:
OutputRule added
Rule added (v6)
Isso permitiria que outros servidores em 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 está 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 portas e endereços IP específicos.
No entanto, às vezes você vai querer negar conexões específicas com base no endereço IP de origem ou sub-rede, talvez porque você saiba que seu servidor está sendo atacado de lá. Além disso, se você quiser alterar sua política de entrada padrão para permitir (o que não é recomendado), você precisaria criar regras de negar para quaisquer serviços ou endereços IP que você não queira permitir conexões.
Para escrever regras de negar, você pode usar os comandos previamente descritos, substituindo permitir por negar.
Por exemplo, para negar conexões HTTP, você poderia usar este comando:
OutputRule added
Rule added (v6)
Ou se você quiser negar todas as conexões de 203.0.113.4
você poderia usar este comando:
OutputRule added
Em alguns casos, você também pode querer bloquear conexões de saída do servidor. Para negar todos os usuários de usar uma porta no servidor, como a porta 25
para tráfego SMTP, você pode usar negar saída
seguido pelo número da porta:
OutputRule added
Rule added (v6)
Isso irá bloquear todo o tráfego SMTP de saída no servidor.
Passo 7 — Excluir Regras
Saber como excluir regras de firewall é tão importante quanto saber como criá-las. Existem duas maneiras diferentes de especificar quais regras excluir: por número de regra ou por 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ê vai querer obter uma lista numerada de todas as suas regras de firewall. O comando de status do UFW tem uma opção para exibir números ao lado de cada regra, como demonstrado aqui:
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Se você decidir que deseja excluir a regra número 2, aquela que permite conexões na porta 80 (HTTP), você pode especificá-la em um comando de exclusão do UFW assim:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Isso solicitará uma confirmação e depois excluirá a regra 2, que permite conexões HTTP. Note que se você tiver o IPv6 ativado, você também vai querer excluir a regra IPv6 correspondente.
Excluindo uma Regra UFW Pelo Nome
Em vez de usar números de regra, você também pode se referir a uma regra pelo seu nome legível por humanos, que é baseado no tipo de regra (tipicamente allow
ou deny
) e o nome do serviço ou número de porta que foi o alvo para essa regra, ou o nome do perfil de aplicativo caso tenha sido usado. Por exemplo, se você quiser excluir uma regra allow
para um perfil de aplicativo chamado Apache Full
que foi previamente habilitado, você pode usar:
OutputRule deleted
Rule deleted (v6)
O comando delete
funciona da mesma maneira para regras que foram criadas referenciando um serviço pelo seu nome ou porta. Por exemplo, se você anteriormente definiu uma regra para permitir conexões HTTP com sudo ufw allow http
, desta forma você poderia excluir essa regra:
OutputRule deleted
Rule deleted (v6)
Porque os nomes dos serviços são intercambiáveis com os números de porta ao especificar regras, você também poderia se referir à mesma regra como allow 80
, em vez de allow http
:
OutputRule deleted
Rule deleted (v6)
Ao excluir regras do UFW pelo nome, tanto as regras IPv4 quanto IPv6 são excluídas se existirem.
Passo 8 — Verificando o Status e as Regras do UFW
Em qualquer momento, você pode verificar o status do UFW com este comando:
Se o UFW estiver desativado, o que é o padrão, você verá algo assim:
OutputStatus: inactive
Se o UFW estiver ativo, o que deveria estar se você seguiu o Passo 3, a saída dirá que está ativo e listará quaisquer regras que estejam definidas. Por exemplo, se o firewall estiver configurado para permitir conexões SSH (porta 22
) de qualquer lugar, a saída pode se parecer com isto:
OutputStatus: 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 — Desativar ou Redefinir o Firewall
Se você decidir que não deseja mais usar o firewall UFW, você pode desativá-lo com este comando:
OutputFirewall stopped and disabled on system startup
Quaisquer regras que você tenha criado com o UFW não estarão mais ativas. Você sempre pode executar sudo ufw enable
se precisar ativá-lo posteriormente.
Se você já tiver regras do UFW configuradas, mas decidir que deseja recomeçar, pode usar o comando de reset:
OutputResetting 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 que foram definidas anteriormente. Isso deve lhe proporcionar um novo começo com o UFW. Lembre-se de que as políticas padrão não voltarão às suas configurações originais se você as modificou em algum momento.
Implemente suas aplicações frontend do GitHub usando Plataforma de Aplicativos DigitalOcean. 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 requer, ao mesmo tempo em que limita quaisquer conexões desnecessárias, para que seu servidor seja funcional e seguro.
Para aprender mais sobre configurações comuns do UFW, confira o tutorial UFW Essentials: Regras e Comandos de Firewall Comuns.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu