Prefácio
Assim como tudo no Linux, tenho certeza de que existem várias maneiras de obter um resultado pretendido com iptables
. Gostaria de limitar as respostas às seguintes categorias:
- Qual a diferença entre as opções?
- Qual opção é melhor (ou são a mesma coisa)?
- Por que você prefere um ao outro?
E, por favor, seja claro para qual categoria você está falando. Não há problema em declarar preferências , mas não insinue que é o melhor .
por exemplo
Prefiro colocar
--jump
como o primeiro argumento porque acho que é melhor ler a intenção primeiro e gosto de alinhar verticalmente como argumentos de vários comandos.
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
Em ambos os casos, os dois comandos iptables que você está comparando têm semântica diferente e se comportam de maneira diferente entre si. Não é necessariamente uma questão de qual é o "melhor", mas de qual comportamento você está tentando igualar ou fornecer.
Primeiro:
A primeira delas aceita todo o tráfego local, na
lo
interface, independentemente de 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 usa necessariamente 127.0.0.1 como seu endereço IP, mas você provavelmente deseja aceitá-lo (o mais conhecido deles é o estranho 127.0.1.1 do Debian, mas é possível que endereços IP globais sejam anexados para
lo
) e, no segundo caso, alguém poderia enviar a você pacotes falsificados com 127.0.0.1 como endereço de origem e você provavelmente não quer aceitar isso.Segundo:
Estes são geralmente funcionalmente idênticos, exceto:
Quando alguém adicionar mais regras ao final da cadeia INPUT, as regras não terão nenhum efeito. 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 aceita argumentos. Se você deseja especificar o motivo da rejeição ou fornecer diferentes motivos de rejeição em diferentes circunstâncias, deve usar o primeiro formulário (consulte a
iptables-extensions
página do manual para obter a lista de motivos de rejeição).Em relação à preferência, configurei o iptables de forma que seja fácil de gerenciar e difícil de gerenciar incorretamente .
Para formatação não significativa, prefiro anotar minhas regras em uma ordem que possa verificar mais facilmente o status do firewall, independentemente da simplicidade da ferramenta usada. Examinar as mudanças deve ser tão trivial quanto
diff -wu <(iptables-save | egrep -v ^#) <(egrep -v ^# rules.v4)
Quando duas abordagens semelhantes em configurações comuns resultam no mesmo comportamento, escolho aquela que expressará o que realmente quis dizer mesmo em configurações incomuns . Portanto, prefiro porque
-A INPUT -i lo -J ACCEPT
o-A INPUT -s localhost -J ACCEPT
último vem com uma suposição (que em uma configuração sã, nenhuma outra interface poderia receber tal pacote)Quando 2 restrições significam a mesma coisa, escolho ambas ou aquela que não pode ser levantada involuntariamente . Embora a regra
-A INPUT -j REJECT
possa ser-R
substituída, tal erro não afetaria a política da cadeia como-P INPUT REJECT