De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
#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
#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
.
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.
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
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
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.
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 | SOURCE | DEST | PROTO | DEST PORT(S) Interv. de Portas |
---|---|---|---|---|
ACCEPT, DROP, REJECT, DNAT, DNAT-, REDIRECT, CONTINUE, LOG, QUEUE | dmz, fw, loc, net, loc:ipaddr, loc:ipaddr/mask, fw:~mac, net:ipaddrrange, dmz:ipaddr,ipaddr | dmz, fw, loc, net | tcp, udp, icmp, all | nú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
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
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 - -
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
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
.
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.
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.
José Messias Alves da Silva é Matemático, Cientista da Computação pela UFPI, Especialista em Administração em Redes Linux, Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação do Tribunal Regional do Trabalho da 22ª Região. Entusiasta de soluções FOSS e ativista de cultura Hacker.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários