Atualmente, tenho minha cadeia OUTPUT definida como DROP. Gostaria de alterá-lo para REJECT, para ter uma pista de que é o meu firewall que me impede de chegar a algum lugar em vez de um problema com qualquer serviço que estou tentando acessar (rejeição imediata em vez de atingir o tempo limite). No entanto, o iptables parece não se importar com isso. Se eu editar manualmente meu arquivo de regras salvo e tentar restaurá-lo, recebo iptables-restore v1.4.15: Can't set policy 'REJECT' on 'OUTPUT' line 22: Bad policy name
e ele se recusa a carregar as regras. Se eu tentar definir isso manualmente ( iptables -P OUTPUT REJECT
), recebo, iptables: Bad policy name. Run 'dmesg' for more information.
mas não há saída no dmesg.
Confirmei que a regra apropriada foi compilada no kernel e reiniciei para garantir que ele seja carregado:
# CONFIG_IP_NF_MATCH_TTL is not set
CONFIG_IP_NF_FILTER=y
***
CONFIG_IP_NF_TARGET_REJECT=y
***
CONFIG_IP_NF_TARGET_LOG=y
CONFIG_IP_NF_TARGET_ULOG=y
(Asteriscos adicionados para destacar a regra aplicável)
Tudo o que consigo encontrar afirma que REJECT é uma política / destino válido (em geral), mas não consigo encontrar nada que diga que não é válido para as cadeias INPUT, FORWARD ou OUTPUT. Meu Google-fu não está ajudando. Estou no Gentoo, se isso faz alguma diferença. Alguém aqui tem alguma ideia?
fonte
iptables
regras em questão?Respostas:
REJECT
é uma extensão de destino , enquanto uma política de cadeia deve ser um destino . A página de manual diz isso (embora não esteja muito claro), mas parte do que diz está totalmente errada.A política pode ser apenas
ACCEPT
ouDROP
em cadeias internas. Se você deseja rejeitar todos os pacotes que não correspondem às regras anteriores, verifique se a última regra corresponde a tudo e adicione uma regra com umaREJECT
extensão de destino. Em outras palavras, depois de adicionar todas as regras relevantes, façaiptables -t filter -A OUTPUT -j REJECT
.Consulte o tópico "quais são as possíveis políticas de cadeia" na lista netfilter para obter mais detalhes.
fonte
Não consegui encontrá-lo documentado, mas uma referência aqui indica que as únicas políticas permitidas são ACCEPT ou DROP. Isto é confirmado por olhar para a fonte de
libiptc
(que é responsável por manipular as regras) em torno da linha 2429, onde o código temO tópico original sugere que a melhor coisa a fazer é adicionar REJECT no final da cadeia, o que deveria ser
iptables -A OUTPUT -j REJECT
.Observe que o código imediatamente antes disso é:
Portanto, você não pode definir a política em uma cadeia definida pelo usuário.
fonte
-p
é para correspondência em um protocolo; ele quis dizer-A
como minha resposta diz.REJECT
onOUTPUT
não faz sentido; aREJECT
retornará um pacote ICMP que precisaria atravessar uma rede.Adicione uma nova
-j LOG
como sua última regra (portanto, antes daDROP
política) para ver o que chega tão longe naOUTPUT
cadeia.fonte
REJECT
pacote ICMP não pôde retornar na interface lo? Concordo que aLOG
é útil para a solução de problemas, mas o que eu realmente esperava era uma maneira de me lembrar que "Ah, sim ... isso provavelmente está sendo bloqueado pelo meuDROP
padrão do iptables" em vez de solucionar problemas por 5 minutos, pede que o colega de trabalho o servidor XYZ de acesso percebe que provavelmente é local , que é a minha abordagem mais comum, pois meu dia de trabalho típico raramente atinge coisas pelas quais ainda não abri um buraco. Claro que talvez eu precise manter isso em mente melhor, mas um apartamentoREJECT
é mais óbvio.ethX
interface gere tráfego nalo
interface por vários motivos. Eles são muito independentes; você pode facilmente aplicar correntes a uma e não à outra.