Bloqueando o Ultrasurf
Dica publicada em Linux / Segurança
Bloqueando o Ultrasurf
Olá a todos! Esta é a minha primeira contribuição para o VOL, comunidade que me ajudou muito com Linux e ainda ajuda.
Bom, como diz no título do post, vamos bloquear o ultrasurf (ou pelo menos tentar :P). Para quem não o conhece, este programa foi desenvolvido para "furar" a censura na internet imposta pelo governo na China. O que foi feito com uma iniciativa bastante nobre acabou se tornando um problema para os administradores de rede nas empresas.
Este programa se conecta a servidores Proxy usando conexão segura SSL na porta 443 e torna a própria máquina do usuário em um Proxy Server. O problema é que os servidores do ultrasurf usam IPs dinâmicos, o que torna inviável bloquear a porta 443 para seus endereços. Já vi sugestões de bloquear a porta 443 para todos os endereços e ir liberando de acordo com a necessidade, dependendo do tamanho da organização esta prática pode não se adequar muito.
Bem, vamos ao que interessa então.
Instale o tcpdump - para quem não conhece segue um link bacana:
O ultrasurf em suas últimas versões (atualmente está na 9.9.2) se conecta à rede 65.49.2.0/24, se ele não conseguir se conectar a algum IP desta rede ele parte para os IPs dinâmicos, logo nem adianta bloquear esta rede. Então o conceito é simples, toda vez que o tcpdump encontrar alguma conexão da rede interna para a rede 65.49.2.0/24 representa que o ultrasurf está rodando (essa rede é primeira opção do ultrasurf, então não a bloqueiem).
Com isto vamos salvar os IPs das máquinas que estão rodando o ultrasurf em um arquivo chamado hosts.log e então bloquear estes endereços para qualquer conexão externa, deixando o usuário completamente sem internet. Assim o usuário vai ter que contatar o pessoal da TI, com isso os administradores vão poder tomar as medidas necessárias de acordo com a política da empresa. E os usuários vão pensar duas vezes antes de usar o ultrasurf, mesmo porque se usarem, vão ficar sem internet até alguém da TI liberar a máquina.
Vamos criar dois scripts: monitor.sh (responsável por monitorar a rede) e stop.sh (responsável por bloquear as máquinas que estão usando o programa).
Conteúdo do monitor.sh:
Conteúdo do stop.sh:
Um detalhe importante é que estou salvando o meu arquivo hosts.log dentro de /etc/scripts/ultrasurf caso mudem o caminho lembrem de alterar no script.
Para fins de organização eu preferi criar uma chain no iptables só para os usuários do ultrasurf.
Criando a chain fdenyall:
A primeira regra cria a chain e a segunda cria um pulo da chain FORWARD para a nova chain. Lembrem de colocar estes comandos que criam a chain dentro do /etc/rc.local (ou local equivalente) para que ao reiniciar o servidor a chain possa ser criada automaticamente.
Agora vamos criar três agendamentos no cron (para quem não é familiarizado com o cron: Cron e Crontab para agendar tarefas).
Pronto, está feito.
Agora façam um teste, executem o ultrasurf de alguma estação, normalmente em 1 minuto ela será totalmente bloqueada. Para desbloquear basta fechar o ultrasurf na estação, esperar uns 5 minutos (este tempo é necessário para que o IP do usuário saia do arquivo hosts.log) e remover o IP do utilizador da chain que criamos, para isto faça:
# iptables -t filter -D fdenyall -s "ip do utilizador" -j DROP
ou se preferir limpe a chain toda usando:
# iptables -t filter -F fdenyall
Bom pessoal é isso, qualquer dúvida fiquem a vontade para perguntar, espero sempre poder estar trazendo coisas novas para vocês.
Bom, como diz no título do post, vamos bloquear o ultrasurf (ou pelo menos tentar :P). Para quem não o conhece, este programa foi desenvolvido para "furar" a censura na internet imposta pelo governo na China. O que foi feito com uma iniciativa bastante nobre acabou se tornando um problema para os administradores de rede nas empresas.
Este programa se conecta a servidores Proxy usando conexão segura SSL na porta 443 e torna a própria máquina do usuário em um Proxy Server. O problema é que os servidores do ultrasurf usam IPs dinâmicos, o que torna inviável bloquear a porta 443 para seus endereços. Já vi sugestões de bloquear a porta 443 para todos os endereços e ir liberando de acordo com a necessidade, dependendo do tamanho da organização esta prática pode não se adequar muito.
Bem, vamos ao que interessa então.
Instale o tcpdump - para quem não conhece segue um link bacana:
O ultrasurf em suas últimas versões (atualmente está na 9.9.2) se conecta à rede 65.49.2.0/24, se ele não conseguir se conectar a algum IP desta rede ele parte para os IPs dinâmicos, logo nem adianta bloquear esta rede. Então o conceito é simples, toda vez que o tcpdump encontrar alguma conexão da rede interna para a rede 65.49.2.0/24 representa que o ultrasurf está rodando (essa rede é primeira opção do ultrasurf, então não a bloqueiem).
Com isto vamos salvar os IPs das máquinas que estão rodando o ultrasurf em um arquivo chamado hosts.log e então bloquear estes endereços para qualquer conexão externa, deixando o usuário completamente sem internet. Assim o usuário vai ter que contatar o pessoal da TI, com isso os administradores vão poder tomar as medidas necessárias de acordo com a política da empresa. E os usuários vão pensar duas vezes antes de usar o ultrasurf, mesmo porque se usarem, vão ficar sem internet até alguém da TI liberar a máquina.
Vamos criar dois scripts: monitor.sh (responsável por monitorar a rede) e stop.sh (responsável por bloquear as máquinas que estão usando o programa).
Conteúdo do monitor.sh:
#!/bin/sh
# Monitoramento das conexões feitas para a rede do ultrasurf
killall tcpdump
tcpdump -i eth1 -qlNnn dst net 65.49.2.0/24 and dst port 443
# Monitoramento das conexões feitas para a rede do ultrasurf
killall tcpdump
tcpdump -i eth1 -qlNnn dst net 65.49.2.0/24 and dst port 443
Conteúdo do stop.sh:
#!/bin/sh
# Bloqueia os ips que estão no arquivo hosts.log
for ip in $(cat /etc/scripts/ultrasurf/hosts.log); do
iptables -t filter -A fdenyall -s $ip -j DROP
done
# Bloqueia os ips que estão no arquivo hosts.log
for ip in $(cat /etc/scripts/ultrasurf/hosts.log); do
iptables -t filter -A fdenyall -s $ip -j DROP
done
Um detalhe importante é que estou salvando o meu arquivo hosts.log dentro de /etc/scripts/ultrasurf caso mudem o caminho lembrem de alterar no script.
Para fins de organização eu preferi criar uma chain no iptables só para os usuários do ultrasurf.
Criando a chain fdenyall:
iptables -t filter -N fdenyall
iptables -t filter -I FORWARD 1 -j fdenyall
iptables -t filter -I FORWARD 1 -j fdenyall
A primeira regra cria a chain e a segunda cria um pulo da chain FORWARD para a nova chain. Lembrem de colocar estes comandos que criam a chain dentro do /etc/rc.local (ou local equivalente) para que ao reiniciar o servidor a chain possa ser criada automaticamente.
Agora vamos criar três agendamentos no cron (para quem não é familiarizado com o cron: Cron e Crontab para agendar tarefas).
# Executa o script monitor.sh de 5 em 5 minutos salvando a saída em monitor.log
0-59/5 * * * * root /etc/scripts/ultrasurf/monitor.sh | tee /etc/scripts/ultrasurf/monitor.log
# De 1 em 1 minuto extrai os ips que usam o ultrasurf do arquivo monitor.log e salvam em
hosts.log
* * * * * root cat /etc/scripts/ultrasurf/monitor.log | cut -f3 -d" " | cut -f1-4 -d. | sort | uniq | tee /etc/scripts/ultrasurf/hosts.log
# De 1 em 1 minuto executa o stop.sh bloqueando os endereços contidos no hosts.log
* * * * * root /etc/scripts/ultrasurf/stop.sh
0-59/5 * * * * root /etc/scripts/ultrasurf/monitor.sh | tee /etc/scripts/ultrasurf/monitor.log
# De 1 em 1 minuto extrai os ips que usam o ultrasurf do arquivo monitor.log e salvam em
hosts.log
* * * * * root cat /etc/scripts/ultrasurf/monitor.log | cut -f3 -d" " | cut -f1-4 -d. | sort | uniq | tee /etc/scripts/ultrasurf/hosts.log
# De 1 em 1 minuto executa o stop.sh bloqueando os endereços contidos no hosts.log
* * * * * root /etc/scripts/ultrasurf/stop.sh
Pronto, está feito.
Agora façam um teste, executem o ultrasurf de alguma estação, normalmente em 1 minuto ela será totalmente bloqueada. Para desbloquear basta fechar o ultrasurf na estação, esperar uns 5 minutos (este tempo é necessário para que o IP do usuário saia do arquivo hosts.log) e remover o IP do utilizador da chain que criamos, para isto faça:
# iptables -t filter -D fdenyall -s "ip do utilizador" -j DROP
ou se preferir limpe a chain toda usando:
# iptables -t filter -F fdenyall
Bom pessoal é isso, qualquer dúvida fiquem a vontade para perguntar, espero sempre poder estar trazendo coisas novas para vocês.
Porém, após eu fechar o Ultrasurf ela voltou a navegar normal, achei q fosse ficar sem net, mas não...
Vou fazer mais alguns testes.... parabens pela contribuição!
Abraços!