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: 1.528 ]

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

Windows x Linux: pontos de vista

Mais uma análise entre Windows e Linux

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

Linux sob o ponto de vista de um iniciante

Leitura recomendada

Proxy com autenticação em servidores Samba ou Windows NT

Squid autenticado no Active Directory com Winbind

Squid no FreeBSD

Configurar servidor proxy Squid (Ubuntu)

Autenticando Squid utilizando MySQL

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts