Introdução
O UFW, ou Firewall Simples, é uma interface para o iptables
que está orientado para simplificar o processo de configuração de uma firewall. Enquanto o iptables
é uma ferramenta sólida e flexível, pode ser difícil para os iniciantes aprender a usá-la para configurar corretamente uma firewall. Se você está procurando começar asegurar sua rede e não está certo de qual ferramenta usar, o UFW pode ser a escolha certa para você.
Este tutorial vai mostrar como configurar uma firewall com o UFW no Ubuntu v18.04 e acima.
Pré-requisitos
Se você estiver usando a versão do Ubuntu 16.04 ou abaixo, recomendamos que você atualize para uma versão mais recente, já que o Ubuntu já não fornece suporte para essas versões. Este conjunto de guias ajudará você a atualizar sua versão do Ubuntu.
Para seguir este tutorial, você precisará:
-
Um servidor executando Ubuntu, juntamente com um usuário não-root com privilégios de
sudo
. Para orientações sobre como configurá-los, por favor, escolha sua distribuição a partir desta lista e siga nosso Guia de Configuração Inicial do Servidor. -
UFW está 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
- 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
- Verificar Status e Regras do UFW
- Como Desativar ou Redefinir Firewall no Ubuntu
Passo 1 — Verificando se o IPv6 está habilitado
Na maioria das versões recentes do Ubuntu, o IPv6 é habilitado por padrão. Na prática isso significa que as regras de firewall adicionadas ao servidor incluirão tanto uma versão IPv4 quanto uma versão IPv6, a última identificada por v6
no comando de estatus do UFW. Para verificar se o IPv6 está habilitado, você pode checar sua configuração do arquivo /etc/default/ufw
. Abra este arquivo usando nano
ou seu editor de linha de comandos preferido:
Verifique se o valor de IPV6
está definido como yes
. Deve parecer assim:
Salvar e fechar o arquivo. Se você estiver usando nano
, você pode fazer isso digitando CTRL+X
, depois Y
e ENTER
para confirmar.
Quando o UFW for habilitado em um passo posterior deste guia, ele será configurado para escrever regras de firewall para ambos IPv4 e IPv6.
Passo 2 — Configurando Políticas Padrão
Se você está começando com o UFW, um bom primeiro passo é verificar suas políticas padrão de firewall. Essas regras controlam como tratar trafego que não corresponde explicitamente à outra regra.
Por padrão, o UFW é configurado para rejeitar todas as conexões de entrada e permitir todas as conexões de saída. Isso significa que nenhuma pessoa tentando se conectar ao seu servidor poderia fazê-lo, enquanto qualquer aplicativo dentro do servidor teria a capacidade de se conectar ao mundo externo. As regras adicionais para permitir conexões específicas de serviços e portas são incluídas como exceções à política geral de segurança.
Para garantir que você possa seguir junto com o restante deste tutorial, você agora vai configurar as políticas padrão do UFW para conexões 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 os padrões padrão para rejeitar conexões de entrada e permitir conexões de saída. Esses padrões de firewall padrão sozinhos poderiam suficiência para um computador pessoal, mas servidores normalmente precisam responder a requisições de entrada de usuários externos. Vamos ver isso em seguida.
Passo 3: Permitindo Conexões SSH
Permitir o Perfil de Aplicativo OpenSSH no UFW
Após a instalação, a maioria dos aplicativos que dependem de conexões de rede registrará um perfil de aplicativo no UFW, o que permite que os usuários permitam ou negem o acesso externo a um serviço rapidamente. Você pode ver quais perfis estão atualmente registrados no UFW com:
OutputAvailable applications:
OpenSSH
Para ativar o perfil de aplicativo OpenSSH, execute:
OutputRule added
Rule added (v6)
Isso criará regras de firewall para permitir todas as conexões na porta 22
, que é a porta que o processo SSH escuta por padrão.
Permitir SSH por Nome de Serviço
Outra maneira de configurar o UFW para permitir conexões SSH entrantes é referenciando seu nome de serviço: ssh
.
OutputRule added
Rule added (v6)
O UFW sabe quais portas e protocolos um serviço usa com base no arquivo /etc/services
.
Permitir SSH por Número da Porta
Alternativamente, você pode escrever uma regra equivalente especificando o porto em vez do perfil de aplicação ou nome de serviço. Por exemplo, esta comanda funciona na mesma maneira que as exames anteriores:
OutputRule added
Rule added (v6)
Seu servidor SSH foi configurado para usar um porto diferente, você terá que especificar o porto apropriado. Por exemplo, se seu servidor SSH está escutando no porto 2222
, você pode usar esta comanda para permitir conexões nesse porto:
OutputRule added
Rule added (v6)
Agora que sua firewall está configurada para permitir conexões de SSH recebidas, você pode habilitar-la.
Passo 4 — Habilitar o UFW
Você deve agora verificar quais regras foram adicionadas até agora, mesmo quando a firewall ainda estiver desabilitada. Para confirmar que as regras foram adicionadas corretamente, você pode usar:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Após confirmar que você tem uma regra que permite conexões de SSH recebidas, você pode habilitar a firewall com:
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Você receberá uma mensagem de aviso que diz que a comanda pode interromper as conexões existentes de SSH. Você já configurou uma regra de firewall que permite conexões SSH e deve ser fina. Responda à mensagem com y
e pressione ENTER
.
A firewall agora está ativa. Executar a comanda sudo ufw status verbose
para ver as regras definidas. O restante deste tutorial cobre como usar o UFW em detalhe, como permitir ou negar diferentes tipos de conexões.
Passo 5 — Permitindo outras conexões
Ao chegar neste ponto, você deve permitir todas as outras conexões que seu servidor precisa para responder. As conexões que você deve permitir dependem de suas necessidades específicas. Você já sabe como escrever regras que permitam conexões baseadas em um perfil de aplicativo, o nome do serviço ou uma porta; você já fez isso para o SSH na porta 22
. Você também pode fazer isso para:
- HTTP na porta 80, que é a que os servidores web sem segurança usam, usando
sudo ufw allow http
ousudo ufw allow 80
- HTTPS na porta 443, que é a que os servidores web encriptados 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 esqueça de ver 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. Vamos ver algumas dessas próximamente.
Intervalos de Portas Específicos
Você pode especificar intervalos de portas com o UFW. Algumas aplicações usam múltiplos portos, em vez de um único porto.
Por exemplo, para permitir conexões X11, que usam portas 6000
–6007
, use estas comandas:
Quando especificar intervalos de portas com o UFW, você deve especificar o protocolo (tcp
ou udp
) que as regras devem aplicar. Não temos mencionado isso antes porque não especificar o protocolo automaticamente permite ambos os protocolos, o que é bom na maioria dos casos.
Endereços IP Específicos
Quando trabalhar com o UFW, você também pode especificar endereços IP dentro de suas regras. Por exemplo, se você quiser permitir conexões de um determinado endereço IP, como o endereço IP de trabalho ou de casa de 203.0.113.4
, você precisa usar o parâmetro from
, fornecendo então o endereço IP que você deseja permitir:
OutputRule added
Você também pode especificar uma porta que o endereço IP está autorizado a conectar ao adicionar to any port
seguido do número da porta. Por exemplo, se você quiser permitir 203.0.113.4
a conectar à porta 22
(SSH), use esta comanda:
OutputRule added
Subnetworks
Se você quiser permitir uma sub-rede de endereços IP, você pode fazer isso usando a notação CIDR para especificar um netmask. Por exemplo, se você quiser permitir todos os endereços IP que vão de 203.0.113.1
até 203.0.113.254
, você poderia usar este comando:
OutputRule added
Do mesmo modo, você também pode especificar a porta de destino que a sub-rede 203.0.113.0/24
é permitida conectar. Novamente, usaremos a porta 22
(SSH) como exemplo:
OutputRule added
Conexões a uma Interface de Rede Específica
Se você quiser criar uma regra de firewall que se aplica apenas a uma interface de rede específica, você pode fazer isso especificando “allow in on” seguido pelo nome da interface de rede.
Você pode querer procurar 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 são normalmente nomeadas algo como eth0
ou enp3s2
.
Então, se seu servidor tiver uma interface de rede pública chamada eth0
, você poderia permitir o tráfego HTTP (porta 80
) nela com este comando:
OutputRule added
Rule added (v6)
Fazendo isso, você permitiria que seu servidor receba pedidos HTTP da Internet pública.
Ou seja, se você quer que seu servidor de banco de dados do MySQL (porta 3306
) escute conexões na interfase privada eth1
, por exemplo, voce pode usar esta comanda:
OutputRule added
Rule added (v6)
Isso permitiria que outros servidores na sua rede privada conectem-se ao seu banco de dados MySQL.
Passo 6 — Negando Conexões
Se você não tiver alterado a política padrão para conexões entrantes, o UFW está configurado para rejeitar todas as conexões de entrada. Geralmente, isso simplifica o processo de criar uma política de segunda-feira de forma segura, exigindo que você crie regras que explicitamente permitam portas específicas e endereços IP ou subredes.
Mas às vezes você vai querer negar conexões baseadas no endereço IP ou subrede de origem, talvez porque saber que seu servidor está sendo atacado desde lá. Além disso, se você quiser mudar sua política padrão de recepção para permitir (que não é recomendado), você precisaria criar regras de negação para qualquer serviço ou endereço IP que você não deseja permitir conexões.
Para escrever regras negação, você pode usar as comandas descritas anteriormente, substituindo permissão por negação.
Por exemplo, para rejeitar conexões HTTP, você poderia usar esta comanda:
OutputRule added
Rule added (v6)
Ou se você quiser negar todas as conexões de 203.0.113.4
você poderia usar esta comanda:
OutputRule added
Na algumas ocasiões, você também pode querer bloquear conexões saídas do servidor. Para negar todos os usuários de usar um porto no servidor, como o porto
OutputRule added
Rule added (v6)
Isso bloqueará todo o tráfego SMTP saído do servidor.
Passo 7 — Excluindo Regras
Ao saber como excluir regras é tão importante quanto saber como criar elas. Há duas maneiras diferentes de especificar quais regras devem ser excluidas: por número ou por uma designação humano-legível (semelhante à forma em que as regras foram especificadas quando elas foram criadas).
Excluindo uma Regra do UFW Por Número
Para excluir uma regra do UFW por seu número, primeiro você vai querer obter uma lista numerada de todas as suas regras de firewall. O comando estado do UFW tem uma opção para mostrar 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 decidir que deseja excluir a regra número 2, a que permite conexões no porto 80 (HTTP), você poderia especificar isto em um comando de excluir do UFW como este:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Este irá solicitar uma confirmação e depois excluir a regra 2, que permite conexões HTTP. Note que se você tiver IPv6 habilitado, você também precisaria excluir a regra correspondente do IPv6.
<|observation|>
Excluir uma Regra do UFW por Nome
Em vez de usar números de regra, você pode também fazer referência a uma regra por sua designação legível por humanos, que é baseada no tipo de regra (normalmente allow
ou deny
) e o nome do serviço ou número da porta que foi o alvo dessa 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 habilitado anteriormente, você pode usar:
OutputRule deleted
Rule deleted (v6)
O comando delete
funciona da mesma forma para regras que foram criadas fazendo referência a um serviço por seu nome ou porta. Por exemplo, se você configurou anteriormente uma regra para permitir conexões HTTP com sudo ufw allow http
, é assim que você poderia excluir essa regra:
OutputRule deleted
Rule deleted (v6)
Como os nomes de serviços são intercambiáveis com os números de porta quando especificando regras, você também poderia fazer referência à mesma regra como allow 80
, em vez de allow http
:
OutputRule deleted
Rule deleted (v6)
Ao excluir regras do UFW por nome, ambas as regras IPv4 e IPv6 são excluídas se existirem.
Passo 8 — Verificando o Status do UFW e Regras
A qualquer momento, você pode verificar o status do UFW com esse comando:
Se o UFW estiver desativado, o que você verá é algo como isso:
OutputStatus: inactive
Se o UFW estiver ativo, o que deve aparecer é que ele está ativo e irá listar as regras que foram definidas. Por exemplo, se a firewall foi configurada para permitir conexões SSH (porta 22
) de qualquer lugar, a saída pode parecer assim:
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 a firewall.
Passo 9 — Desativar ou Resetar Firewall
Se decidir não usar a firewall do UFW, pode desativá-la com este comando:
OutputFirewall stopped and disabled on system startup
As regras que você criou com o UFW não serão mais ativas. Você sempre pode executar sudo ufw enable
se precisar deixar o UFW ativo mais tarde.
Se você já tem regras configuradas com o UFW mas decida que quer começar novamente, você pode usar o comando 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á todas as regras que foram definidas anteriormente. Isso deve lhe dar um início fresco com o UFW. Lembrar que as políticas padrão não mudarão para suas configurações originais, se você modificou elas em algum momento.
Deploy your frontend applications from GitHub using DigitalOcean App Platform. Let DigitalOcean focus on scaling your app.
Conclusão
Sua firewall agora está configurada para permitir (pelo menos) conexões SSH. Certifique-se de permitir quaisquer outras conexões de entrada que o seu servidor precise, enquanto limita quaisquer conexões desnecessárias, para que o seu servidor seja funcional e seguro.
Para aprender sobre mais configurações comuns de UFW, consulte o tutorial UFW Essentials: Common Firewall Rules and Commands.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04