Sim, a estrutura do Netfilter do kernel do Linux é flexível o suficiente para tornar isso possível.
Não sei quais são suas expectativas, dizendo "solução personalizada" e "se isso puder ser feito mais facilmente agora" . Eu suponho que você está preparado para escrever código para fazer processamento de pacotes de baixo nível.
A ideia geral é a seguinte:
- Crie as regras
iptables
que passarão o tráfego da tabela desejada (filter
,nat
,mangle
) para o espaço do usuário, por meio daQUEUE
target. - Você poderá acessar os pacotes que enviou para a fila usando a biblioteca libnetfilter_queue ou nfqueue-bindings (se você estiver trabalhando com Perl ou Python).
- Processe os pacotes da maneira que achar melhor e envie-os de volta.
Tenha em mente que você estará trabalhando com pacotes IP brutos, segmentos TCP ou datagramas UDP (dependendo do tipo de tráfego que deseja processar) e será de sua responsabilidade montar o tráfego corretamente, manter a correção da soma de verificação no nível do pacote e tudo o mais que a pilha TCP / IP do seu sistema operacional cuida magicamente dos bastidores.
Se você planeja trabalhar em Python, sugiro que use dpkt ou scapy para trabalhar com pacotes ou segmentos TCP. Isso tornará as coisas muito mais fáceis.