Firewall Iptables - Administração com Shorewall

Colaboração: José Messias Alves da Silva
Data de Publicação: 05 de agosto de 2011
Em complemento à dica Firewall Iptables - Administração com FireHOL , será abordado aqui a ferramenta Shorewall, que também pode ser considerada um front-end para manter um firewall que, por trás, roda iptables. Facilita e agiliza enormemente o gerenciamento de regras, dada a simplicidade de seus arquivos de configuração.
Instalação
Em sistemas Debian-like
  #apt-get install shorewall
Shorewall também está desabilitado por padrão, sendo necessário modificar o arquivo /etc/default/shorewall para ativá-lo, alterando
  startup = 0
para
  startup = 1
Em sistemas baseados em RPM
  #yum install shorewall
Habilitando Shorewall para ser iniciado durante o boot:
  # chkconfig shorewall on
Verificando se os serviços serão iniciados durante o boot:
  # chkconfig --list | grep "iptables\|shorewall"
  iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
  shorewall       0:off   1:off   2:on    3:on    4:on    5:on    6:off
Além disso, deve-se ajustar a variável STARTUP_ENABLED para Yes no arquivo /etc/shorewall/shorewall.conf.
Configuração do Shorewall
Os arquivos de configuração do Shorewall são armazenados em diretórios específicos:
/etc/shorewall - armazena todos os arquivos de configuração.
/usr/share/shorewall - armazena os arquivos de suporte e de ação.
Geralmente, a configuração inicial do Shorewall é realizada a partir dos exemplos de arquivos de configuração, localizados em /usr/share/doc/shorewall/examples. Nesse diretório, há exemplos para configuração de servidores de uma, duas e até três interfaces de rede. Em sistemas baseados em RPM esse diretório é localizado em /usr/share/doc/shorewall-common-*/Samples/. A configuração padrão da ferramenta em sistemas Debian encontra-se no diretório /usr/share/doc/shorewall/default-config, enquanto que em Sistemas RPM os arquivos já se encontram no diretório de configuração. Assim, em sistemas Debian deve-se copiar esses arquivos para o diretório de configuração:
  #cp /usr/share/doc/shorewall/default-config/* /etc/shorewall/
