Qual é a tabela mangle no iptables?

28

Estou usando as regras do iptable para filtrar e manipular pacotes no meu servidor Ubuntu. mas eu não consigo entender a tabela do mangle.

Citando este tutorial do iptables :

Essa tabela, como já observamos, deve ser usada principalmente para pacotes confusos. Em outras palavras, você pode usar livremente as correspondências mangle, etc., que podem ser usadas para alterar os campos TOS (Tipo de serviço) e assim por diante.

É altamente recomendável não usar esta tabela para qualquer filtragem; nem DNAT, SNAT ou Masquerading funcionarão nesta tabela.

Alguém pode me descrever a tabela mangle e fornecer alguns exemplos para entender quando devo usá-la?

pylover
fonte
6
A iptables(8)página de manual possui todas as informações que você deseja, incluindo vários bons exemplos de uso de tabelas mangle.
Michael Hampton

Respostas:

23

Além das outras boas respostas, recentemente tive que usar a tabela mangle para ajustar as discrepâncias de MTU (unidade máxima de transmissão) causadas pelo tráfego trazido através de PPPoE, PPP e ATM, cada um dos quais adiciona uma sobrecarga que reduz a carga útil disponível para IP a partir dos habituais 1500 bytes de um quadro Ethernet.

Os sistemas em cada extremidade do canal, como é normal, teriam seu MTU no padrão regular de 1500 e, portanto, tentariam enviar quadros IP tão grandes. Como o tamanho real da carga útil disponível era menor, isso causaria fragmentação de pacotes, exceto que geralmente o remetente solicita que os pacotes não sejam fragmentados e, como tal, eles acabam sendo descartados por completo.

Em um mundo ideal, a descoberta de MTU de caminho permitiria que os terminais ajustassem sua MTU para baixo, conforme necessário, mas essa descoberta depende do ICMP, e as redes fora do meu controle eram frequentemente configuradas para descartar o ICMP por razões de segurança.

A única opção era usar a manipulação de pacotes no meu roteador para modificar pacotes TCP SYN para diminuir o tamanho máximo do segmento na camada de transporte:

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1452

Esse tipo de coisa é confusa e, idealmente, deve ser evitada, mas eu não tinha outras opções e isso resolveu o problema.

Espero que esses exemplos ajudem, assim como a página de manual.

Kevin
fonte
23

Encontrei recentemente uma boa explicação aqui . É basicamente usado para definir cabeçalhos específicos para pacotes IP para afetar a decisão de roteamento tomada mais adiante. Se houver, a opção TTL é provavelmente a mais interessante:

O destino TTL é usado para alterar o campo TTL (Time To Live) do pacote. Poderíamos dizer aos pacotes apenas para ter um TTL específico e assim por diante. Uma boa razão para isso pode ser que não queremos nos entregar a intrometidos Provedores de Internet. Alguns provedores de serviços da Internet não gostam de usuários executando vários computadores em uma única conexão e existem alguns provedores de serviços da Internet conhecidos por procurar um único host que gera valores TTL diferentes, e consideram isso um dos muitos sinais de vários computadores conectados a um único conexão.

Os outros alvos são TOS, MARK, SECMARK, CONNSECMARK.

BubuIIC
fonte
4
O Mangle também é usado no QOS para manipular a marcação de pacotes ou na distribuição de carga de dados para distribuir pacotes em diferentes rotas.
TomTom
8

Como um iptables noob, eu diria: A tabela mangle permite modificar algumas entradas especiais no cabeçalho dos pacotes. (como: Tipo de serviço, tempo de vida) (também permite definir marcas especiais e marcas de contexto de segurança)

iptablesnoob
fonte
2

Há um bom mergulho profundo, mas não é muito difícil entender o tutorial sobre o iptables aqui .

A tabela mangle é usada para alterar os cabeçalhos IP do pacote de várias maneiras. Por exemplo, você pode ajustar o valor TTL (Time to Live) de um pacote, aumentando ou diminuindo o número de saltos de rede válidos que o pacote pode suportar. Outros cabeçalhos IP podem ser alterados de maneiras semelhantes.

Essa tabela também pode colocar uma "marca" interna do kernel no pacote para processamento adicional em outras tabelas e por outras ferramentas de rede. Essa marca não toca no pacote real, mas adiciona a marca à representação do pacote do kernel.

Me ajudou muito, pois também explica claramente como todas as partes se encaixam e se interagem.

rbennell
fonte