Construção de Firewall - 1

iptables

 Conteúdo

 Introdução

-         Características do firewall iptables

-         Ficha técnica

-         Arquivos de logs criados pelo iptables

-         Instalação

-         Tipos de Firewalls

-         Proteção

-         Regras

-         Chains

-         Tabelas

-         Habilitando suporte ao iptables no kernel

Manipulando chains

O iptables trabalha com uma tabela de regras que é analisada uma a uma até que a última seja processada.

-         Adicionando regras

-         Listando regras

-         Apagando uma regra

-         Inserindo uma regra

-         Substituindo uma regra

-         Criando um novo chain

-         Renomeando um chain criado pelo usuário

-         Listando os nomes de todas as tabelas atuais

-         Limpando as regras de um chain

-         Apagando um chain criado pelo usuário

-         Zerando contador de bytes dos chains

-         Especificando o policiamento padrão de um chain

Outras opções do iptables

-         Especificando um endereço de origem/destino

-         Especificando a interface de origem destino

-         Especificando um protocolo

-         Especificando fragmentos

-         Especificando uma exceção

-         Especificando um alvo

-         Salvando e Restaurando regras

Tabela NAT (Network Address Translation)

A tabela nat serve para controlar a tradução dos endereços que atravessam o código de roteamento da máquina Linux.

-         Criando um novo chain na tabela NAT

-         IP masquerading

-         SNAT

-         DNAT

-         Monitorando conexões feitas na tabela NAT

Tabela mangle

A tabela mangle serve para especificar ações especiais para o tratamento do tráfego que atravessa os chains.

-         Especificando o tipo de serviço

-         Especificando o TOS para tráfego de saída

-         Especificando o TOS para tráfego de entrada

Outros módulos do iptables

Os módulos do iptables permitem expandir a funcionalidade do firewall através de novas conferências e recursos de filtragem adicionais.

-         Estado de conexão

-         Limitando o número de vezes que a regra confer

-         Proteção contra ping da morte, contra syn flood e contra IP spoofing

-         Especificando múltiplas portas de origem/destino

-         Especificando o endereço MAC da interface

-         Conferindo com o usuário que iniciou a conexão

-         Inspeção do conteúdo de um pacote

-         Conferindo com o tempo de vida de um pacote

-         Controle especial sobre o tráfego RPC

-         Identificando um pacote

-         Tamanho do pacote

Caminho percorrido pelos pacotes nas tabelas e chains

É muito importante entender a função de cada filtro e a ordem de acesso dos chains de acordo com o tipo de conexão e interface de origem/destino. Temos por objetivo explicar a ordem que as regra são atravessadas, isso lhe permitirá planejar a distribuição das regras nos chains, e evitar erros de localização de regras que poderia deixar seu firewall com sérios problemas de segurança, ou um sistema de firewall totalmente confuso e sem lógica.

Exemplos de configurações do iptables

 

 


Introdução

 

O Firewall é um programa que tem como objetivo proteger a máquina contra acessos indesejados, tráfego indesejado, proteger serviços que estejam rodando na máquina e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da Internet para sua segura rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais).

O firewall iptables (também chamado de netfilter) que substitui o ipchains dos kernels da série 2.2. Este novo firewall tem como vantagem ser muito estável (assim como o ipchains e ipfwadm), confiável, permite muita flexibilidade na programação de regras pelo administrador do sistema, mais opções disponíveis ao administrador para controle de tráfego, controle independente do tráfego da rede local/entre redes/interfaces devido a nova organização das etapas de roteamento de pacotes.

O iptables é um firewall em nível de pacotes e funciona baseado no endereço/porta de origem/destino do pacote, prioridade, etc. Ele funciona através da comparação de regras para saber se um pacote tem ou não permissão para passar. Em firewalls mais restritivos, o pacote é bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que está acontecendo em seu sistema.

