Construção de Firewall - 3

Zerando contador de bytes dos chains - Z

Este comando zera o campo pkts e bytes de uma regra do iptables. Estes campos podem ser visualizados com o comando iptables -L -v. A seguinte sintaxe é usada:

iptables [-t tabela] [-Z chain] [-L]

Onde:

tabela

Nome da tabela que contém o chain que queremos zerar os contadores de bytes e pacotes.

chain

Chain que deve ter os contadores zerados. Caso não seja especificado, todos os chains da tabela terão os contadores zerados. Note que as opções -Z e -L podem ser usadas juntas, assim o chain será listado e imediatamente zerado. Isto evita a passagem de pacotes durante a listagem de um chain.

      iptables -t filter -Z INPUT

Especificando o policiamento padrão de um chain - P

O policiamento padrão determina o que acontecerá com um pacote quando ele chegar ao final das regras contidas em um chain. O policiamento padrão do iptables é "ACCEPT" mas isto pode ser alterado com o comando:

iptables [-t tabela] [-P chain] [ACCEPT/DROP]

Onde:

tabela

Tabela que contém o chain que desejamos modificar o policiamento padrão.

chain

Define o chain que terá o policiamento modificado. O chain deve ser especificado.

ACCEPT/DROP

ACCEPT aceita os pacotes caso nenhuma regra do chain conferir (usado em regras permissivas). DROP rejeita os pacotes caso nenhuma regra do chain conferir (usado em regras restritivas).

O policiamento padrão de um chain é mostrado com o comando iptables -L:

     # iptables -L INPUT

    

     Chain INPUT (policy ACCEPT)

     target     prot opt source               destination        

     DROP       icmp --  anywhere             localhost

            No exemplo acima, o policiamento padrão de INPUT é ACCEPT (policy ACCEPT), o que significa que qualquer pacote que não seja rejeitado pela regra do chain, será aceito. Para alterar o policiamento padrão deste chain usamos o comando:

      iptables -t filter -P INPUT DROP

NOTA: Os policiamentos PERMISSIVOS (ACCEPT) normalmente são usados em conjunto com regras restritivas no chain correspondentes (tudo é bloqueado e o que sobrar é liberado) e policiamentos RESTRITIVOS (DROP) são usados em conjunto com regras permissivas no chain correspondente (tudo é liberado e o que sobrar é bloqueado pelo policiamento padrão).

 


Outras opções do iptables

Especificando um endereço de origem/destino

            As opções -s (ou --src/--source)e -d (ou --dst/--destination) servem para especificar endereços de origem e destino respectivamente. É permitido usar um endereço IP completo (como 192.168.1.1), um hostname (debian), um endereço fqdn (www.debian.org) ou um par rede/máscara (como 200.200.200.0/255.255.255.0 ou 200.200.200.0/24).

            Caso um endereço/máscara não sejam especificados, é assumido 0/0 como padrão (todos as máquinas de todas as redes). A interpretação dos endereços de origem/destino dependem do chain que está sendo especificado (como INPUT e OUTPUT por exemplo).

 

OBS: Caso seja especificado um endereço fqdn e este resolver mais de um endereço IP, serão criadas várias regras, cada uma se aplicando a este endereço IP específico. É recomendável sempre que possível a especificação de endereços IP's nas regras, pois além de serem muito rápidos (pois não precisar de resolução DNS) são mais seguros para evitar que nosso firewall seja enganado por um ataque de IP spoofing.

     # Bloqueia o tráfego vindo da rede 200.200.200.*:

      iptables -A INPUT -s 200.200.200.0/24 -j DROP

    

     # Bloqueia conexões com o destino 10.1.2.3:

     iptables -A OUTPUT -d 10.1.2.3 -j DROP

    

     # Bloqueia o tráfego da máquina www.dominio.teste.org a rede 210.21.1.3

     # nossa máquina possui o endereço 210.21.1.3

              iptables -A INPUT -s www.dominio.teste.org -d 210.21.1.3 -j DROP

 

 

