você está aqui: Home  → Arquivo de Mensagens

Firewall Iptables - Administração com FireHOL

Colaboração: José Messias Alves da Silva

Data de Publicação: 01 de agosto de 2011

FireHOL foi projetado para permitir que um firewall seja configurado da mesma forma que se pensa implementá-lo.

Os arquivos de configuração FireHOL são muito fáceis de compreender e de escrever. Representam, na realidade, scripts BASH, onde ainda é possível incluir variáveis, pipes, loops, condições, chamadas para programas externos, executar outros scripts BASH, etc.

Instalação

Em sistemas Debian-like

  #apt-get install firehol

FireHOL está desabilitado por padrão, sendo necessário modificar o arquivo /etc/default/firehol para ativá-lo, alterando

  START_FIREHOL=NO

para

  START_FIREHOL=YES

Em sistemas baseados em RPM

  #yum install firehol

Habilitando FireHOL para ser iniciado durante o boot:

  # chkconfig firehol on

Verificando se os serviços serão iniciados durante o boot:

  # chkconfig --list | grep "iptables\|firehol"
  firehol         0:off   1:off   2:on    3:on    4:on    5:on    6:off
  iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off

Configurando as regras de firewall no FireHOL

O arquivo de configuração que contém as regras de firewall está localizado em /etc/firehol/firehol.conf, que, inicialmente, está definido para bloquear tudo que entra e aceitar tudo vai para fora.

Um firewall totalmente funcional pode ser configurado em um arquivo bem simples como:

  #!/sbin/firehol
  version 5
  interface any world
      protection strong
      server "ssh dns http" allow
      client all accept

Há basicamente quatro comandos:

  • interface - para configurar firewall em uma interface de rede;
  • router - para configurar firewall o tráfego encaminhado de um interface de rede para outra;
  • server - para configurar um serviço em uma interface ou router;
  • client - para configurar um cliente de serviço em uma interface ou router.

Comandos client e server têm exatamente a mesma sintaxe. Já interface tem dois argumentos obrigatórios e router tem apenas um.

Todos os parâmetros opcionais são os mesmos para todos eles.

Assim, aprendendo a sintaxe de um comando, tem-se aprendido a dos demais.

Caso se esteja executando apenas serviços padrão, sugere-se apenas editar o arquivo.

Por outro lado, caso haja serviços personalizados, recomenda-se criar um arquivo de configuração, personalizá-lo, testá-lo e, por fim, colocá-lo em produção.

Gerando de Arquivo de Configuração

FireHOL pode gerar automaticamente um arquivo de configuração para posterior personalização.

O comando firehol helpme identifica os serviços que estão rodando no servidor e cria um arquivo de configuração, que permite todo o tráfego entre eles e bloqueia todo o tráfego restante.

Depois que o arquivo é gerado, é necessário que se faça uma revisão e, eventualmente, modificações para garantir que as regras estão corretas.

  # firehol helpme > /tmp/firehol.conf

Personalizando o arquivo de configuração

O arquivo de configuração gerado automaticamente exibe itens que devem ser revisados. É possível renomear as interfaces para algo mais significativo, como "LAN" e "Internet".

Pode-se remover qualquer um dos serviços ("custom") incluídos na regras. Para especificar um intervalo de portas, usa-se dois pontos ao invés de um traço.

Para especificar as portas TCP e UDP, usa-se uma lista delimitada por espaços, entre aspas.

FireHOL considera todas as requisições de entrada como requisições server e todas as requisições de saída como requisições client. Pode-se observar que há client accept all em todas as partes do arquivo de configuração. Dessa forma, todas as requisições de clientes a qualquer serviço são permitidos. Caso se queira restringir as requisições a um determinado serviço, pode-se utilizar a regra:

  client nome_servico allow

Definindo novos serviços

FireHOL, por padrão, vem com um grande número de serviços predefinidos, incluindo http, https, dhcp, icmp, samba, snmp, syslog, telnet, ssh, entre outros.

Entretanto, caso o serviço não exista na lista de serviços FireHOL, é simples adicionar um.

Há duas maneiras para realizar essa tarefa. A primeira é usando a sintaxe de definição de serviço. Supondo que o serviço OpenVPN está rodando e seja necessário acesso irrestrito a porta do OpenVPN. Coloca-se as definições no início do arquivo de configuração:

  server_openvpn_ports="tcp/1194"
  client_openvpn_ports="default"

Supondo ainda que, baseado no arquivo de configuração gerado, a interface de Internet é eth0. Deve-se editar a configuração da interface eth0, adicionando a seguinte linha:

  server openvpn accept
  client openvpn accept

O segundo método, mais enxuto, é usando a sintaxe de definição de serviço em uma única linha na configuração da interface eth0:

   server custom openvpn "tcp/1194 udp/1194" default accept

Proxy transparente

Uma importante regra, comumente utilizada em muitos firewalls, é para executar redirecionamento de tráfego HTTP para um Proxy da rede local.

Supondo que já exista instalado e configurado corretamente um servidor proxy, basta editar o arquivo de configuração e acrescentar após a diretiva version:

   transparent_squid 3128 "proxy proxy" inface eth0

