A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Filtragem de pacotes no Linux 2.4

Qui

26

Abr

2007


17:47

(3 votos, média 3.67 de 5) 


Outras extensões

As outras extensões do pacote do netfilter são apenas para demonstração. Se estiverem instaladas podem ser chamadas com a opção '-m'.

  • mac: este módulo precisa ser explicitamente especificado com '-m mac' ou '--match mac'. É usado para controlar o endereço (MAC) da Ethernet de origem no ingresso dos pacotes. É útil para analisar pacotes atravessando as cadeias PREROUTING e INPUT. Possui apenas uma opção:
    --mac-source: precedida por '!' opcional, depois um endereço Ethernet na notação hexbytes separados por dois pontos. Por exemplo, '--mac-source 00:60:08:91:CC:B7'.
  • limit: este módulo precisa ser explicitamente especificado com '-m limit' ou '--match limit'. É usado para restringir a taxa de acertos para, por exemplo, diminuir a quantidade de mensagens no log. Ele só vai atuar um determinado número de vezes por segundo (o default é 3 acertos por hora, com rajadas de 5). Aceita dois argumentos opcionais:
    --limit: seguido por um número que especifica a quantidade média máxima de acertos permitidos por segundo. O número pode especificar unidades (ou parte delas) como '/second', '/minute', '/hour' ou '/day' ('5/second é o mesmo que '5/s').
    --limit-burst: seguido por um número, indica a rajada máxima antes que o limite acima entre em ação.

    Este filtro geralmente é usado com o alvo LOG para criar arquivos de log com taxa limitada. Para entender como funciona veja a seguinte regra, a qual loga pacotes com o parâmetro limit default:
            # iptables -A FORWARD -m limit -j LOG
    
    Na primeira vez em que esta regra se aplicar, o pacote entrará no log. Na verdade, como a rajada (burst) default é 5, os primeiros cinco pacotes serão logados. Depois disto, independentemente de quantos pacotes atenderem a regra, decorrerão 20 minutos antes que o próximo pacote seja logado. Se nenhum pacote atender a regra em 20 minutos, um dos pacotes da rajada será recuperado; se nenhum pacote ficar sujeito à regra por 100 minutos, a rajada será repetida (recarga) e o processo volta para o estado inicial.

    atencao Nota: não é possível criar uma regra com um tempo de recarregamento maior do que cerca de 59 horas. Por este motivo, se for definida uma taxa média de um por dia, a taxa da rajada precisa ser menor do que 3.

    Este módulo também pode ser usado para evitar vários ataques de negação de serviço (DoS) com uma taxa maior para aumentar a resposta.
    Proteção para o syn-flood:
            # iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
    
    Rastreamento velado de portas:
            # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    
    Ping da morte (ping of death):
            # iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    
    Este módulo trabalha como um "porta de histerese" (histerese significa atraso), como mostrado no gráfico abaixo.
    
                   taxa (pct/s)  
                         ^        .---.
                         |       / DoS \
                         |      /       \
           Borda do DoS -|.....:.........\.......................
             = (limit *  |    /:          \
            limit-burst) |   / :           \         .-.
                         |  /  :            \       /   \
                         | /   :             \     /     \
           Borda do DoS  -|/....:..............:.../.......\..../.
             = limit     |     :              :`-'         `--'
            -------------+-----+--------------+------------------> time (s)
               LOGIC =>  Casou |  Não Casou   |    Casou
    
    Digamos que filtramos um pacote por segundo com uma rajada de 5 pacotes, mas os pacotes começam a chegar num ritmo de quatro por segundo, durante três segundos, e depois a inundação começa novamente por mais três segundos.
                    <--Flood 1-->           <---Flood 2--->
    
            Total  ^                   Line  __--      YNNN
            Pacotes|               Rate  __--      YNNN
                   |            mum  __--      YNNN
                10 |        Maxi __--         Y
                   |         __--            Y
                   |     __--               Y
                   | __--    YNNN           
                   |-    YNNN
                 5 |    Y    
                   |   Y                          Chave:  Y -> Regra aplicada
                   |  Y                                   N -> Regra não aplicada
                   | Y
                   |Y 
                 0 +-------------------------------------------------->  Tempo (segundos)
                    0   1   2   3   4   5   6   7   8   9  10  11  12
    
    Pode-se ver que os primeiros cinco pacotes tiveram permissão para exceder um pacote por segundo, logo depois o limite entrou em ação. Se houver uma pausa, outra rajada é permitida, mas não acima da taxa máxima especificada pela regra (1 pacote por segundo depois que a rajada é usada).
  • owner: este módulo tenta casar várias características do criador do pacote para pacotes gerados localmente. Só atua na cadeia OUTPUT, mas alguns pacotes sem dono (como respostas ping ICMP) nunca serão retidos.
    --uid-owner userid: a regra se aplica se o pacote foi criado por um processo com a userid (numérica) indicada.
    --gid-owner groupid: a regra se aplica se o pacote foi criado por um processo com a groupid (numérica) indicada.
    --pid-owner processid: a regra se aplica se o pacote foi criado por um processo com a pid indicada.
    --sid-owner sessionid: a regra se aplica se o pacote foi criado por um processo no grupo de sessões sessionid indicado.
  • unclean: este módulo experimental precisa ser explicitamente especificado com '-m unclean' ou '--match unclean'. Ele faz várias checagens randômicas de integridade dos pacotes. Este módulo não foi auditado e não deve ser usado como um dispositivo de segurança (provavelmente ele torna as coisa ainda piores porque eventualmente tenha alguns bugs). Não possui opções.
Estado

O critério de seleção mais útil é fornecido pela extensão 'state'. Ele interpreta a análise do rastreamento de conexão (connection-tracking) do módulo 'ip_conntrack'. Esta extensão é altamente recomendada.

O '-m state' permite uma opção adicional '--state', que é uma lista de estados separados por vírgulas. A flag '!' indica quais estados não devem ser levados em consideração. Os estados são:

  • NEW: um pacote que cria uma nova conexão.
  • ESTABLISHED: um pacote que pertence a uma conexão existente (isto é, um pacote de resposta ou um pacote que esteja saindo por uma conexão que já recebeu respostas).
  • RELATED: um pacote relacionado a uma conexão existente, mas que não faça parte dela, como é o caso de um erro ICMP. Também pode ser um pacote estabelecendo uma conexão de dados ftp (se o módulo FTP estiver inserido).
  • INVALID: um pacote que, por alguma razão, não pode ser identificado. Isto inclui falta de memória e erros ICMP sem uma conexão correspondente. Geralmente estes pacotes devem ser eliminados.

Um exemplo do poder desta extensão seria:

    # iptables -A FORWARD -i ppp0 -m state ! --state NEW -j DROP

Informações adicionais