Ele também pode ser usado para modificar e monitorar o tráfego da rede, fazer NAT (masquerading, source nat, destination nat), redirecionamento de pacotes, marcação de pacotes, modificar a prioridade de pacotes que chegam/saem do seu sistema, contagem de bytes, dividir tráfego entre máquinas, criar proteções anti-spoofing, contra syn flood, DoS, etc. O tráfego vindo de máquinas desconhecidas da rede pode também ser bloqueado/registrado através do uso de simples regras. As possibilidades oferecidas pelos recursos de filtragem iptables como todas as ferramentas UNIX maduras dependem de sua imaginação, pois ele garante uma grande flexibilidade na manipulação das regras de acesso ao sistema, precisando apenas conhecer quais interfaces o sistema possui, o que deseja bloquear, o que tem acesso garantido, quais serviços devem estar acessíveis para cada rede, e iniciar a construção de seu firewall.

O iptables ainda tem a vantagem de ser modularizável, funções podem ser adicionadas ao firewall ampliando as possibilidades oferecidas.

Um firewall não funciona de forma automática (instalando e esperar que ele faça as coisas por você), é necessário pelo menos conhecimentos básicos de rede tcp/ip, roteamento e portas para criar as regras que farão a segurança de seu sistema. A segurança do sistema depende do controle das regras que serão criadas por você, as falhas humanas são garantia de mais de 95% de sucesso nas invasões.

Enfim o iptables é um firewall que agradará tanto a pessoas que desejam uma segurança básica em seu sistema, quando administradores de grandes redes que querem ter um controle minucioso sobre o tráfego que passam entre suas interfaces de rede (controlando tudo o que pode passar de uma rede a outra), controlar o uso de tráfego, monitoração, etc.

O iptables é um código de firewall das versões 2.4 e 2.6 do kernel, que substituiu o ipchains (presente nas séries 2.2 do kernel). Ele foi incluído no kernel da série 2.4 em meados de Junho/Julho de 1999. 

 

Características do firewall iptables

 

·       Especificação de portas/endereço de origem/destino

·       Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagens icmp)

·       Suporte a interfaces de origem/destino de pacotes

·       Manipula serviços de proxy na rede