Especificando a interface de origem/destino

            As opções -i (ou --in-interface) e -o (ou --out-interface) especificam as interfaces de origem/destino de pacotes. Nem todos as chains aceitam as interfaces de origem/destino simultaneamente, a interface de entrada (-i) nunca poderá ser especificada em um chain OUTPUT e a interface de saída (-o) nunca poderá ser especificada em um chain INPUT. Abaixo uma rápida referência:

    

               +---------------------+--------------------------------+

       TABELA  |      CHAIN          |            INTERFACE           |

               |                     +----------------+---------------+

               |                     |  ENTRADA (-i)  |    SAÍDA (-o) |

     +---------+---------------------+----------------+---------------+

     |         |  INPUT              |      SIM       |      NÃO      |

     | filter  |  OUTPUT             |      NÃO       |      SIM      |

     |         |  FORWARD            |      SIM       |      SIM      |

     +---------+---------------------+----------------+---------------+

     |         | PREROUTING          |      SIM       |      NÃO      |

     | nat     | OUTPUT              |      NÃO       |      SIM      |

     |         | POSTROUTING         |      NÃO       |      SIM      |

     +---------+---------------------+----------------+---------------+

     |         | PREROUTING          |      SIM       |      NÃO      |

     | mangle  |                     |                |               |

     |         | OUTPUT              |      NÃO       |      SIM      |

     +---------+---------------------+----------------+---------------+

            O caminho do pacote na interface será determinado pelo tipo da interface e pela posição dos chains nas etapas de seu roteamento. O chain OUTPUT da tabela filter somente poderá conter a interface de saída (veja a tabela acima). O chain FORWARD da tabela filter é o único que aceita a especificação de ambas as interfaces, este é um ótimo chain para controlar o tráfego que passa entre interfaces do firewall.

            Por exemplo para bloquear o acesso do tráfego de qualquer máquina com o endereço 200.123.123.10 vinda da interface ppp0 (uma placa de fax-modem):

     iptables -A INPUT -s 200.123.123.10 -i ppp0 -j DROP

            A mesma regra pode ser especificada como

     iptables -A INPUT -s 200.123.123.10 -i ppp+ -j DROP

            O sinal de "+" funciona como um coringa, assim a regra terá efeito em qualquer interface de ppp0 a ppp9. As interfaces ativas no momento podem ser listadas com o comando ifconfig, mas é permitido especificar uma regra que faz referência a uma interface que ainda não existe, isto é interessante para conexões intermitentes como o PPP. Para bloquear qualquer tráfego local para a Internet:

     iptables -A OUTPUT -o ppp+ -j DROP

            Para bloquear a passagem de tráfego da interface ppp0 para a interface eth1 (de uma de nossas redes internas):

     iptables -A FORWARD -i ppp0 -o eth1 -j DROP

 

Especificando um protocolo

            A opção -p (ou --protocol) é usada para especificar protocolos no iptables. Podem ser especificados os protocolos tcp, udp e icmp. Por exemplo, para rejeitar todos os pacotes UDP vindos de 200.200.200.200:

      iptables -A INPUT -s 200.200.200.200 -p udp -j DROP

OBS1: Tanto faz especificar os nomes de protocolos em maiúsculas ou minúsculas.

Especificando portas de origem/destino

            As portas de origem/destino devem ser especificadas após o protocolo e podem ser precedidas por uma das seguintes opções:

·       --source-port ou --sport - Especifica uma porta ou faixa de portas de origem.

·       --destination-port ou --dport - Especifica uma porta ou faixa de portas de destino.

            Uma faixa de portas pode ser especificada através de PortaOrigem:PortaDestino:

     # Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de

     # portas 0 a 1023

     iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP

            Caso a PortaOrigem de uma faixa de portas não seja especificada, 0 é assumida como padrão, caso a Porta Destino não seja especificada, 65535 é assumida como padrão.

