Em ambos os casos, os dois comandos iptables que você está comparando têm semânticas diferentes e se comportam de maneira diferente entre si. Não é necessariamente uma questão de qual é "melhor", mas de qual comportamento você está tentando combinar ou fornecer.
Primeiro:
iptables -I INPUT --jump ACCEPT --in-interface lo
iptables -I INPUT --jump ACCEPT --source localhost
O primeiro deles aceita todo o tráfego local, na interface lo
, independentemente do seu endereço IP. O segundo aceita todo o tráfego de 127.0.0.1, independentemente de qual interface ele chega.
Neste caso, o primeiro é claramente melhor. No primeiro caso, o tráfego local não necessariamente usa 127.0.0.1 como seu endereço IP, mas você provavelmente quer aceitá-lo, (o mais conhecido é o 127.0.1.1 estranho do Debian, mas é possível que endereços IP globais sejam anexados para lo
) e no segundo caso, alguém poderia enviar pacotes falsificados com 127.0.0.1 como seu endereço de origem e você provavelmente não quer aceitar isso.
Segundo:
iptables -A INPUT --jump REJECT
iptables -P INPUT REJECT
Geralmente são funcionalmente idênticos, exceto:
Quando alguém adiciona mais regras ao final da cadeia INPUT, as regras não terão efeito algum. Os arquivos aqui têm numerosos exemplos de pessoas confusas com isso. Então você pode querer usar o segundo formulário.
A política da cadeia não pode aceitar argumentos, mas o alvo REJECT faz aceitar argumentos. Se você quiser especificar o motivo da rejeição ou quiser fornecer razões de rejeição diferentes em circunstâncias diferentes, deverá usar o primeiro formulário (consulte a página iptables-extensions
man da lista de motivos de rejeição).