·       Tratamento de tráfego dividido em chains (para melhor controle do tráfego que entra/sai da máquina e tráfego redirecionado.

·       Permite um número ilimitado de regras por chain

·       Muito rápido, estável e seguro

·       Possui mecanismos internos para rejeitar automaticamente pacotes duvidosos ou mal formados.

·       Suporte a módulos externos para expansão das funcionalidades padrões oferecidas pelo código de firewall

·       Suporte completo a roteamento de pacotes, tratadas em uma área diferente de tráfegos padrões.

·       Suporte a especificação de tipo de serviço para priorizar o tráfego de determinados tipos de pacotes.

·       Permite especificar exceções para as regras ou parte das regras

·       Suporte a detecção de fragmentos

·       Permite enviar alertas personalizados ao syslog sobre o tráfego aceito/bloqueado.

·       Redirecionamento de portas

·       Masquerading

·       Suporte a SNAT (modificação do endereço de origem das máquinas para um único IP ou faixa de IP's).

·       Suporte a DNAT (modificação do endereço de destino das máquinas para um único IP ou fixa de IP's)

·       Contagem de pacotes que atravessaram uma interface/regra

·       Limitação de passagem de pacotes/conferência de regra (muito útil para criar proteções contra, syn flood, ping flood, DoS, etc).

 

Ficha técnica

Pacote: iptables

·       iptables - Sistema de controle principal para protocolos ipv4

·       ip6tables - Sistema de controle principal para protocolos ipv6

·       iptables-save - Salva as regras atuais em um arquivo especificado como argumento. Este utilitário pode ser dispensado por um shell script contendo as regras executado na inicialização da máquina.

·       iptables-restore - Restaura regras salvas pelo utilitário iptables-save.

 

 Arquivos de logs criados pelo iptables

Todo tráfego que for registrado pelo iptables é registrado por padrão no arquivo /var/log/kern.log.

Instalação

# apt-get install iptables

O pacote iptables contém o utilitário iptables (e ip6tables para redes ipv6) necessários para inserir suas regras no kernel. Se você não sabe o que é ipv6, não precisará se preocupar com o utilitário ip6tables por enquanto.

Tipos de firewalls

Existem basicamente dois tipos de firewalls:

·       nível de aplicação - Este tipo de firewall analisam o conteúdo do pacote para tomar suas decisões de filtragem. Firewalls deste tipo são mais intrusivos (pois analisam o conteúdo de tudo que passa por ele) e permitem um controle relacionado com o conteúdo do tráfego. Alguns firewalls em nível de aplicação combinam recursos básicos existentes em firewalls em nível de pacotes combinando as funcionalidade de controle de tráfego/controle de acesso em uma só ferramenta. Servidores proxy, como o squid, são um exemplo deste tipo de firewall.

·       nível de pacotes - Este tipo de firewall toma as decisões baseadas nos parâmetros do pacote, como porta/endereço de origem/destino, estado da conexão, e outros parâmetros do pacote. O firewall então pode negar o pacote (DROP) ou deixar o pacote passar (ACCEPT). O iptables é um excelente firewall que se encaixa nesta categoria.

 

Os dois tipos de firewalls podem ser usados em conjunto para fornecer uma camada dupla de segurança no acesso as suas máquinas/máquinas clientes.

O que proteger?

Antes de iniciar a construção do firewall é bom pensar nos seguintes pontos:

·       Quais serviços precisa proteger. Serviços que devem ter acesso garantido a usuários externos e quais serão bloqueados a todas/determinadas máquinas. É recomendável bloquear o acesso a todas portas menores que 1024 por executarem serviços que rodam com privilégio de usuário root, e autorizar somente o acesso as portas que realmente deseja (configuração restritiva nesta faixa de portas).

·       Que tipo de conexões eu posso deixar passar e quais bloquear. Serviços com autenticação em texto plano e potencialmente inseguros como rlogin, telnet, ftp, NFS, DNS, LDAP, SMTP RCP, X-Window são serviços que devem ser ter acesso garantido somente para máquinas/redes que você confia. Estes serviços podem não ser só usados para tentativa de acesso ao seu sistema, mas também como forma de atacar outras pessoas aproveitando-se de problemas de configuração.

A configuração do firewall ajuda a prevenir isso, mesmo se um serviço estiver mal configurado e tentando enviar seus pacotes para fora, será impedido. Da mesma forma se uma máquina Windows de sua rede for infectada por um trojan não haverá pânico: o firewall poderá estar configurado para bloquear qualquer tentativa de conexão vinda da internet (cracker) para as máquinas de sua rede.

Para cópia de arquivos via rede insegura (como através da Internet), é recomendado o uso de serviços que utilizam criptografia para login e transferência de arquivos ou a configuração de uma VPN.

·       Que máquinas terão acesso livre e quais serão restritas.

·       Que serviços deverão ter prioridade no processamento.

·       Que máquinas/redes NUNCA deverão ter acesso a certas/todas máquinas.

·       O volume de tráfego que o servidor manipulará. Através disso você pode ter que balancear o tráfego entre outras máquinas, configurar proteções contra DoS, syn flood, etc.

·       O que tem permissão de passar de uma rede para outra (em máquinas que atuam como roteadores/gateways de uma rede interna).

·       Etc.

A análise destes pontos pode determinar a complexidade do firewall, custos de implementação, prazo de desenvolvimento e tempo de maturidade do código para implementação. Existem muitos outros pontos que podem entrar na questão de desenvolvimento de um sistema de firewall, eles dependem do tipo de firewall que está desenvolvendo e das políticas de segurança de sua rede.

O que são regras?

As regras são como comandos passados ao iptables para que ele realize uma determinada ação (como bloquear ou deixar passar um pacote) de acordo com o endereço/porta de origem/destino, interface de origem/destino, etc. As regras são armazenadas dentro dos chains e processadas na ordem que são inseridas.

As regras são armazenadas no kernel, o que significa que quando o computador for reiniciado tudo o que fez será perdido. Por este motivo elas deverão ser gravadas em um arquivo para serem carregadas a cada inicialização.

Um exemplo de regra: iptables -A INPUT -s 123.123.123.1 -j DROP

 

O que são chains?

Os Chains são locais onde as regras do firewall definidas pelo usuário são armazenadas para operação do firewall. Existem dois tipos de chains: os embutidos (como os chains INPUT, OUTPUT e FORWARD) e os criados pelo usuário. Os nomes dos chains embutidos devem ser especificados sempre em maiúsculas (note que os nomes dos chains são case-sensitive, ou seja, o chain input é completamente diferente de INPUT).

 

O que são tabelas?

Tabelas são os locais usados para armazenar os chains e conjunto de regras com uma determinada característica em comum. As tabelas podem ser referenciadas com a opção -t tabela e existem 3 tabelas disponíveis no iptables:

·       filter - Esta é a tabela padrão, contém 3 chains padrões:

·       INPUT - Consultado para dados que chegam a máquina

·       OUTPUT - Consultado para dados que saem da máquina

·       FORWARD - Consultado para dados que são redirecionados para outra interface de rede ou outra máquina.

·       Os chains INPUT e OUTPUT somente são atravessados por conexões indo/se originando de localhost.

OBS: Para conexões locais, somente os chains INPUT e OUTPUT são consultados na tabela filter.

·       nat - Usada para dados que gera outra conexão (masquerading, source nat, destination nat, port forwarding, proxy transparente são alguns exemplos). Possui 3 chains padrões:

·       PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. É o chain ideal para realização de DNAT e redirecionamento de portas.

·       OUTPUT - Consultado quando os pacotes gerados localmente precisam ser modificados antes de serem roteados. Este chain somente é consultado para conexões que se originam de IPs de interfaces locais.

·       POSTROUTING - Consultado quando os pacotes precisam ser modificados após o tratamento de roteamento. É o chain ideal para realização de SNAT e IP Masquerading.

·       mangle - Utilizada para alterações especiais de pacotes (como modificar o tipo de serviço (TOS) ou outros detalhes que serão explicados no decorrer do capítulo. Possui 2 chains padrões:

·       INPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain INPUT da tabela filter.

·       FORWARD - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain FORWARD da tabela filter.

·       PREROUTING - Consultado quando os pacotes precisam ser modificados antes de ser enviados para o chain PREROUTING da tabela nat.

·       POSTROUTING - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain POSTROUTING da tabela nat.

OUTPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain OUTPUT da tabela nat.

Adonel  Bezerra

Pós-graduado em Teoria em Educação a Distância e Docência do Ensino Superior;

MBA Executivo em Coaching;

Coordenador de cursos de pós-graduação.

Experiência em Gestão de Negócios, envolvendo-se com as áreas administrativa, financeira, comercial, produção e logística;

Experiência de mais de 20 anos como professor conferencista na área de segurança da informação;

Sólida experiência na gestão de negócios e tecnologia da informação;

Sólida experiência no meio acadêmico; 

Consultor de Segurança da informação com mais de vinte anos de experiência;

Treinamentos e palestras ministrados para milhares de profissionais em todo o Brasil;

Livro publicado pela Editora Ciência Moderna e diversos artigos publicados.

 

ALGUMAS PARTICIPAÇÕES COMO CONFERENCISTA OU PALESTRANTE

Centro Universitário do Maranhão – UniCeuma/2009 – Apresentação “O MERCADO DE CONSULTORIA EM SEGURANÇA DE INFORMAÇÃO. 

Universidade de Fortaleza|UNIFOR – Apresentação “TÉCNICAS HACKERS PARA TESTES DE INVASÃO”.

Faculdades Integradas do Ceará – FIC/2010 – Apresentação “ SEGURANÇA DA INFORMAÇÃO”.

Escola de Gestão Pública do Estado do Ceará – /2012 – Apresentação “ SEGURANÇA DA INFORMAÇÃO COM SOFTWARE LIVRE”.

Faculdade La Salle – 2013 – Apresentação “ESPIONAGEM INTERNACIONAL”.

Estácio|FIC/2013 – Apresentação “ ANÁLISE DE VULNERABILIDADES COMO FATOR PRIMORDIAL NAS ORGANIZAÇÕES”.

Estácio|FIC/2015 – Apresentação “PROVA DE CONCEITO”.

Devry Brasil|FANOR Salvador/BA, Fortaleza/CE, Belém/PA, Caruaru/PE, Recife/PE, Teresina/PI    - Apresentação “ VULNERABILIDADES DE SISTEMAS COMPUTACIONAIS”.

 

PROJETO PESSOAL – 1998 – Até o momento

- Fundador e Mantenedor de um dos maiores portais de Segurança de sistema do Brasil, o portal Clube do Hacker; www.clubedohacker.com.br

Fundador e mantenedor da Academia Linux www.academialinux.com.br

Fundador da BUCOIN – www.bucoin.com.br