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.
iptables(8)
página de manual possui todas as informações que você deseja, incluindo vários bons exemplos de uso de tabelas mangle.