O comando transparent_squid é equivalente ao comando transparent_proxy e suas opções.

NAT - Network Address Translation

O mapeamento de requisições de uma máquina para um outra é conhecida como NAT - Network Address Translation. Basicamente, trata-se de alterar os endereços de origem e/ou destino dos pacotes IP que passam através de um roteador ou firewall. A maioria dos sistemas fazem uso de NAT, visando permitir que várias máquinas em uma rede privada tenha acesso à Internet usando um único endereço IP público. Entretanto, será demonstrado aqui como realizar um mapeamento reverso.

Supondo que haja um servidor web localizado na LAN, não possuindo qualquer endereço IP público, sendo, dessa forma, impossível acessá-lo através da Internet.

Assim, é possível utilizar o FireHOL para encaminhar as requisições destinadas ao firewall na porta HTTP (porta TCP 80) para a máquina local.

Este tipo de configuração é freqüentemente implementada para segregar as máquinas em vários segmentos seguros, comumente denominada DMZ - DeMilitarized Zone.

Para exemplificar, consideremos que o endereço IP interno do servidor web seja 192.168.0.8 e o endereço IP público na máquina firewall (200.200.200.200) usando a interface eth0, e o segmento de rede local está conectado a interface eth1 do firewall.

Assim, toda requisição na interface com IP público sobre firewall eth0 será redirecionada para o servidor web interno em 192.168.0.8.

Para realizar tal tarefa, adiciona-se a seguinte diretiva antes das definições de interface:

   nat to-destination 192.168.0.8 proto "tcp" dport "80" dst 200.200.200.200/32

Testando o arquivo de configuração

Para verificar a corretude do arquivo de configuração, basta executar o comando:

  # firehol test /tmp/firehol.conf

Ativando o arquivo de configuração

Com o arquivo de configuração personalizado e testado, copia-se para o diretório de configuração:

  # cp /tmp/firehol.conf /etc/firehol/firehol.conf

Exemplo de arquivo de configuração comentado

  # Exige a release 5 das diretivas de configuração do FireHOL
  version 5
  
  # Habilita proxy transparente
  transparent_squid 3128 "proxy proxy" inface eth0
  
  # Redireciona requisições na porta 80 do endereço 200.200.200.200 para a máquina 192.168.0.8
  nat to-destination 192.168.0.8 proto "tcp" dport "80" dst 200.200.200.200/32
  
  # Bloqueia conexão de entrada a partir de um IP
  #blacklist this "201.201.201.201 202.202.202.202"       # com aspas
  
  # Bloqueia conexão de entrada e saída a partir de/para um IP
  #blacklist full 203.203.203.203 204.204.204.204         # sem aspas
  
  
  interface "eth0" Internet
          # Ativa toda a proteção disponível para diversas formas de ataque
           protection strong
          # Servidores Publicos.
           server "ssh" accept
          # Configura e habilita um serviço específico não-padrão
           server custom openvpn "tcp/1194 udp/1194" default accept
          # Permite iniciar conexões a qualquer serviço, como uma estação de trabalho
           client all accept
  
  interface "eth1" LAN
           policy accept     # A política padrão é "drop"
           client all accept
  
           
  # Rotea requisições da LAN para a Internet.
  router lan2internet inface "eth1" outface "eth0"
           client all accept
           # Rotea todas as requisições da interface de entrada para interface saída e suas respostas   
           route all accept
           # Mascaramento da interface de saída.
           masquerade

Estando tudo pronto, basta iniciar o FireHOL:

  #/etc/init.d/firehol start

Considerações Finais

É possível reduzir arquivos de configuração iptables bastante volumosos para poucas regras com FireHOL e obtendo os mesmos resultados, mantendo ao mesmo tempo segurança e funcionalidade.

Convém chamar a atenção para as diferenças entre regras para interface da rede interna e regras para interface de Internet. Esta dica não visa suprir todo o conteúdo necessário a construção de um firewall com FireHOL. Recomenda-se, sempre que necessário, consultar a lista completa de comandos da ferramenta, que se encontra em [http://firehol.sourceforge.net/commands.html].

A próxima dica abordará a administração de firewall iptables com Shorewall, para que os leitores possam avaliar e escolher o que melhor se adequa ao seu ambiente e ao seu aprendizado.

Referências

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.


Veja a relação completa dos artigos de José Messias Alves da Silva

 

 

Opinião dos Leitores

Messias Alves
03 Ago 2011, 18:14
Caro Luiz Gustavo,

Creio que você esteja falando de "SNAT", visto que "DNAT" e "masquerade" (que também é uma forma de SNAT) foram abordados na Dica. Quanto a SNAT, é bem simples também, veja como ficaria:

snat to IP_de_saida outface eth0 src IP_interno dst IP_de_destino

Obrigado por colaborar com comentário e grande abraço.
Luiz Gustavo
02 Ago 2011, 02:22
Legal, gostei do artigo. Mas como ficariam as demais regras de NAT? Abs.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script