Defina a marca no pacote que você redirecionar. Então permita os pacotes marcados antes dos pacotes bloqueados. veja iptables -j MARK -h
para marcar um pacote e iptables -m mark -h
para corresponder a um pacote
Eu gosto de encaminhar todo o tráfego que chega a 80 para ser redirecionado para 8000.
eu usei
iptables -tnat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8000
Mas a porta 8000 ainda está aberta ao público.
Eu tentei -DNAT:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8000
Mas isso não funciona de jeito nenhum. / proc / sys / net / ipv4 / ip_forward está definido como 1.
Não há outras regras configuradas.
Por favor me ajude:)
-
editar :
Em resposta à pergunta abaixo: Aqui está exatamente o que eu quero alcançar:
Eu tenho um serviço rodando na porta 8000 que pode ser visto como um servidor web. Deve ser acessível pela porta 80 de fora, mas não pela porta 8000. A rede interna não importa: pode ser restrita ou não.
Eu entendo que o REDIRECT não elimina pacotes endereçados diretamente à porta 8000, mas se eu descartasse todos os pacotes para 8000 na cadeia INPUT, então os pacotes redirecionados também seriam descartados.
iptables -A INPUT -p tcp -m tcp --dport 8000 -j DROP
Não pode trabalhar para mim.
Existe uma maneira de descartar pacotes com a porta de destino 8000, que não foram redirecionados através da cadeia PREROUTING?
Adicionar um ip de origem via -s não ajuda, certo? porque o IP de origem não muda no redirecionamento.
Resposta
Com base na resposta aceita, posso resolvê-lo desta maneira:
iptables -tmangle -A PREROUTING -p tcp -m tcp --dport 8000 -j MARK --set-mark 1
iptables -A INPUT -m mark --mark 1 -j DROP