Especificando mensagens do protocolo ICMP

            O protocolo ICMP não possui portas, mas é possível fazer um controle maior sobre o tráfego ICMP que entra/sai da rede através da especificação dos tipos de mensagens ICMP. Os tipos de mensagens devem ser especificados com a opção "--icmp-type CódigoICMP" logo após a especificação do protocolo icmp:

     iptables -A INPUT -s 200.123.123.10 -p icmp --icmp-type time-exceeded -i ppp+ -j DROP

            A regra acima rejeitará mensagens ICMP do tipo "time-exceeded" (tempo de requisição excedido) que venham do endereço 200.123.123.10 através da interface ppp+.

            Alguns tipos de mensagens ICMP são classificados por categoria (como o próprio "time-exceeded"), caso a categoria "time-exceeded" seja especificada, todas as mensagens daquela categoria (como "ttl-zero-during-transit", "ttl-zero-during-reassembly") conferirão na regra especificada.Os tipos de mensagens ICMP podem ser obtidos com o comando iptables -p icmp -h:

     echo-reply (pong)

     destination-unreachable

        network-unreachable

        host-unreachable

        protocol-unreachable

        port-unreachable

        fragmentation-needed

        source-route-failed

        network-unknown

        host-unknown

        network-prohibited

        host-prohibited

        TOS-network-unreachable

        TOS-host-unreachable

        communication-prohibited

        host-precedence-violation

        precedence-cutoff

     source-quench

     redirect

        network-redirect

        host-redirect

        TOS-network-redirect

        TOS-host-redirect

     echo-request (ping)

     router-advertisement

     router-solicitation

     time-exceeded (ttl-exceeded)

        ttl-zero-during-transit

        ttl-zero-during-reassembly

     parameter-problem

        ip-header-bad

        required-option-missing

     timestamp-request

     timestamp-reply

     address-mask-request

     address-mask-reply

 

OBS1: Não bloqueie mensagens do tipo "host-unreachable" e "source-quench", pois terá sérios problemas no controle de suas conexões. A primeira diz que o destino está inalcançavel e a segunda que o host está sobrecarregado, assim os pacotes devem ser enviados mais lentamente.

 

Especificando pacotes syn

            Pacotes syn são usados para iniciarem uma conexão, o uso da opção --syn serve para especificar estes tipos de pacotes. Desta maneira é possível bloquear somente os pacotes que iniciam uma conexão, sem afetar os pacotes restantes. Para que uma conexão ocorra é necessário que a máquina obtenha a resposta a pacotes syn enviados, caso ele seja bloqueado a resposta nunca será retornada e a conexão não será estabelecida.

     iptables -A INPUT -p tcp --syn --dport 23 -i ppp+ -j DROP

            A regra acima bloqueia (-j DROP) qualquer tentativa de conexão (--syn) vindas da interface ppp+ ao telnet (--dport 23) da máquina local, conexões já efetuadas ão são afetadas por esta regra. A opção --syn somente pode ser especificada para o protocolo tcp.

ATENÇÃO: - A situação de passagem de pacotes durante deve ser levada em conta durante a inicialização do firewall, bloqueando a passagem de pacotes durante o processo de configuração, criando regras que bloqueiam a passagem de pacotes (exceto para a interface loopback) até que a configuração do firewall esteja completa, pode ser uma solução eficiente.

            Outra alternativa segura é configurar as regras de firewall antes das interfaces de rede se tornarem ativas (usando a opção "pre-up comando_firewall" no arquivo de configuração /etc/network/interfaces em sistemas Debian.

Especificando fragmentos

            A opção "-f" (ou --fragment) permite especificar regras que confiram com fragmentos. Fragmentos são simplesmente um pacote maior dividido em pedaços para poder ser transmitido via rede TCP/IP para remontagem do pacote pela máquina de destino.

            Somente o primeiro fragmento possui detalhes de cabeçalho para ser processado, os segundos e seguintes somente possuem alguns cabeçalhos necessários para dar continuidade ao processo de remontagem do pacote no destino.

Uma regra como

     iptables -A INPUT -s 200.200.200.1 -f -j DROP

derrubará os fragmentos de 200.200.200.1 derrubará o segundo pacote e pacotes seguintes enviados por 200.200.200.1 até nós.

 

OBS1: Note que se o cabeçalho do pacote não tiver detalhes suficientes para checagem de regras no iptables, a regra simplesmente não ira conferir.

OBS2: Não é preciso especificar a opção "-f" para conexões NAT, pois os pacotes são remontados antes de entrarem no código de filtragem.

OBS3: A opção "-f" também pode ser usada para evitar o flood por fragmentos (bomba de fragmentos) que, dependendo da intensidade, podem até travar a máquina.

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