Como abrir uma porta do servidor fora de um túnel OpenVPN com um firewall pf no OSX (BSD)

2

Eu tenho um Mac mini que eu uso como servidor de mídia executando o XBMC e que serve mídia do meu NAS para meu aparelho de som e TV (que foi calibrado em cores com um Spyder3Express, feliz). O Mac executa o OSX 10.8.2 e a conexão à Internet é encapsulada para privacidade geral através do OpenVPN através do Tunnelblick. Acredito que meu provedor de VPN anônimo envia "redirect_gateway" para o OpenVPN / Tunnelblick porque, quando ativado, efetua o tunelamento eficaz de todo o tráfego que não é da LAN, de entrada e saída. Como efeito colateral indesejado, que também abre as portas do servidor de caixas desprotegidas para o mundo exterior e ignora meu roteador de firewall (Netgear SRX5308). Eu executei o nmap de fora da LAN no IP da VPN e as portas do servidor no mini são claramente visíveis e conectáveis.

O mini tem as seguintes portas abertas: ssh / 22, ARD / 5900 e 8080 + 9090 para o cliente XBMC iOS Constellation.

Eu também tenho um Synology NAS que, além do arquivo LAN que serve por AFP e WebDAV, serve apenas um servidor OpenVPN / 1194 e um servidor PPTP / 1732 para WAN. Quando estiver fora da LAN, conecto isso no meu laptop pelo OpenVPN e pelo PPTP do meu iPhone. Eu só quero conectar através do AFP / 548 do mini ao NAS.

O firewall de borda (SRX5308) funciona de maneira excelente, estável e com uma taxa de transferência muito alta ao transmitir a partir de vários serviços VOD. Minha conexão é 100/10 com uma taxa de transferência máxima teórica próxima. O conjunto de regras é o seguinte

Inbound:
PPTP/1723        Allow always to 10.0.0.40 (NAS/VPN server)
                 from a restricted IP range matching the cell phone provider range
OpenVPN/1194     Allow always to 10.0.0.40 (NAS/VPN server) from any

Outbound: Default outbound policy: Allow Always
OpenVPN/1194     TCP Allow always from 10.0.0.30 (mini) to a.b.8.1-a.b.8.254 (VPN provider)
OpenVPN/1194     UDP Allow always to 10.0.0.30 (mini) to a.b.8.1-a.b.8.254 (VPN provider)
Block always from 10.0.0.30 (mini) to any

No Mini, desativei o OSX Application Level Firewall porque ele lança pop-ups que não se lembram das minhas escolhas de uma vez para outra e isso é irritante em um servidor de mídia. Em vez disso, eu executo o Little Snitch, que controla bem as conexões de saída no nível do aplicativo. Eu configurei o excelente firewall embutido OSX PF (da BSD) da seguinte maneira

pf.conf (vínculos de firewall do aplicativo Apple removidos)

### macro names for external interface.
eth_if = "en0"
vpn_if = "tap0"
### wifi_if = "en1"
### %usb_if = "en3"

ext_if = $eth_if

LAN="{10.0.0.0/24}"

### General housekeeping rules ###
### Drop all blocked packets silently
set block-policy drop

### all incoming traffic on external interface is normalized and fragmented
### packets are reassembled.
scrub in on $ext_if all fragment reassemble
scrub in on $vpn_if all fragment reassemble

scrub out all

### exercise antispoofing on the external interface, but add the local
### loopback interface as an exception, to prevent services utilizing the
### local loop from being blocked accidentally.
### set skip on lo0
antispoof for $ext_if inet
antispoof for $vpn_if inet

### spoofing protection for all interfaces
block in quick from urpf-failed

#############################

block all

### Access to the mini server over ssh/22 and remote desktop/5900 from LAN/en0 only
pass in on $eth_if proto tcp from $LAN to any port {22, 5900, 8080, 9090} 

### Allow all udp and icmp also, necessary for Constellation. Could be tightened.
pass on $eth_if proto {udp, icmp} from $LAN to any

### Allow AFP to 10.0.0.40 (NAS)
pass out on $eth_if proto tcp from any to 10.0.0.40 port 548

### Allow OpenVPN tunnel setup over unprotected link (en0) only to VPN provider IPs
### and port ranges
pass on $eth_if proto tcp from any to a.b.8.0/24 port 1194:1201 

### OpenVPN Tunnel rules. All traffic allowed out, only in to ports 4100-4110 (rtorrent)
### Outgoing pings ok
pass in on $vpn_if proto {tcp, udp} from any to any port 4100:4110
pass out on $vpn_if proto {tcp, udp, icmp} from any to any 

Então, quais são meus objetivos e o que a configuração acima alcança? (até que você me diga o contrário :)

1) Acesso LAN completo às portas acima no servidor de mini / mídia (incluindo através do meu próprio servidor VPN) 2) Todo o tráfego da Internet do servidor de mini / mídia é anonimizado e encapsulado na VPN

