AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1162475
Accepted
Димитрий i0x
Димитрий i0x
Asked: 2024-07-13 05:56:41 +0800 CST2024-07-13 05:56:41 +0800 CST 2024-07-13 05:56:41 +0800 CST

Iptables: exclui uma porta específica do encaminhamento para o destino

  • 772

Tenho a seguinte regra do iptables que encaminha todo o tráfego de entrada para um ip na rede local10.8.0.2

sudo iptables -t nat -A PREROUTING -d 172.31.44.186 -j DNAT --to-destination 10.8.0.2

existe uma maneira de excluir o 27encaminhamento da porta? (ou forçá-lo a ser "encaminhado" para 127.0.0.1)

linux
  • 1 1 respostas
  • 26 Views

1 respostas

  • Voted
  1. Best Answer
    Tom Yan
    2024-07-13T07:56:44+08:002024-07-13T07:56:44+08:00

    Não, a menos que você "divida" a regra em duas ou mais regras. Em outras palavras, você precisará adicionar regras para os protocolos onde a porta precisa ser excluída. Supondo que você queira excluir a porta TCP e UDP:

    sudo iptables -t nat -A PREROUTING -d 172.31.44.186 -p tcp ! --dport 27 -j DNAT --to-destination 10.8.0.2
    sudo iptables -t nat -A PREROUTING -d 172.31.44.186 -p udp ! --dport 27 -j DNAT --to-destination 10.8.0.2
    sudo iptables -t nat -A PREROUTING -d 172.31.44.186 -j DNAT --to-destination 10.8.0.2
    

    Observe que existem tráfegos que não são TCP nem UDP, portanto a regra "original" é mantida como "substituta". Também a ordem das regras é importante. Se a regra original for anexada ( -A) primeiro (ou inserida, ou seja, -I, por último), então as regras específicas do protocolo não serão correspondidas porque a regra original "capturaria" todos os tipos de -d 172.31.44.186tráfego.

    FWIW, provavelmente a maneira mais adequada é ter uma cadeia definida pelo usuário:

    sudo iptables -t nat -N NAME_YOU_LIKE
    sudo iptables -t nat -A PREROUTING -d 172.31.44.186 -j NAME_YOU_LIKE
    sudo iptables -t nat -A NAME_YOU_LIKE -p tcp --dport 27 -j RETURN
    sudo iptables -t nat -A NAME_YOU_LIKE -p udp --dport 27 -j RETURN
    sudo iptables -t nat -A NAME_YOU_LIKE -j DNAT --to-destination 10.8.0.2
    

    Nada seria feito para tráfegos que visam a porta TCP ou UDP 27 quando eles atravessam a cadeia ( NAME_YOU_LIKE) por causa de -j RETURN, o que os impediria de atravessar a cadeia ainda mais e "levá-los de volta" para onde eles saltaram (ou seja, -j) de (e continuar travessia lá, a menos que fosse um "goto", ou seja -g, que os levasse a esta cadeia), enquanto os tráfegos de outra forma seriam DNAT para 10.8.0.2.

    (NOTA: se os tráfegos não corresponderem a nenhuma regra de terminação na cadeia definida pelo usuário, eles também voltarão para o ponto de onde saltaram. Em outras palavras, você pode ver isso, pois há incondicional -j RETURNno final que está implícito. Mas isso é "irrelevante" no exemplo, porque a -j DNATregra no final é uma regra de terminação incondicional.)

    Como a cadeia definida pelo usuário não tem nenhum efeito, a menos que os tráfegos sejam feitos para atravessá-la (ou seja, pular ou ir para) com uma regra em uma cadeia base, com (only) -d 172.31.44.186 -j NAME_YOU_LIKE, apenas os tráfegos que foram (originalmente) destinados a 172.31.44.186atravessariam a cadeia cadeia definida pelo usuário. (Para afirmar o óbvio, você NÃO precisa "verificar" os tráfegos com -d 172.31.44.186"novamente" na cadeia definida pelo usuário para a qual eles saltaram.)


    Se a "exclusão" não for uma exceção, caso em que os tráfegos devem ir para o destino original, mas você realmente deseja que os tráfegos sejam eliminados, não será necessário fazer nenhuma alteração no nat/PREROUTING. Em vez disso, você pode/deve adicionar regras DROP (ou regras REJECT; em algumas opiniões/casos que podem ser uma escolha "melhor") em filter/FORWARD(ou filter/INPUT, se o novo destino for este próprio host):

    sudo iptables -t filter -I FORWARD -d 10.8.0.2 -p tcp --dport 27 -j DROP
    sudo iptables -t filter -I FORWARD -d 10.8.0.2 -p udp --dport 27 -j DROP
    

    (Abordagem de cadeia semelhante definida pelo usuário pode ser adotada, se desejado.)


    PS O multiportmódulo oferece --dportsa correspondência de vários números/intervalos de porta em uma única regra, que pode ser usada para evitar múltiplas --dportregras. (No entanto, cada regra ainda pode ser usada para apenas um protocolo.) Consulte iptables-extensions(8)para obter detalhes.

    • 1

relate perguntas

  • Como descobrir detalhes sobre hardware na máquina Linux?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve