O firewall descomplicado

ufw_dmesg

Precisava montar um firewall bem simples para colocar em um Ubuntu Server e já começava a pensar na melhor forma de fazê-lo quando me dei conta de que se no RHEL/CentOS há algo pronto de “fábrica”, o firewall-cmd, seria bem provável que a Canonical, já tivesse feito algo parecido.

E eu estava certo, chama-se Uncomplicated Firewall, ou simplesmente ufw, existe desde a versão 8.04, é instalado por padrão na família Ubuntu e, óbvio, vergonha pra mim! 🙂

O essencial

Ele é instalado por padrão, então é possível pular esta parte e começar com um exemplo simples:

$ sudo ufw allow ssh/tcp
Regras atualizadas
Regras atualizadas (v6)
$ sudo ufw enable
Firewall está ativo e habilitado na inicialização do sistema
$ sudo ufw status
Estado: ativo
Para                       Ação        De
----                       ----        --
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

O exemplo libera o SSH (22/tcp) e deixa as demais bloqueadas. Aliás, este é o comportamento padrão do ufw, liberar o que é solicitado e bloquear o resto — mas isto pode ser alterado com o comando “ufw default”.

Claro, apesar de instalado por padrão ele só entrará em funcionamento após ser explicitamente habilitado através do comando “ufw enable”.

As regras

Necessitando acrescentar outras regras basta repetir “ufw allow” ou “ufw deny” e especificar porta ou protocolo específico. O ufw reconhece os serviços listados em “/etc/services”, deixando o processo mais natural.

Para liberar o acesso ao HTTP (80/tcp) use:

$ sudo ufw allow http/tcp
Regras atualizadas
Regras atualizadas (v6)

Mas se preferir é possível usar “80/tcp” ou simplesmente “80”. As novas regras vão sendo acrescentadas sequencialmente.

Inserindo

Mas se eu quiser colocar uma nova regra entre duas já existentes?

$ sudo ufw status numbered
Estado: ativo
     Para                       Ação        De
     ----                       ----        --
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 4] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
$ sudo ufw insert 2 allow smtp/tcp
Regra inserida
Regra inserida (v6)

O parâmetro “numbered” ajuda a identificar a posição de cada regra dentro do firewall e o “insert 2” indica que ela deverá ser inserida antes da 2ª regra:

$ sudo ufw status numbered
Estado: ativo
     Para                       Ação        De
     ----                       ----        --
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 25/tcp                     ALLOW IN    Anywhere
[ 3] 80/tcp                     ALLOW IN    Anywhere
[ 4] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 5] 25/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 80/tcp (v6)                ALLOW IN    Anywhere (v6)

Removendo

Para remover uma regra basta usar o comando “delete” seguido da  regra específica (o número ‘2’ saiu do exemplo anterior):

$ sudo ufw delete 2
Apagando:
 allow 25/tcp
Proceder com operação (s|n)? s       
Regra apagada

Mas também é possível fazê-lo replicando a linha usada na criação da regra:

$ ufw delete allow smtp/tcp
Regra apagada
Regra apagada (v6)

Neste caso ambas as regras (para IPv4 e IPv6) serão removidas de uma única vez.

Sendo (mais) específico

Mas se eu quiser especificar que apenas uma faixa de endereços IP seja liberada (ou bloqueada)? Aí a sintaxe fica mais sofisticada:

$ sudo ufw allow proto tcp from 192.168.0.0/24 to any port https
Regra adicionada

Esta regra libera o acesso ao protocolo HTTPS (443/tcp) para a faixa de hosts no endereço IP 192.168.0.0/24 (do 192.168.0.1 até o 192.168.0.254).

Usando perfis

Algo muito interessante do ufw é a possibilidade de poder utilizar perfis para definir o que será bloqueado/liberado no firewall. Não são todos os programas que possuem perfis já definidos em seus pacotes e para saber quais estão disponíveis utilize:

$ sudo ufw app list
Aplicativos disponíveis:
  CUPS
  Lighttpd Full
  Lighttpd HTTP
  Lighttpd HTTPS
  OpenSSH
  Samba

Visitando o diretório “/etc/ufw/applications.d” é possível saber como montar seu próprio perfil. — Sim, a lista está “fraquinha” pois estou usando o notebook para os exemplos! 😀

Para saber um pouco mais sobre um determinado perfil:

$ sudo ufw app info "Lighttpd Full"
Perfil: Lighttpd Full
Título: Web Server (lighttpd, HTTP + HTTPS)
Descrição: A fast webserver with minimal memory footprint
Portas:
  80,443/tcp

E para configurar as regras:

$ sudo ufw allow Samba
(...)
$ sudo ufw status
Estado: ativo
Para                       Ação        De
----                       ----        --
Samba                      ALLOW       Anywhere
Samba (v6)                 ALLOW       Anywhere (v6)

Bem mais simples, não?

Experimentando

Para apenas verificar o que uma nova regra fará basta acrescentar o parâmetro “–dry-run” e o ufw listará tudo o que será feito mas sem mexer na configuração. Pegando o último exemplo:

$ sudo ufw --dry-run allow Samba
*filter
:ufw-user-input - [0:0]
:ufw-user-output - [0:0]
...
### RULES ###
### tuple ### allow udp 137,138 0.0.0.0/0 any 0.0.0.0/0 Samba - in
-A ufw-user-input -p udp -m multiport --dports 137,138 -j ACCEPT
-m comment --comment 'dapp_Samba'
### END RULES ###
...
COMMIT
Regras atualizadas
Regras atualizadas (v6)

Como a saída é longa, encurtei para exibir aqui mas criei um PDF com ela na íntegra.

Voltando ao início

Se alguma coisa der (muito) errado todas as configurações podem ser removidas de uma única vez com:

$ sudo ufw reset
Reconfigurando todas as regras para os padrões instalados. Proceder com
operação (s|n)?

Daí é começar novamente.

E encerrando

O ufw é a forma mais prática (e rápida) no Ubuntu Server de se configurar um firewall de pequena/média complexidade de um jeito bem mais elegante e gerenciável que apenas empilhar linhas de iptables dentro de um script.

A documentação inclui bastante informação interessante com alguns exemplos bem mais sofisticados dos que usei aqui e, para os que gostam, há também uma interface gráfica disponível, a gufw.

Anúncios

Um comentário sobre “O firewall descomplicado

  1. Pingback: Firewall descomplicado no Ubuntu: ufw - Peguei do

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s