O Shorewall é composto de vários pequenos arquivos de configuração, dentre eles estão: accounting, actions, blacklist, clear, ecn, findgw, hosts, init, initdone, interfaces, isusable, lib.private, maclist, masq, nat, netmap, notrack, params, policy, providers, proxyarp, refresh, refreshed,restored, route_rules, routestopped, rules, start, started, stop, stopped, tcclasses, tcclear, tcdevices, tcfilters, tcrules, tos, tunnels, zones.
Os mais utilizados são:
/etc/shorewall/shorewall.conf - configuração das opções gerais da ferramenta (inicialização, encaminhamento, log's, etc.) ;
/etc/shorewall/zones - declaração de zonas;
/etc/shorewall/interfaces - definição do que cada interface fará;
/etc/shorewall/masq - define o mascaramento de interfaces de rede e a ordem em que elas serão apresentadas;
/etc/shorewall/nat - definição de NAT;
/etc/shorewall/blacklist - declaração de IP's bloqueados;
/etc/shorewall/maclist - definição de associação de endereços MAC e IP;
/etc/shorewall/policy - definição de políticas padrão (ACCEPT, DROP, REJECT);
/etc/shorewall/rules - regras efetivas de firewall.
Para uma configuração básica, é necessário apenas os arquivos zones, interfaces, policy e rules. Em sistemas baseados em RPM é sempre necessário colocar uma linha comentada ao final dos arquivos para que não ocorram erros de sintaxe.
Configuração de Zonas
O primeiro passo editar o arquivo de zonas para especificar as zonas de diferentes redes, onde são definidos rótulos que serão utilizados em outros arquivos. Será considerada internet como uma zona e a rede interna como uma outra zona. Há uma zona especial, a zona de firewall, "fw", que vem definida por padrão, utilizada para controlar o tráfego que parte e chega ao próprio servidor. Assim, o arquivo de zonas deve ficar:
  #ZONE   TYPE            OPTIONS         IN                      OUT
  #                                       OPTIONS                 OPTIONS
  fw      firewall
  net     ipv4
  loc     ipv4
Configuração de Interfaces
O passo seguinte é editar o arquivo de interfaces para especificar as interfaces do servidor. Nesse arquivo há a ligação das zonas definidas no passo anterior com uma interface real. O terceiro campo é o endereço de broadcast da rede ligado à interface (a diretiva detect obtém esse valor automaticamente). Por fim, os últimos campos são opções para a interface. As opções listadas abaixo representam uma boa configuração inicial:
  #ZONE   INTERFACE       BROADCAST       OPTIONS
  net     eth0            detect          routefilter,norfc1918,logmartians,nosmurfs,tcpflags,blacklist
  loc     eth1            detect          tcpflags
Configuração de Políticas
Em seguida, define-se as políticas padrões do firewall. Uma política padrão é usada caso não haja outras regras associadas à política. Em geral, define-se a política padrão para REJECT ou DROP, e depois configura-se especificamente quais portas/serviços devem ser permitidos, o que é realizado no próxima passo, e todo tráfego que não "case" com algum regra, por padrão, será rejeitado ou descartado, de acordo com esta política. A seguir, um exemplo de definição de políticas (baseado nos arquivos de zonas e interfaces criados nas etapas anteriores):
  #SOURCE         DEST            POLICY          LOG             LIMIT:BURST
  #                                               LEVEL
  fw net ACCEPT
  fw loc ACCEPT
  net all DROP info
  # A SEGUINTE POLÍTICA SEMPRE DEVE SER A ÚLTIMA
  all all REJECT info
Esta política faz com que, por padrão, qualquer tráfego proveniente do servidor (fw) para a internet e para a rede local seja aceito. Qualquer tráfego proveniente da internet destinado ao servidor ou a rede local deve ser descartado e registrado no nível de log do syslog "info". A última linha fecha tudo e grava em log no nível "info". Vale salientar a diferença entre as políticas DROP e REJECT, onde a primeira apenas descarta silenciosamente, enquanto a segunda envia mensagem ao remetente que os pacotes enviados foram rejeitados.
Configuração de Regras
O arquivo mais importante é o de regras, rules. Nele é que se define o que é permitido ou não. Qualquer nova conexão que chega ao firewall passa por essas regras e, se não "casar" com algumas das regras, a política padrão será aplicada.
O formato usual para construção das regras é:
ACTION: Ação dada ao tráfego, se será rejeitado, aceito ou descartado;
SOURCE: Remetente, quem origina o tráfego. Pode ser usado como opções o nome da zona, o nome da zona com dois pontos e o endereço IP do host da zona, a zona e a sub-rede, a zona e uma lista de hosts separados por vírgula, a zona e o endereço MAC do host ou a zona e uma faixa de endereços IP;
DEST: Destinatário do tráfego, para o qual a regra será aplicada. Possíveis opções: nome da zona;
PROTO: Protocolo que será usado;
DEST PORT(S): porta de destino do tráfego.
Para facilitar a construção da regras, segue um quadro com um resumo das opções de cada campo do formato da regra:
ACTIONSOURCEDESTPROTODEST PORT(S) Interv. de Portas
ACCEPT, DROP, REJECT, DNAT, DNAT-, REDIRECT, CONTINUE, LOG, QUEUEdmz, fw, loc, net, loc:ipaddr, loc:ipaddr/mask, fw:~mac, net:ipaddrrange, dmz:ipaddr,ipaddrdmz, fw, loc, nettcp, udp, icmp, allnúmero, menor:maior
Eis um exemplo comentado sobre a construção de regras:
  #ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/   MARK
  #                                                       PORT    PORT(S)         DEST            LIMIT           GROUP
  # Aceitar pacotes icmp da internet para o firewall em no máximo 8 por segundo
  ACCEPT net fw icmp 8
  # Aceitar pacotes icmp do firewall para a internet de forma ilimitada
  ACCEPT fw net icmp
  # Aceitar pacotes tcp da internet para o firewall no serviços indicados
  ACCEPT net fw tcp ssh,http,https,smtp,imap,imaps
  # Aceitar pacotes udp da internet para o firewall no serviço https
  ACCEPT net fw udp https
  # Aceitar pacotes tcp especificamente do IP internet 200.200.200.200  para o firewall
  ACCEPT net:200.200.200.200 fw tcp
NAT
Para realizar NAT, antes de qualquer coisa, deve-se alterar a váriavel IP_FORWARDING de Off para On no arquivo de configuração /etc/shorewall/shorewall.conf. O mascaramento de endereços nas interfaces (SNAT) é realizada, de forma simples, no arquivo masq:
  # Todo o tráfego que vem da rede interna (eth1) deve ser traduzido para fora pela interface internet (eth0)
  eth0 eth1
Para a utilização de regras DNAT, basta incluir no arquivo de regras (rules), linhas como a comentada abaixo:
  # Encaminha as requisições http provenientes da internet para a máquina 192.168.0.4 da rede interna
  DNAT     net     loc:192.168.0.4  tcp    www
Proxy Transparente
Uma regra para utilizar Proxy Transparente, ou seja, que os pacotes com destino à porta 80 (http) sejam desviados automaticamente pelo firewall para o serviço proxy na porta 3128, é obtida através do comando:
  # Neste caso, o Servidor Proxy está rodando junto com o Firewall.
  # Se o Servidor Proxy estiver rodando em outra máquina, utilizar DNAT.
  REDIRECT    loc   3128   tcp   http   -   -
Teste da Configuração
Para testar se a configuração tem algum erro, executa-se:
  # shorewall check
Se apresentar algum erro:
  # shorewall debug restart
Com isso, é possível verificar onde está ocorrendo o erro informado. Caso haja erro de sintaxe na configuração, recomenda-se uma leitura no arquivo /var/log/shorewall-init.log para descoberta da causa.
Se ao final do comando for exibido Shorewall configuration verified já é possível iniciar o Shorewall:
  #/etc/init.d/shorewall start
Utilização de Macros
O Shorewall disponibiliza macros (conjunto de regras) utilizadas para liberar ou bloquear alguma conexão com base na identificação serviço. Os arquivos de macros podem ser encontrados no diretório /usr/share/shorewall/.
A sintaxe de utilização é a seguinte:
  MACRO/AÇÃO opções
Por exemplo, descartar conexões provenientes da internet para o firewall no serviço SSH:
  SSH/DROP net fw
Supondo que seja necessário configurar uma macro para os serviço OpenVPN em /usr/share/shorewall/macro.OPENVPN.
  #ACTION SOURCE  DEST    PROTO   DEST    SOURCE  RATE    USER/
  #                               PORT(S) PORT(S) LIMIT   GROUP
  PARAM   -       -       tcp     1194
Neste caso, digitar:
  OPENVPN/ACCEPT net fw
Terá o mesmo efeito que:
  ACCEPT net fw tcp 1194
É possível e mais interessante substituir vários comandos utilizando macros quando o serviço utilizar várias portas e tanto o protocolo tcp quanto udp.
Shorewall Web interface
Há poucas opções gráficas para gerenciamento do Shorewall, sendo um módulo do webmin a mais consistente até o presente momento, disponível em http://www.webmin.com/download/modules/shorewall.wbm.gz.
Considerações Finais
Assim como o FireHOL, Shorewall busca facilitar a vida de quem tem que administrar firewalls iptables com muitas linhas e não requer que o mantenedor tenha conhecimento de iptables, embora isso contribua bastante no momento da verificação da corretude da regras.
Shorewall, a exemplo de outros serviços como Apache, procura manter a configuração em pequenos arquivos separados para facilitar gerenciamento, ao invés de em uma configuração enorme. Shorewall também mantém configurações separadas para os serviços (macros). Dessa forma, se requisitos de um serviço mudam, apenas a macro precisará ser editada.
Por fim, é sempre importante estudar a fundo a ferramenta que se escolher, para estar preparado quando tiver que resolver detalhes de configuração de um firewall em pouco espaço de tempo.
Referências
http://www.shorewall.net/
Postar um comentário

Postagens mais visitadas deste blog

MANUAL DE REDAÇÃO DA PRESIDÊNCIA DA REPÚBLICA

Plural de substantivos compostos