3) Se o OpenVPN / Tunnelblick no mini interromper a conexão, nada vazará por causa do pf e do conjunto de regras de saída do roteador. Ele nem pode fazer uma pesquisa de DNS através do roteador.

Então, o que eu tenho que esconder com tudo isso? Nada muito sério, apenas me empolguei tentando parar as varreduras de portas através do túnel da VPN :)

De qualquer forma, essa configuração funciona perfeitamente e é muito estável.

O problema finalmente!

Gostaria de executar um servidor minecraft e o instalei em uma conta de usuário separada no mini servidor (user = mc) para manter as coisas particionadas. Não quero esse servidor acessível através do túnel VPN anônimo, porque há muito mais varreduras de portas e tentativas de hackers do que no meu IP comum e, portanto, não confio no java em geral. Então eu adicionei a seguinte regra de PF no mini:

### Allow Minecraft public through user mc
pass in on $eth_if proto {tcp,udp} from any to any port 24983 user mc
pass out on $eth_if proto {tcp, udp} from any to any user mc

And these additions on the border firewall:
Inbound: Allow always TCP/UDP from any to 10.0.0.30 (mini with mc server)
Outbound: Allow always TCP port 80 from 10.0.0.30 to any (needed for online account checkups)

Isso funciona bem, mas apenas quando o túnel OpenVPN / Tunnelblick está inoperante. Quando nenhuma conexão é possível com o servidor minecraft fora da LAN, o acesso dentro da LAN é sempre bom. Tudo o resto funciona como pretendido. Acredito que o push redirect_gateway possa estar próximo da raiz do problema, mas quero manter esse provedor de VPN específico por causa da fantástica taxa de transferência, preço e serviço.

A solução?

Como posso abrir a porta do servidor minecraft fora do túnel, para que ela só esteja disponível em en0 e não no túnel da VPN?

Devo usar uma rota estática? Mas não sei quais IPs da WAN estarão se conectando ... tropeça

Quão seguro você estimaria essa configuração e você tem outras melhorias para compartilhar?

Timbó
fonte

Respostas:

-1

Este artigo - parece responder à sua pergunta principal. Explica como você pode ignorar o Redirect_Gateway Pushseu ISP.

Ignorando o redirecionamento de gateway

Se você estiver executando o OpenVPN como cliente, e o servidor usado estiver usando " redirect-gateway" push , seu cliente redirecionará todo o tráfego da Internet pela VPN. Às vezes, os clientes não querem isso, mas não podem alterar a configuração do servidor. Esta página explica como substituir o gateway de redirecionamento para que o cliente não precise redirecionar a Internet, mesmo que o servidor solicite.

Método 1: ignorar

Existem 2 opções que podem ser usadas para ignorar as rotas enviadas pelo servidor:

--route-noexec

Não adicione ou remova rotas automaticamente. Em vez disso, passe as rotas para o script --route-up usando variáveis ​​ambientais.

 --route-nopull

Quando usado com --client ou --pull, aceite as opções enviadas pelo servidor EXCEPT para rotas e opções dhcp como servidores DNS. Quando usada no cliente, essa opção efetivamente impede o servidor de adicionar rotas à tabela de roteamento do cliente, no entanto, observe que essa opção ainda permite que o servidor defina as propriedades TCP / IP da interface TUN / TAP do cliente.

Método 2: substituir

Aqui vamos simplesmente adicionar rotas que substituem --redirect-gateway. Isso funcionará como a def1bandeira para --redirect-gatewayfuncionar. Isso pode ser diferente se o servidor usar o def1sinalizador para a --redirect-gatewayopção ou não (verificando o log durante a conexão). Observe que net_gatewayé uma variável interna para openvpn e não precisa ser alterada para nada. Se você não sabe se o seu servidor usa def1e não deseja verificar os logs para descobrir, basta supor que eles usam def1e usam as 4 rotas. Isso vai funcionar, não importa o quê.

def1- Use esse sinalizador para substituir o gateway padrão usando 0.0.0.0/1e em 128.0.0.0/1vez de 0.0.0.0/0. Isso tem o benefício de substituir, mas não de eliminar o gateway padrão original. Se o servidor NÃO usar, def1adicione as seguintes opções à configuração do cliente:

route 0.0.0.0 128.0.0.0 net_gateway
route 128.0.0.0 128.0.0.0 net_gateway

Se o servidor usar def1ou se você não souber, adicione as seguintes opções à configuração do cliente:

route 0.0.0.0 192.0.0.0 net_gateway
route 64.0.0.0 192.0.0.0 net_gateway
route 128.0.0.0 192.0.0.0 net_gateway
route 192.0.0.0 192.0.0.0 net_gateway
pawneebill
fonte
Por favor, cite e cite as informações do seu link relevante. Sua resposta por si só não responde à pergunta do autor. As informações no link que você enviou são úteis para a utilidade de sua resposta.
Ramhound 28/02