Il problema non è di netfilter, è il modo in cui il tuo kernel gestisce gli interrupt.
Per impostazione predefinita, le vecchie versioni di APIC inviano tutti gli interrupt alla CPU0.
Puoi controllare se questo è il tuo problema con:
cat /proc/interrupts
Puoi vedere se gli interrupt della NIC (e ricorda che gli hook di netfilter vengono eseguiti su un RX o TX SoftIRQ) sono gestiti da un singolo Core.
Nelle versioni più recenti del kernel, c'è un'opzione di compilazione (CONFIG_HOTPLUG_CPU), che bilancia gli IRQ sui core esistenti.
Oppure, se non puoi aggiornare la versione o ricompilare il kernel, puoi aggiornare l'affinità SMP (con una maschera che gestisce più di un CPUid) per cercare di bilanciare tra diversi core. Oppure vai in ACPI e configurazione corretta (qui non posso aiutarti di più).
Qui puoi trovare tutto su questa roba (affinità SMP e corretta gestione dell'IRQ)
Un problema potrebbe essere che la tua scheda NIC ha un solo interrupt. Alcuni NICS più recenti hanno diversi interrupt (i cosiddetti NIC multiqueue) che consentono di distribuire il carico tra più thread.
Per i NIC a coda singola sono disponibili alcune funzionalità software nei kernel più recenti che è possibile configurare per distribuire il carico. Vedi ad es. http://www.spinics.net/lists/linux-doc/msg02975.html per una panoramica di ciò che è disponibile.