Qual é a maneira moderna de encaminhar portas no El Capitan? (porta direta 80 a 8080)

56

O antigo utilitário ipfwfoi desencorajado nas versões recentes do Mac OS X e agora saiu do El Capitan.

Qual é a maneira moderna de encaminhar portos em El Capitan?

Eu simplesmente quero que a porta 80 encaminhe para a porta 8080.

Basil Bourque
fonte
Aceite uma resposta.
Efren

Respostas:

79

Para encaminhar todo o tráfego da porta 80 para a porta 8080, você pode inserir o seguinte na linha de comando do Terminal.

echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -

Retirado de https://salferrarello.com/mac-pfctl-port-forwarding/

Sal Ferrarello
fonte
11
Funcionou perfeitamente!
Anupam Jain
17
e do artigo mencionado, para removê-lo sudo pfctl -F all -f /etc/pf.confe para exibir suas regras atuais de encaminhamento de porta, #sudo pfctl -s nat
234 Brad Parks
4
ter em mente que esta solução não adicionar regras, mas substitui qualquer outra regra carregado antes, inclusive o pf.confarquivo
erandros
36

A maneira moderna de encaminhar portas em El Capitan está usando pf. No exemplo abaixo, todas as solicitações da porta 80 são encaminhadas para a porta 8080 no mesmo host. Ajuste os redirecionamentos de acordo com suas necessidades.

  1. Crie um arquivo âncora org.user.forwarding em /private/etc/pf.anchors

    sudo touch /private/etc/pf.anchors/org.user.forwarding
    

    com o seguinte conteúdo e uma linha vazia à direita

    rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en1 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    

    ou

    rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    
  2. Modifique o arquivo /private/etc/pf.conf, mas mantenha uma linha vazia à direita

    arquivo original:

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    

    para

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    rdr-anchor "org.user.forwarding"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
    
  3. Analise e teste seu arquivo âncora para garantir que não haja erros:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. Agora modifique /System/Library/LaunchDaemons/com.apple.pfctl.plist de

    <array>
        <string>pfctl</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    para

    <array>
        <string>pfctl</string>
        <string>-e</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    Você precisa desativar a Proteção de integridade do sistema para fazer isso. Após editar o arquivo, reative o SIP. Após a reinicialização, o seu Mac pf será ativado (essa é a opção -e).

    Como alternativa, você pode criar seu próprio daemon de inicialização semelhante à resposta aqui: Usando o Servidor 5.0.15 para compartilhar a Internet SEM compartilhamento de Internet .

Após uma atualização ou atualização do sistema, alguns dos arquivos originais acima podem ter sido substituídos e você deve reaplicar todas as alterações.

Se você deseja encaminhar através de diferentes interfaces, é necessário habilitar isso no /etc/sysctl.conf:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
Klanomath
fonte
7
Por que não existe mais um comando simples para fazer isso? É muito complicado agora.
precisa saber é o seguinte
@klanomath - isso funciona e eu posso encaminhar a porta x para a porta y em 127.0.0.1 etc, mas não consigo encaminhar portas para o meu windows vm executando na área de trabalho paralela, Alguma idéia? aqui está minha pergunta stackoverflow.com/questions/40695684/…
Sudhir N
Não parece trabalho quando o encaminhamento de porta para uma máquina virtual que está sendo executado no ambiente de trabalho paralelos
Sudhir N
@sudhir Você não foi vinculado com sucesso à sua nova pergunta. Por padrão, uma VM do Parallels não é visível para a rede, como medida de segurança. Você pode alterar uma configuração na configuração da VM para tornar a VM visível. E lembre-se, pingé seu amigo no diagnóstico de problemas de rede.
Basil Bourque 28/02
11
@ pergunta do suhir
Efren
3

Para estender a solução da resposta @ sal-ferrarello, criei dois scripts shell super-básicos para ativar ou desativar o redirecionamento sem comprometer as entradas já existentes no pf.

I. Primeiro encontre com quais entradas você já possui:

sudo pfctl -s nat

Minha saída foi como:

No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all

O que nos interessa são entradas reais, então omita as duas primeiras linhas de informação.

II Criar enable.shscript:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -s nat

As duas primeiras linhas a seguir echosão as entradas que já estavam lá. A terceira linha está com o novo redirecionamento - neste caso, 80 a 8080. No final, chamamos sudo pfctl -s natpara ver se as alterações foram aplicadas.

III Criar disable.shscript:

Semelhante ao enable.shque criamos script, mas sem redirecionamento 80-> 8080, mas com entradas anteriores já existentes:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
cadáver
fonte