Eu revisaria a documentação do netfilter antes de fazer qualquer coisa. Entender como os pacotes fluem pelas várias tabelas e cadeias (onde as decisões de roteamento são tomadas, etc.) é uma boa primeira coisa a ser entendida. Então você terá uma ideia do que o produto é capaz de fazer.
No que se refere a algo prático: você deve iniciar suas cadeias INPUT, FORWARD e OUTPUT com o seguinte para permitir conexões estabelecidas com um "atalho" que avalie todas as regras nas cadeias e descartar pacotes claramente inválidos antes que qualquer outra avaliação seja feita :
-m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-m conntrack --ctstate INVALID -j DROP
Isso ajudará no desempenho, embora você não esteja movendo bastante tráfego para fazer uma diferença real.
Você deve pensar seriamente em definir a política padrão nas cadeias de tabela de "filtros" como DROP e criar suas regras para permitir o tráfego explicitamente, em vez de tentar bloquear o tráfego.