Um firewall é um dos componentes principais para a segurança de um sistema. É responsável por gerenciar as conexões de entrada e saída na rede. É a principal linha de defesa para seus servidores e dados. É por isso que é fundamental ter um firewall bem configurado. Neste guia, vamos orientá-lo pelas etapas de configuração de um firewall com o UFW no Ubuntu 18.04.
UFW no Ubuntu
O termo UFW significa “Uncomplicated Firewall” (Firewall Descomplicado). É um programa de firewall padrão que vem pré-instalado com o Ubuntu. O UFW é, na verdade, uma interface para o iptables. O objetivo do UFW é facilitar a configuração e o gerenciamento de um firewall. Embora o iptables, por si só, seja uma opção sólida e flexível, ele não é amigável para iniciantes. O UFW torna isso mais fácil tanto para iniciantes quanto para usuários experientes.
Primeiro, dê uma olhada no nosso guia abrangente que o ajudará a se familiarizar com as funções básicas do UFW. Você também pode seguir este guia para instalar seu servidor Ubuntu. Agora, vamos começar!
Para começar, se por algum motivo o seu UFW não estiver instalado, instale-o imediatamente:
|
1 |
$ sudo apt install ufw |
Configurando o UFW
-
Usando IPv6
Até o momento, o IPv4 ainda é a força dominante. Tendo isso em mente, a maior parte deste guia também apresenta o IPv4. Felizmente, o UFW também vem com suporte para IPv6. Tudo o que você precisa fazer é habilitar o recurso no arquivo de configuração do UFW.
Primeiro, abra o arquivo de configuração do UFW em um editor de texto. Para salvar as alterações, o editor de texto deve ser executado com privilégios de sudo:
|
1 |
$ sudo vim /etc/default/ufw |
Procure por “IPV6” e certifique-se de que esteja definido como “yes”.
-
Política padrão
Se esta é a sua primeira vez mexendo em um firewall, é recomendável definir as políticas padrão primeiro. Essas regras determinam como o tráfego que não corresponde a nenhuma regra explícita é controlado. Por padrão, o UFW está configurado para negar todas as conexões de entrada, mas permitir todas as conexões de saída. Isso define que ninguém pode acessar o servidor, enquanto um aplicativo em execução no servidor pode acessar o exterior.
Os comandos a seguir apenas redefinirão o comportamento padrão do UFW. Observe que isso alterará o comportamento do UFW se ele tiver sido modificado anteriormente:
|
1 2 |
$ sudo ufw default deny incoming $ sudo ufw default allow outgoing |
Para um computador pessoal, apenas essas regras de firewall seriam suficientes. No entanto, os servidores exigem mais para reforçar adequadamente sua segurança.
Permitindo conexões SSH
Da forma como o UFW está configurado agora, ele negará todas as conexões de entrada. Para um servidor remoto, isso é inviável. Sem acesso ao servidor, nada pode ser feito. Para evitar esse problema, o UFW pode ser configurado para permitir conexões de entrada SSH ou HTTP .
Para permitir conexões SSH ao servidor, execute o seguinte comando. Ele basicamente dirá ao UFW para permitir todas as conexões na porta 22. É a porta na qual o daemon SSH escuta por padrão:
|
1 |
$ sudo ufw allow ssh |
Em vez deste comando, é possível configurar diretamente a permissão de conexões para a porta 22. Esta porta está definida no arquivo /etc/services:
|
1 |
$ sudo ufw allow 22 |
Como a porta 22 é o padrão para o daemon SSH, ela também pode estar suscetível a ataques. E se o servidor SSH estiver configurado para escutar em uma porta diferente? Em tal situação, o UFW deve permitir a conexão a essa porta. Assumindo que o servidor SSH esteja escutando na porta 1234, use o seguinte comando:
|
1 |
$ sudo ufw allow 1234 |
Habilitando o UFW
Embora as regras do UFW estejam estabelecidas, elas não farão nada a menos que o UFW seja ativado. Por padrão, o UFW está desabilitado, o que significa que, apesar de declarar as regras, ele não as aplicará. Para habilitar o UFW, execute o seguinte comando:
|
1 |
$ sudo ufw enable |
O UFW pode exibir uma mensagem de aviso sobre a interrupção das conexões SSH existentes. Como as conexões SSH foram configuradas para serem permitidas, a ativação do UFW não causará nenhuma interrupção. Para ver quais regras estão definidas, execute o seguinte comando:
|
1 |
$ sudo ufw status verbose |
Permitindo várias conexões
Neste ponto, o UFW deve estar equipado com outras regras para ter uma experiência estável. As conexões que devem ser permitidas dependem das suas necessidades específicas. Já foi demonstrado como dizer ao UFW para permitir conexões com base no nome de um serviço ou número de porta.
Aqui estão algumas outras portas que são muito comuns de estarem abertas:
- SSH (
porta 22): Esta é a porta padrão configurada para conexões SSH. - HTTP (
porta 80): Esta é a porta padrão que os servidores web não criptografados usam. - HTTPS (
porta 443): Esta é a porta padrão que os servidores web criptografados usam.
Para habilitar conexões SSH, execute um dos seguintes comandos:
|
1 2 |
$ sudo ufw allow ssh $ sudo ufw allow 22 |
Em seguida, para habilitar conexões HTTP, execute um dos seguintes comandos:
|
1 2 |
$ sudo ufw allow http $ sudo ufw allow 80 |
Para habilitar conexões HTTPS, execute um dos seguintes comandos:
|
1 2 |
$ sudo ufw allow https $ sudo ufw allow 443 |
Intervalo de Portas
Até agora, demonstramos como permitir uma determinada porta. E se houver necessidade de um intervalo de portas? Declarar cada porta ao UFW é bastante ineficiente. Alguns aplicativos usam várias portas. Felizmente, o UFW permite declarar um intervalo de portas. Para fazer isso, use a seguinte estrutura de comando:
|
1 |
$ sudo ufw allow <start>:<end>/<protocol> |
O exemplo a seguir habilita conexões X11 que usam as portas 6000 a 6007:
|
1 2 |
$ sudo ufw allow 6000:6007/tcp $ sudo ufw allow 6000:6007/udp |
Recomenda-se declarar protocolos sempre que possível. No entanto, na maioria dos casos, não é necessário e as coisas funcionarão perfeitamente.
Endereços IP Específicos
Ao usar o UFW, também é possível filtrar conexões por endereços IP específicos. Por padrão, o UFW bloqueará conexões de qualquer endereço IP. É possível declarar a permissão de conexão a partir de determinados endereços IP. Para permitir a conexão de um endereço IP, use a seguinte estrutura de comando:
|
1 |
$ sudo ufw allow from <ip_address> |
Você também pode declarar as portas específicas às quais o endereço IP tem permissão para se conectar. Para fazer isso, adicione to any port seguido pelo número da porta ao comando:
|
1 |
$ sudo ufw allow from <ip_address> to any port <port> |
Sub-redes
Se você tiver a necessidade de permitir uma sub-rede de endereços IP, é possível fazer isso usando a notação CIDR. Neste exemplo, o UFW permitirá conexões de endereços IP que variam de 203.0.113.1 a 203.0.113.254:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 |
Semelhante ao passo anterior, também é possível especificar a porta à qual esses endereços IP podem se conectar:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 to any port <port> |
Conectando a uma Interface de Rede Específica
Em um ambiente de servidor, pode haver várias interfaces de rede conectadas ao sistema. Usando o UFW, é possível descrever que uma determinada regra se aplica apenas a uma interface de rede específica. Primeiro, verifique todas as interfaces de rede conectadas ao servidor. O nome da interface de rede de destino é o foco principal:
|
1 |
$ ip addr |
No nosso caso, há apenas uma interface de rede ens3 que se conecta à internet pública. Para permitir conexões de entrada a partir desta interface de rede, use a seguinte estrutura de comando:
|
1 |
$ sudo ufw allow in on <network_interface> |
Também é possível definir a porta que o tráfego pode alcançar vindo da interface de rede:
|
1 |
$ sudo ufw allow in on <network_interface> to any port <port> |
Negando Conexão
De acordo com a configuração padrão, o UFW negará conexões de qualquer origem (exceto as exceções declaradas). Esta é a maneira recomendada de usar o UFW. No entanto, pode ser necessário bloquear conexões específicas de um determinado endereço IP de origem ou sub-rede. Talvez o comportamento padrão do UFW esteja configurado para permitir todas as conexões (não recomendado).
Para negar uma conexão de determinados endereços IP, o UFW requer regras de negação. Escrever regras de negação é bastante simples. Pegue qualquer regra de permissão, troque o termo “allow” por “deny” e voilà! Ela se torna uma regra de negação.
Dê uma olhada no exemplo a seguir. Para negar qualquer conexão HTTP, use a seguinte regra de negação:
|
1 2 |
$ sudo ufw deny http $ sudo ufw deny 80 |
Para negar a conexão de 203.0.113.1, use a seguinte regra de negação:
|
1 |
$ sudo ufw deny from 203.0.113.1 |
Excluir regras
Tudo o que aprendemos até agora é como criar regras. Assim como as regras são criadas, elas também podem ser excluídas. No caso do UFW, existem duas maneiras específicas de excluir uma regra.
-
Excluir uma regra pelo número da regra
Esta é a maneira mais simples de excluir uma regra do UFW. Cada regra no UFW tem um número de regra. O seguinte comando imprimirá todas as regras do UFW junto com o número da regra:
|
1 |
$ sudo ufw status numbered |
O seguinte comando excluirá a regra especificada pelo número da regra:
|
1 |
$ sudo ufw delete <rule_number> |
-
Excluir regra pela própria regra
Este é o método mais difícil de excluir uma regra. Ele requer especificar manualmente a própria regra para excluí-la. No exemplo a seguir, o UFW excluirá a regra especificada por allow http:
|
1 |
$ sudo ufw delete allow http |
A regra também poderia ter sido especificada por allow 80. Nesse caso, o seguinte comando a excluirá:
|
1 |
$ sudo ufw delete allow 80 |
Excluir uma regra a excluirá tanto para IPv4 quanto para IPv6.
Verificando o status e as regras do UFW
É essencial garantir se o UFW está ativo ou não. Para determinar o status do UFW, execute o seguinte comando:
|
1 |
$ sudo ufw status verbose |
Se o status for “inactive”, ative-o seguindo a etapa Habilitando o UFW acima. Se estiver ativo, o UFW informará o status “active” e listará todas as regras ativas.
Desabilitando o UFW
Se, por algum motivo, você não for usar o UFW, desabilite-o usando o seguinte comando:
|
1 |
$ sudo ufw disable |
Se o UFW estiver desabilitado, todas as regras criadas não estarão mais ativas. No entanto, as regras não são excluídas. Quando o UFW for reativado, todas as regras se tornarão ativas novamente. E se a configuração atual do UFW estiver uma bagunça? Em vez de excluir as regras uma a uma, é possível excluir todas elas em um único comando. Para redefinir o UFW, execute o seguinte comando:
|
1 |
$ sudo ufw reset |
Observe que isso não alterará o comportamento padrão do UFW que foi configurado no início.
Conclusão
Uma configuração adequada de firewall é necessária para garantir a segurança e a funcionalidade. Ele deve ser configurado para permitir apenas as conexões de entrada necessárias, limitando as conexões desnecessárias.
Se você quiser se familiarizar com mais soluções de firewall, dê uma olhada em nosso blog para mais recursos:
- Configurando um firewall com o FirewallD no CentOS 7
- Listando e excluindo regras de firewall do Iptables
- Como criar medidas de segurança robustas para proteger seus servidores
Boa computação!











Comentários
Nenhum comentário ainda. Seja o primeiro.