Limitando acesso ao Team Viewer com Squid e IPTables

Neste artigo mostro como configurar o acesso ao Team Viewer, somente para usuários autorizados, dentro de uma LAN corporativa.

[ Hits: 5.876 ]

Por: Fabio C Bastos em 31/10/2018 | Blog: http://khfw.wordpress.com


Introdução



Onde trabalho usamos Team Viewer para suporte remoto a clientes. O problema é que não deveria ser permitido o acesso externo a máquinas da LAN que usam o Team Viewer.

Bem, primeiro, o funcionário não deve passar seu ID, certo? Mas e se ele quiser acessar seu computador do trabalho de qualquer outro lugar? E isso não for permitido pela política da empresa?

Tentei encontrar uma solução para esse caso e pesquisei muito na Internet, aqui no VOL também, e todas as soluções encontradas não funcionaram para mim.

Cheguei a uma que funcionou perfeitamente e vou demonstrar como implementá-la.

Como funciona o Team Viewer

Primeiro, entenda que a conexão com Team Viewer é de três pontas.

As máquinas de conexão sainte e entrante precisam se conectar com os servidores do Team Viewer, pois são estes que mantém a conexão aberta e permitem o tráfego de rede.

Essa comunicação funciona na camada de aplicação (layer 7) do modelo OSI (Open Systems Interconnect), portanto não conseguimos bloqueá-la usando um firewall comum, já que ele atua nas camadas 4 (transporte) e 5 (sessão).

Usando muito do que aprendi lendo informações na Internet decidi tentar bloquear o Team Viewer usando Squid, já que o utilizamos para bloqueio de acessos indevidos.

Pensei nisso, também, por que não consegui usar com eficiência o módulo string do IPTables.

Algo como:

iptables -A OUTPUT -p tcp -m string --algo bm --string "teamviewer" -j DROP

não funcionou. E o FORWARD é aberto por conta de particularidades da rede que não cabe aqui mencionar.

Configurando Squid e IPTables

O Squid é autenticado, então o firewall direciona todas as conexões da LAN nas portas 80 e 443 para a 3128.

Adicionei a essa regra a porta 5938, pois são essas três que o Team Viewer utiliza.

A regra ficou assim:

# iptables -t nat -A PREROUTING -s $LAN -p tcp -m multiport --dports 80,443,5938 -j REDIRECT --to-port 3128

$LAN é uma variável que pode ser definida anteriormente como LAN="192.168.0.0/24" ou LAN="192.168.0.10,192.168.0.20,192.168.0.30" etc. Também é possível simplesmente declarar o IP ou intervalo de IPs desejados no lugar da variável.

Quando o funcionário inicia o Team Viewer, o programa tenta acessar os servidores usando as portas 5938, 443 e 80, nessa ordem.

Se o programa não contiver os dados para autenticação no proxy, não vai funcionar. Ele não se conecta, portanto não há como ser acessado externamente.

Para configurar os usuários que poderiam acessar o Team Viewer, configurei o squid.conf desta maneira:

acl Safe_ports port 80
acl Safe_ports port 443
acl Safe_ports port 5938

acl port_80 port 80
acl port_443 port 443
acl port_5938 port 5938
acl CONNECT method CONNECT

acl tvusers proxy_auth "/xxx/squid/acls/tvusers.acl"
acl tvservers dstdomain "/xxx//squid/acls/tvservers.acl"
acl teamvtime time MTWHF 08:00-18:00

http_access allow tvusers tvservers teamvtime
http_access deny tvusers tvservers !teamvtime

http_access allow http port_80 authenticated_users
http_access allow CONNECT port_443 authenticated_users
http_access allow CONNECT port_5938 tvusers

Claro, há muito mais linhas no arquivo, mas essas são as responsáveis por autenticar os usuários e autorizar o CONNECT nas portas 443 e 5938. A conexão na porta 80 é do tipo http.

O arquivo tvservers.acl contém os domínios usados pelo Team Viewer: .teamviewer.com e .dyngate.com. ATENÇÃO: é importante o ponto no início de cada linha, pois ele significa que qualquer coisa antes do FQDN (Full Qualified Domain Name) será permitido como, por exemplo, ping1.teamviewer.com.

O arquivo tvusers.acl contém os usuários com autorização para usar o Team Viewer e aí vai de cada cenário.

Eu também quis limitar o horário de uso então usei a seguinte linha:

acl teamvtime time MTWHF 08:00-18:00

Esclarecendo: M=Monday (segunda), T=Tuesday (terça), W=Wednesday (quarta), H=Thursday (quinta), F=Friday (sexta). O horário utilizado tem que seguir o do servidor e o que usei está com o TimeZone America/Sao_Paulo, portanto preciso usar o formato 24 horas.

Primeiro, você permite o acesso dos usuários (teamvusers) para os domínios permitidos (tvservers) nos horários permitidos (teamvtime). Em seguida você nega essa mesma condição adicionando o ! antes da ACL que delimita o horário permitido.

Conclusão

Bem, com isso consegui limitar o uso do Team Viewer para determinadas pessoas em determinado horário mas isso também significa que o acesso externo é possível nas máquinas dessas pessoas nesse determinado horário.

Meu monitoramento de acessos com Squid e de rede com NTop poderá me mostrar essas conexões e eu, como administrador da rede, tenho como saber se os IPs são de clientes mas meu objetivo é só permitir que a conexão se inicie na minha LAN nunca externamente.

Imagino que conseguiria isso usando Firewall (conntrack, talvez) mas não posso usar uma POLICY para o FORWARD como DROP então ainda não consegui chegar à regras que funcionem. Se alguém tiver sugestões, agradeço.

Bom, é isso.

Espero que, se alguém, tiver alguma discordância e/ou sugestão, por favor, comente.

Abraço.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Linux sob o ponto de vista de um iniciante

Instalação dual boot com 2 HDs com Windows XP e Ubuntu Linux

Windows x Linux: pontos de vista

Mais uma análise entre Windows e Linux

Leitura recomendada

Instalando natACL no Debian Etch (proxy autenticado)

Servidor proxy (Squid)

Squid 3 como proxy transparente + firewall Iptables

Squid3 com bloqueio HTTPS [que realmente funciona] - Versão 3.5.22

Corrigindo a falha "WARNING! Your cache is running out of filedescriptors" - Squid2.7STABLE9 Slackware 12

  
Comentários
[1] Comentário enviado por WBaluz em 01/11/2018 - 20:10h

Opa meu irmão tudo bom? Muito legal esse seu artigo achei bem interessante mesmo. Geralmente eu trabalho com politicas em DROP e vou liberando o q achar necessário... mas no seu caso, se me permite, faria a seguinte sugestão,
#iptables -A FORWARD -p tcp -i $IFACE_EXT -d $REDE_LOCAL -o $IFACE_INT --dport $PORTA_TEAM -m state --state NEW -j DROP.
Aqui estou utilizando o iptables como um firewall de filtro de estado de sessão, pois ele vai "dropar" todas as conexões que se iniciarem de fora, pois eu espefiquei bem no meu forward. Tipo a conexão vai passar da rede externa para a interna so que as que forem marcada como novas (NEW) ele dropa. Nesse caso vc criariam uma outra regra permitindo as com a sessão Established e Related para não prejudicar o acesso do pessoal interno para outros team.. entende? não sei se fui muito claro, mas acredito q isso possa lhe ajudar... testa ai e me avisa.... vou ficar no aguardo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts