iptables -i lo vs. -s localhost e -j REJECT vs. -P INPUT REJECT

3

Prefácio

Assim como tudo no Linux, tenho certeza de que há muitas maneiras de obter um resultado pretendido com iptables . Gostaria de limitar as respostas às seguintes categorias:

  1. Qual é a diferença entre as opções?
  2. Qual opção é a melhor (ou são as mesmas)?
  3. Por que você prefere um ao outro?

E por favor, fique claro com qual categoria você está falando. Não há problema em declarar preferências , mas não implique que seja melhor .

por exemplo,

I prefer to put --jump as the first argument because I think it reads better to have the intent first and I like to vertically align like arguments of multiple commands.

Pergunta

Um desses é melhor que o outro?

iptables -I INPUT --jump ACCEPT --in-interface lo
iptables -I INPUT --jump ACCEPT --source localhost

Um desses é melhor que o outro?

iptables -A INPUT --jump REJECT
iptables -P INPUT REJECT
    
por Bruno Bronosky 10.01.2017 / 06:25

2 respostas

7

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).

    
por 10.01.2017 / 06:41
1

Em relação à preferência, eu configuro o iptables de modo que seja fácil de gerenciar & difícil de administrar mal .

  1. Para formatações não significativas, prefiro anotar minhas regras nessa ordem, para que eu possa verificar o status do firewall com facilidade independentemente da simplicidade da ferramenta usada. Examinar as alterações deve ser tão trivial quanto diff -wu <(iptables-save | egrep -v ^#) <(egrep -v ^# rules.v4)

  2. Quando duas abordagens semelhantes em configurações comuns resultam no mesmo comportamento, eu escolho aquele que expressará o que eu realmente quis dizer mesmo sob incomum configurações. Por isso eu prefiro -A INPUT -i lo -J ACCEPT over -A INPUT -s localhost -J ACCEPT porque o último vem com uma suposição (que em uma configuração sã, nenhuma outra interface poderia receber tal pacote)

  3. Quando 2 restrições significam a mesma coisa, eu escolho ambas ou a que não pode ser levantada involuntariamente . Embora a regra -A INPUT -j REJECT possa ser -R eplaced, esse erro não afetaria a política da cadeia, como -P INPUT REJECT

por 10.01.2017 / 10:34