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?