A frase "Provavelmente vou acabar usando inspeção stateful ..." é um pouco confusa. O Netfilter é um filtro de pacotes com estado. Você poderia escrever um conjunto de regras que funcionasse em torno de seu "estado", mas isso seria contraproducente. Escrever regras baseadas no estabelecimento de conexões também é muito mais prazeroso, eu descobri, do que tentar escrever as regras necessárias e "espelhar" as regras para gerenciar o tráfego sem estado.
Você deseja que um pacote atravesse o menor número possível de cadeias e o menor número de regras possível. Iniciar suas cadeias de tabela de "filtros" com -m state --state RELATED,ESTABLISHED -j ACCEPT
permitirá que o mecanismo de inspeção com informações de estado insira pacotes para conexões já estabelecidas através do conjunto de regras sem percorrer toda a cadeia.
O que você está propondo com as cadeias relacionadas à interface funcionará muito bem e é uma prática bastante comum. Se você tem um conjunto comum de regras que precisam ser aplicadas a todas as interfaces, eu as colocaria primeiro na cadeia comum, depois ramificaria para outras cadeias específicas da interface ou do tipo de tráfego a partir dali.