Como Fazer para Bloquear o UltraSurf, Solução Definitiva [iptables + fail2ban]

Essa semana fazendo a revisão do firewall de um cliente eu consegui bloquear o acesso as redes BitTorrent e ao terrível UltraSurf.

Vou descrever como fiz para bloquear o UltraSurf.

O problema

Em um primeiro momento eu acreditei que seria fácil bloquear o UltraSurf, porém o uso de proxy transparente obriga que a porta 443 (HTTPS) fique liberada, o BitTorrent foi bloqueado sem dificuldades.

Com o uso do tcpdump eu identifique que todo o acesso do UltraSurf sai pela porta 443, logo a solução mais obvia seria bloquea-la, porém não é possível. Bloquear o IP ou range de IP do servidor de destino seria outra opção.

Quando fiz o bloqueio pelo range de IP, descobri que o UltraSurf tenta uma centena de IPs diferentes até conseguir o acesso que ele precisa, e certamente devem existir novos IPs a cada nova versão.

Pesquisei pelo Google e não encontrei nenhuma forma eficiente de bloquear o UltraSurf, foi então que tive pensei o seguinte.

Criar uma regra no iptables e fazer log dos acesso ao IP do UltraSurf, depois criar um daemon para ler esse log e fazer um bloqueio em tempo real.

Bem, chega de bla bla e vamos por a mão na massa.

Começando

Vamos lá, esse pequeno tutorial é para tratar um problema especifico, sendo assim eu suponho que você já sabe usar o iptables, afinal já está aqui buscando uma forma de fazer um bloqueio mais avançado, rs

Acredito que essa solução possa ser utilizada por todos, para firewall simples até o mais complexo.

Eu estou usando Debian 5.0.3, iptables 1.4.2 e fail2ban 0.8.3.

Qualquer dúvida, problema ou sugestão podem deixar um comentário.

No final você encontra os arquivos de configuração para download.

iptables

Essa parte é bem simples, no seu script de firewall adicione a seguinte linha.

iptables -A FORWARD -d 65.49.14.0/24 -j LOG --log-prefix "=UltraSurf= "

A rede 65.49.14.0/24 é a primeira a ser contactada pelo UltraSurf quando ele é aberto, a regra acima apenas gera um LOG, não existe bloqueio do acesso, em um primeiro momento o usuário vai até pensar que está funcionando.

ATENÇÃO

Coloque essa regra antes da regra com o modulo state (-m state –state ESTABLISHED,RELATED).

Se colocar depois os pacotes das conexões já estabelecidas não irão para o LOG e pode gerar falhas no bloqueio.

fail2ban

O fail2ban é uma ferramenta muito boa para a segurança de servidores, em linhas gerais ela faz o seguinte.

Lê algum arquivo de log, compara com uma expressão regular e em caso positivo ele executa algum comando no sistema.

Por padrão ele monitora o log do SSH e em caso de falhas consecutivas no acesso ele cria uma regra no iptables para bloquear o possível invasor.

Instalando

Como eu estou utilizando o Debian e vou instalar pelo apt-get.

# apt-get install fail2ban
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  python-gamin
The following NEW packages will be installed:
  fail2ban
0 upgraded, 1 newly installed, 0 to remove and 100 not upgraded.
Need to get 86.2kB of archives.
After this operation, 631kB of additional disk space will be used.
Get:1 http://ftp.br.debian.org stable/main fail2ban 0.8.3-2sid1 [86.2kB]
Fetched 86.2kB in 0s (419kB/s)
Selecting previously deselected package fail2ban.
(Reading database ... 38547 files and directories currently installed.)
Unpacking fail2ban (from .../fail2ban_0.8.3-2sid1_all.deb) ...
Processing triggers for man-db ...
Setting up fail2ban (0.8.3-2sid1) ...

Depois de instalado vamos acessar o diretório de configuração

# cd /etc/fail2ban/

Aqui vamos criar um arquivo chamado jail.local

vi /etc/fail2ban/jail.local

Vamos adicionar o conteúdo abaixo ao arquivo jail.local.

[ultrasurf]
enabled   = true
filter    = ultrasurf
port      = all
banaction = iptables-ultrasurf
logpath   = /var/log/messages
maxretry  = 6
# Tempo em segundos que o IP fica bloqueado, aqui 15 minutos
bantime   = 900

Vamos criar o arquivo com a expressão regular que irá filtar o log do iptables.

vi /etc/fail2ban/filter.d/ultrasurf.local

Aqui vamos adicionar uma expressão regular simples ao arquivo ultrasurf.local.

[Definition]
failregex = (.*)=UltraSurf=(.*) SRC=<HOST>
ignoreregex =

Apesar de simples, funciona 🙂

Agora o arquivo que irá executar o iptables e criar as regras necessárias para o bloqueio e desbloqueio.

vi /etc/fail2ban/action.d/iptables-ultrasurf.local

Aqui é onde a magica acontece, adicione o conteúdo abaixo ao arquivo iptables-ultrasurf.local.

[Definition]

actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I INPUT -j fail2ban-<name>
              iptables -I FORWARD -j fail2ban-<name>

actionstop = iptables -D FORWARD -j fail2ban-<name>
             iptables -D INPUT -j fail2ban-<name>
             iptables -F fail2ban-<name>
             iptables -X fail2ban-<name>

actioncheck = iptables -n -L FORWARD | grep -q fail2ban-<name>
              iptables -n -L INPUT | grep -q fail2ban-<name>

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j REJECT

actionunban = iptables -D fail2ban-<name> -s <ip> -j REJECT

[Init]
name = ultrasurf

Agora basta reiniciar o Daemon

/etc/init.d/fail2ban restart

Pronto, agora é só olhar o log do fail2ban e esperar pelo primeiro bloqueio.

# tail -f fail2ban.log
2012-01-13 19:11:36,890 fail2ban.server : INFO   Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.3
2012-01-13 19:11:36,891 fail2ban.jail   : INFO   Creating new jail 'ultrasurf'
2012-01-13 19:11:36,891 fail2ban.jail   : INFO   Jail 'ultrasurf' uses poller
2012-01-13 19:11:36,901 fail2ban.filter : INFO   Added logfile = /var/log/messages
2012-01-13 19:11:36,902 fail2ban.filter : INFO   Set maxRetry = 6
2012-01-13 19:11:36,903 fail2ban.filter : INFO   Set findtime = 600
2012-01-13 19:11:36,903 fail2ban.actions: INFO   Set banTime = 900
2012-01-13 19:11:36,912 fail2ban.jail   : INFO   Creating new jail 'ssh'
2012-01-13 19:11:36,912 fail2ban.jail   : INFO   Jail 'ssh' uses poller
2012-01-13 19:11:36,913 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2012-01-13 19:11:36,914 fail2ban.filter : INFO   Set maxRetry = 6
2012-01-13 19:11:36,915 fail2ban.filter : INFO   Set findtime = 600
2012-01-13 19:11:36,915 fail2ban.actions: INFO   Set banTime = 600
2012-01-13 19:11:36,985 fail2ban.jail   : INFO   Jail 'ultrasurf' started
2012-01-13 19:11:36,997 fail2ban.jail   : INFO   Jail 'ssh' started
2012-01-13 19:11:52,029 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.42
2012-01-13 19:13:36,057 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.140
2012-01-13 19:26:52,081 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.42
2012-01-13 19:28:36,109 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.140
2012-01-13 19:33:50,137 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.42
2012-01-13 19:48:50,165 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.42
2012-01-13 19:53:44,193 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.140

Enviando email de aviso

É possível enviar um email de alerta a cada bloqueio e desbloqueio que o fail2ban faz.

Para ativar essa função você tem primeiramente que testar o envio de email na maquina, para fazer isso vamos usar o programa mail.

# mail [email protected]
Subject: Teste
Teste de envio de mensagem
.
Cc:

Atenção ao . no final da mensagem, ele finaliza o email.

O Debian por padrão utiliza o Exim, o log fica localizado em /var/log/exim4/mainlog.

Você também pode usar o comando mailq para verificar a fila de email, em situações normais não deve existir nenhum email na fila.

Diversos detalhes podem impedir o envio de email, aqui não vou detalhar muito ,vou apenas colocar o conteúdo do meu arquivo /etc/exim4/update-exim4.conf.conf para usar como referência.

dc_eximconfig_configtype='smarthost'
dc_other_hostnames='SERVER.DOMINIO.com.br'
dc_local_interfaces='127.0.0.1'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets='127.0.0.1'
dc_smarthost='smtp.DOMINIO.com.br'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

Estou usando ele como smarthost e encaminhando as mensagens para o meu servidor de smtp.

Depois de ajustar o arquivo você deve executar o comando update-exim4.conf para atualizar a configuração, e reiniciar o Daemon do exim com o comando /etc/init.d/exim4 restart

Pronto, se o envio de email pelo programa mail estiver funcionando você já pode ativar o envio de email pelo fail2ban, vamos lá.

Edite o arquivo /etc/fail2ban/jail.local

#vi /etc/fail2ban/jail.local
[ultrasurf]
enabled   = true
filter    = ultrasurf
port      = all
banaction = iptables-ultrasurf
            sendmail-ultrasurf
logpath   = /var/log/messages
maxretry  = 6
bantime   = 900

Adicione a action sendmail-ultrasurf conforme exemplo acima.

Agora vamos criar um novo arquivo chamado /etc/fail2ban/action.d/sendmail-ultrasurf.local

vi /etc/fail2ban/action.d/sendmail-ultrasurf.local
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = printf %%b "Subject: Bloqueado <ip>
            From: Suporte <<sender>>
            To: <dest>\n
            \n
            O dispositivo com IP <ip> foi bloqueado depois de tentar burlar
            <failures> vezes o nosso sistema de seguranca.\n
            Acesso sera liberado automaticamente,\n
            Suporte" | /usr/sbin/sendmail -f <sender> <dest>  

actionunban = printf %%b "Subject: Liberado <ip>
              From: Infra <<sender>>
              To: <dest>\n
              \n
              O dispositivo com IP <ip> foi liberado para acesso normal\n
              Novas tentativas serao bloqueadas automaticamente,\n
              Suporte" | /usr/sbin/sendmail -f <sender> <dest>  

[Init]
name = default
dest = root
sender = fail2ban

Feito isso você irá receber um email quando uma maquina for bloqueada ou desbloqueada, veja exemplo

Bloqueio

O dispositivo com IP 10.23.134.41 foi bloqueado depois de tentar burlar
14 vezes o nosso sistema de seguranca.

Acesso sera liberado automaticamente,

Suporte

Desbloqueio

O dispositivo com IP 10.23.134.41 foi liberado para acesso normal

Novas tentativas serao bloqueadas automaticamente,

Suporte

Você também pode alterar a mensagem a seu critério.

CentOS

O nosso amigo Jovander deu uma grande dica para funcionar em CentOS.

Trocando a linha

banaction = iptables-ultrasurf

por

action = iptables-ultrasurf

Ai sim o serviço funcionou e leu os logs.

Ubuntu

Nosso amigo Angelo Figueiredo deu uma dica pra quem utiliza o Ubuntu 12.04 LTS.

A configuração pode estar toda certinha e não estar bloqueando a solução é:

verificar o arquivo /etc/fail2ban/jail.conf

se estiver

backend = auto

mude para

backed = polling

que irá começar a bloquear.

Agradecimento

Um forte abraço ao meu amigo Yros Aguiar, quando falei que eu ia criar um Daemon para ler o log, ele me lembrou que eu não precisaria re-inventar a roda, bastava usar alguma ferramenta já existente, rs.

Valeu, economizou horas de trabalho.

Conclusão

Fica ai a dica, pra mim funcionou.

Testei apenas com a versão 11.03, se em alguma outra não der certo peço que me avisem para podermos analisar como bloquear.

Com essa solução a cada tentativa de acesso utilizando o UltraSurf o usuário será bloqueado e não irá acessar mais nada pelo tempo determinado, com isso ele tem duas opções, ou entrar em contato com o suporte da empresa para reclamar ou parar de usar o UltraSurf.

Se ele reclamar você orienta a não usar mais o software, porém normalmente ele para de usar de forma natural o UltraSurf.

Download

Configuração SEM suporte a envio de email conf-fail2ban-ultrasurf.tar.gz
Configuração COM suporte a envio de email conf-fail2ban-ultrasurf-email.tar.gz

Referências

fail2ban
iptables
Bloquear Ultrasurf usando uma GPO

Rodrigo Luis Silva

Gestor de equipes especialista em sistemas GNU/Linux com vasta experiência em gerenciamento de storage, virtualização, network, desenvolvimento e outros.

More Posts - Website

Follow Me:
Twitter

40 Respostas

  1. Muito bom o artigo, não tinha encontrado antes uma ferramenta eficiente para bloqueio do ultrasurf, ficou mais fácil, muito útil.

      (Citar)

  2. leonardo

    Outra forma é identificar o tráfego com o Snort e integrar com iptables ou outro..

      (Citar)

  3. Rodrigo, muito bom o seu artigo, porém estou com um pouco de dificuldade para implementar.
    Estou tentando em uma maquina CENTOS.
    Fiz exatamente da forma indicada e o serviço Fail2Ban não inicia, então tentei com o código abaixo:

    [ultrasurf]
    enabled = true
    filter = ultrasurf
    banaction = iptables-ultrasurf[port=”all”, protocol=tcp]
    sendmail-ultrasurf[name=ultrasurf, [email protected]]
    logpath = /var/log/messages
    maxretry = 6
    bantime = 900

    Porém não obtive sucesso.

    Poderia me dá uma dica de como proceder ??? Toda ajuda é valida.

    No mais, muito obrigado.

    David Thimotti

      (Citar)

  4. Eduardo

    Parabéns pelo Tutorial !!!!!
    Implementei no Firewall de um cliente e funcionou, ta bloqueando o UltraSurf.

    Só que no log, apareceram algumas mensagens de erro, que me parece ser de sintaxe ou
    que está faltando alguma coisa.
    Poderia me ajudar ?
    Aqui tenho todo o script do Firewall em um arquivo chamado iptables, salvo no /root e
    um squid rodando na porta 3128 com whitelist. A minha distribuição é um Debian 5.0.5 .

    Segue o erro:

    2012-01-25 10:43:13,130 fail2ban.actions.action: ERROR iptables -n -L FORWARD | grep -q fail2ban-ultrasurf
    iptables -n -L INPUT | grep -q fail2ban-ultrasurf returned 100
    2012-01-25 10:43:13,130 fail2ban.actions.action: ERROR Invariant check failed. Trying to restore a sane environment
    2012-01-25 10:43:13,135 fail2ban.actions.action: ERROR iptables -D FORWARD -j fail2ban-ultrasurf
    iptables -D INPUT -j fail2ban-ultrasurf
    iptables -F fail2ban-ultrasurf
    iptables -X fail2ban-ultrasurf returned 100
    2012-01-25 10:43:13,147 fail2ban.actions.action: ERROR iptables -D fail2ban-ultrasurf -s 10.0.1.28 -j REJECT returned 100

    Obrigado.

      (Citar)

  5. Sabino

    Muito bom o artigo, pra mim funcionou 100%, implementei em varios lugares que administro, com 100% de eficacia.
    Parabens ao author.

    Sabino.

      (Citar)

  6. Eduardo :

    Parabéns pelo Tutorial !!!!!
    Implementei no Firewall de um cliente e funcionou, ta bloqueando o UltraSurf.

    Só que no log, apareceram algumas mensagens de erro, que me parece ser de sintaxe ou
    que está faltando alguma coisa.
    Poderia me ajudar ?
    Aqui tenho todo o script do Firewall em um arquivo chamado iptables, salvo no /root e
    um squid rodando na porta 3128 com whitelist. A minha distribuição é um Debian 5.0.5 .

    Segue o erro:

    2012-01-25 10:43:13,130 fail2ban.actions.action: ERROR iptables -n -L FORWARD | grep -q fail2ban-ultrasurf
    iptables -n -L INPUT | grep -q fail2ban-ultrasurf returned 100
    2012-01-25 10:43:13,130 fail2ban.actions.action: ERROR Invariant check failed. Trying to restore a sane environment
    2012-01-25 10:43:13,135 fail2ban.actions.action: ERROR iptables -D FORWARD -j fail2ban-ultrasurf
    iptables -D INPUT -j fail2ban-ultrasurf
    iptables -F fail2ban-ultrasurf
    iptables -X fail2ban-ultrasurf returned 100
    2012-01-25 10:43:13,147 fail2ban.actions.action: ERROR iptables -D fail2ban-ultrasurf -s 10.0.1.28 -j REJECT returned 100

    Obrigado.

    Caro Eduardo,

    vamos lá, acho que essa é fácil de resolver, rs

    Quando o fail2ban é iniciado ele criar uma CHAIN no iptables usando o comando abaixo

    “iptables -N fail2ban-ultrasurf”

    Dentro dessa Chain ele coloca as regras para bloqueio, quando você roda o seu script de firewall ele certamente remove todas as chains personalizadas, sendo assim ele remove a chain “fail2ban-ultrasurf”.

    Para resolver isso basta você adicionar a linha abaixo no começo do seu script de firewall

    /etc/init.d/fail2ban stop

    E a seguinte linha no final do script de firewall

    /etc/init.d/fail2ban start

    Espero que resolva.

    abs,

    Rodrigo

      (Citar)

  7. Jovander

    David Thimotti :
    Rodrigo, muito bom o seu artigo, porém estou com um pouco de dificuldade para implementar.
    Estou tentando em uma maquina CENTOS.
    Fiz exatamente da forma indicada e o serviço Fail2Ban não inicia, então tentei com o código abaixo:
    [ultrasurf]
    enabled = true
    filter = ultrasurf
    banaction = iptables-ultrasurf[port=”all”, protocol=tcp]
    sendmail-ultrasurf[name=ultrasurf, [email protected]]
    logpath = /var/log/messages
    maxretry = 6
    bantime = 900
    Porém não obtive sucesso.
    Poderia me dá uma dica de como proceder ??? Toda ajuda é valida.
    No mais, muito obrigado.
    David Thimotti

    Estou com o mesmo erro!!! Conseguiu subir o serviço

      (Citar)

  8. Walter

    Muito obrigado, meu amigo, por essa sua importante contribuição! Estava há muito tempo procurando uma solução e a sua é, até o momento, a mais eficiente. Um abraço!

      (Citar)

  9. Jovander

    Olá consegui resolver no CentOS da seguinte forma:

    trocando a linha “banaction = iptables-ultrasurf” por “action =
    iptables-ultrasurf”

    Ai sim o serviço funcionou e leu os logs.

    Até.
    Jovander

      (Citar)

  10. Max Weber

    Galera, testei essa dica aí e funcionou. Mas tive que fazer umas alterações, do mesmo modo que o colega Jovander, outra dúvida. Quando executo o comando tail -f fail2ban.log diz que o arquivo não existe, resolvi então colocar /var/log/fail2ban.log mas também não deu certo, criei o arquivo na mão, mas ele sempre fica em branco, ou seja, eu não consigo ver apenas o log do fail2ban, para que eu possa visualizar os logs tenho que executar o já conhecido tail -f /var/log/messages mas ele me mostra todos os logs é claro.
    Alguma dica?

      (Citar)

  11. Daniel TI

    Simplesmente sensacional.

    Muito obrigado e parabéns pelo excelente trabalho.

    Um abraço,

      (Citar)

  12. Jefferson

    No fedora 14
    Ainda não conseguir fazer funcionar mas o log conseguir resolver
    echo “logtarget = /var/log/fail2ban.log” >> /etc/fail2ban/fail2ban.conf

      (Citar)

  13. Bruno Bassani

    Parabéns Pelo Post e pelos Scripts. Agradecido!
    Abraço

      (Citar)

  14. marlon

    nessa linha iptables -A FORWARD -d 65.49.14.0/24 -j LOG –log-prefix “=UltraSurf= ” tem o espaço na expressao entre aspas ou é assim “=UltraSurf=” ?

      (Citar)

  15. marlon

    como faço para liberar 1 ip para usar o ultrasurf???

      (Citar)

  16. marlon:
    nessa linha iptables -A FORWARD -d 65.49.14.0/24 -j LOG –log-prefix “=UltraSurf= ” tem o espaço na expressao entre aspas ou é assim“=UltraSurf=”?

    Caro Marlon, tudo bem?

    Sim, tem um espaço, se não colocar o espaço na hora de gerar o log ele vai ficar grudado.

    abs,

    Rodrigo

      (Citar)

  17. marlon:
    como faço para liberar 1 ip para usar o ultrasurf???

    Marlon, basta adicionar a regra de liberação antes da regra iptables -A FORWARD -d 65.49.14.0/24 -j LOG –log-prefix “=UltraSurf= ”

    abs

      (Citar)

  18. Angelo Figueiredo

    Dica pra quem utiliza o Ubuntu 12.04 LTS
    A configuração pode estar toda certinha e não estar bloqueando a solução é:

    verificar o arquivo /etc/fail2ban/jail.conf
    se estiver backend = auto mude para backed = polling que irá começar a bloquear.

    abraços

      (Citar)

  19. Angelo Figueiredo:
    Dica pra quem utiliza o Ubuntu 12.04 LTS
    A configuração pode estar toda certinha e não estar bloqueando a solução é:

    verificar o arquivo /etc/fail2ban/jail.conf
    se estiver backend = auto mude para backed = polling que irá começar a bloquear.

    abraços

    Angelo, muito obrigado pela dica.

    Abraços

      (Citar)

  20. Adan

    Max Weber: Quando executo o comando tail -f fail2ban.log diz que o arquivo não existe

    Mesmo problema.

      (Citar)

  21. Adan

    Adan: backed = polling

    Hummm… falta o caminho completo do log:

    tail -f /var/log/fail2ban.log

    Mas ele não atualizaria sozinho? Ou seja, quando eu dou o comando o sistema mostra o conteúdo. Sentei numa máquina do lado e abri o UltraSurf para navegar. 5 minutos depois nada mudou na tela do log, nem quando mandei atualizar.

      (Citar)

  22. etecfami

    Olá Rodrigo,

    Estou usando sua regra na escola que trabalho, uso Debian 6 e squid configurado no modo transparente.
    Percebi que bloqueia o ultrasurf na primeira vez que o usuário abre o mesmo, mas se o usuário não fechar o aplicativo e configurar com minhas configurações de proxy o mesmo consegue usar o ultrasurf.
    Gostaria de saber se é possível utilizar algum comando que não deixe o squid passar a conexão do ultrasurf ou se pode ser algo errado no meu firewall.
    Segue conf atual do firewall

    #!/bin/sh
    modprobe iptable_nat
    iptables -F
    iptables -t nat -F
    iptables -X
    echo “1” > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A PREROUTING -p tcp -i eth1 –dport 80 -j REDIRECT –to 3128
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    iptables -A FORWARD -d 65.49.14.0/24 -j LOG –log-prefix “=UltraSurf= ”

    Agradecimentos antecipados,
    No aguardo,
    Etecfami

      (Citar)

  23. Anonymous

    Muito boa noite Rodrigo.

    Primeiramente queria te agradecer muito mesmo pela essa MARAVILHOSA dica.

    Funcionou que uma maravilha!!

    Agora uns engraçadinhos metidos a bonzão aqui na empresa irão voltar a trabalhar e deixar o facebook de lado…. HAHAHAHAHA (risada maligna)

    Brincadeiras a parte, obrigado mais uma vez, e vou te seguir no facebook e acompanhar teu site sempre ok?

    Tenha uma ótima semana.

    Abraços.

      (Citar)

  24. etecfami:
    Olá Rodrigo,

    Estou usando sua regra na escola que trabalho, uso Debian 6 e squid configurado no modo transparente.
    Percebi que bloqueia o ultrasurf na primeira vez que o usuário abre o mesmo, mas se o usuário não fechar o aplicativo e configurar com minhas configurações de proxy o mesmo consegue usar o ultrasurf.
    Gostaria de saber se é possível utilizar algum comando que não deixe o squid passar a conexão do ultrasurf ou se pode ser algo errado no meu firewall.
    Segue conf atual do firewall

    #!/bin/sh
    modprobe iptable_nat
    iptables -F
    iptables -t nat -F
    iptables -X
    echo “1″ > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A PREROUTING -p tcp -i eth1 –dport 80 -j REDIRECT –to 3128
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    iptables -A FORWARD -d 65.49.14.0/24 -j LOG –log-prefix “=UltraSurf= ”

    Agradecimentos antecipados,
    No aguardo,
    Etecfami

    Boa noite,

    Pela sua regra você deve utilizar proxy transparente, para contornar esse problema você pode editar o arquivo /etc/fail2ban/action.d/iptables-ultrasurf.local

    Adiciona a seguinte linha

    iptables -I PREROUTING -t nat -j fail2ban-<name>
    iptables -D PREROUTING -t nat -j fail2ban-<name>

    Veja o aquivo completo

    [Definition]

    actionstart = iptables -N fail2ban-<name>
    iptables -A fail2ban-<name> -j RETURN
    iptables -I INPUT -j fail2ban-<name>
    iptables -I FORWARD -j fail2ban-<name>
    iptables -I PREROUTING -t nat -j fail2ban-<name>

    actionstop = iptables -D FORWARD -j fail2ban-<name>
    iptables -D INPUT -j fail2ban-<name>
    iptables -D PREROUTING -t nat -j fail2ban-<name>
    iptables -F fail2ban-<name>
    iptables -X fail2ban-<name>

    actioncheck = iptables -n -L FORWARD | grep -q fail2ban-<name>
    iptables -n -L INPUT | grep -q fail2ban-<name>

    actionban = iptables -I fail2ban-<name> 1 -s <ip> -j REJECT

    actionunban = iptables -D fail2ban-<name> -s <ip> -j REJECT

    [Init]
    name = ultrasurf

    Dessa forma você vai impedir que ele conecte na porta do proxy.

    Caso você utilize estações Windows e tenha um AD na rede eu recomendo que você crie uma GPO para bloquer a alteração de proxy.

    Se der certo me avisa.

    abs,

    Rodrigo

      (Citar)

  25. Jefferson: Jefferson

    Opa Jeferson, me passa por email os arquivos de log as configurações e o resultado do iptables -L -nv

    abs

      (Citar)

  26. Carlos Henrique da Silva

    Essas regras só pode ser usado no linux, vc tem algum procedimento para Ruwindows??

      (Citar)

  27. Utilize o Ubuntu 12.04 mas o serviço fail2ban não iniciar
    /etc/init.d/fail2ban restart
    erro: Restarting authentication failure monitor fail2ban

    Alguem pode me ajudar.

      (Citar)

  28. Neto

    Olá Rodrigo! Primeiramente gostaria de te elogiar pela dedicação em ajudar o próximo.
    Por gentileza você poderia me ajudar ?
    Não estou conseguindo bloquear o ultrasurf, o pessoal está utilizando a versão 12.04.
    Já segui todos os procecimentos anteriores sem sucesso, utilizo proxy transparente, já configurei a GPO no AD para não permitir que o usuário alterar as configurações do Proxy.
    Segue o log do Fail2Ban, utilizo o Ubuntu 10.04.
    root@srv-internet:~# tail -f /var/log/fail2ban.log
    2012-10-04 15:47:20,240 fail2ban.jail : INFO Jail ‘ultrasurf’ uses poller
    2012-10-04 15:47:20,241 fail2ban.filter : INFO Set maxRetry = 6
    2012-10-04 15:47:20,243 fail2ban.filter : INFO Set findtime = 600
    2012-10-04 15:47:20,245 fail2ban.actions: INFO Set banTime = 900
    2012-10-04 15:47:20,265 fail2ban.jail : INFO Jail ‘ssh’ started
    2012-10-04 15:47:20,283 fail2ban.jail : INFO Jail ‘ultrasurf’ started
    2012-10-04 15:53:13,982 fail2ban.server : INFO Stopping all jails
    2012-10-04 15:53:14,973 fail2ban.jail : INFO Jail ‘ssh’ stopped
    2012-10-04 15:53:15,735 fail2ban.jail : INFO Jail ‘ultrasurf’ stopped
    2012-10-04 15:53:15,744 fail2ban.server : INFO Exiting Fail2ban

    Segue meu firewall

    EXTERNAL=eth0
    INTERNAL=eth1

    # parando o failban
    /etc/init.d/fail2ban stop

    […]

    # log do ultrasurf
    iptables -A FORWARD -d 65.49.14.0/24 -j LOG –log-prefix “=UltraSurf= ”

    […]

    # BLOQUEIO ULTRASURF

    […]

    iptables -I FORWARD -p tcp -d 65.49.14.0/24 -j DROP

    […]

    # inicializa o failban
    /etc/init.d/fail2ban start

    Segue os resultados do comando iptables -L -nv
    root@srv-internet:~# iptables -L -nv
    Chain INPUT (policy DROP 1842 packets, 593K bytes)
    pkts bytes target prot opt in out source destination
    14813 1550K ACCEPT all — eth1 * 0.0.0.0/0 0.0.0.0/0

    […]

    14 672 DROP tcp — * * 0.0.0.0/0 65.49.14.0/24

    […]

    40 4586 LOG all — * * 0.0.0.0/0 65.49.14.0/24 LOG flags 0 level 4 prefix “=UltraSurf= ”

    […]

    Chain OUTPUT (policy ACCEPT 34376 packets, 39M bytes)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:110

    […]

      (Citar)

  29. Boa implementação!

      (Citar)

  30. Carlos Henrique da Silva:
    Essas regras só pode ser usado no linux, vc tem algum procedimento para Ruwindows??

    Carlos, boa noite.

    Para Windows eu não conheço.

    abs,

    Rodrigo

      (Citar)

  31. Elivelto:
    Utilize o Ubuntu 12.04 mas o serviço fail2ban não iniciar
    /etc/init.d/fail2ban restart
    erro: Restarting authentication failure monitor fail2ban

    Alguem pode me ajudar.

    Elivelto, boa noite.

    Tenta usar a dica do Angelo.

    verificar o arquivo /etc/fail2ban/jail.conf
    se estiver backend = auto mude para backed = polling que irá começar a bloquear.

      (Citar)

  32. Neto:
    Olá Rodrigo! Primeiramente gostaria de te elogiar pela dedicação em ajudar o próximo.
    Por gentileza você poderia me ajudar ?
    Não estou conseguindo bloquear o ultrasurf, o pessoal está utilizando a versão 12.04.
    Já segui todos os procecimentos anteriores sem sucesso, utilizo proxy transparente, já configurei a GPO no AD para não permitir que o usuário alterar as configurações do Proxy.
    Segue o log do Fail2Ban, utilizo o Ubuntu 10.04.
    root@srv-internet:~# tail -f /var/log/fail2ban.log
    2012-10-04 15:47:20,240 fail2ban.jail : INFO Jail ‘ultrasurf’ uses poller
    2012-10-04 15:47:20,241 fail2ban.filter : INFO Set maxRetry = 6
    2012-10-04 15:47:20,243 fail2ban.filter : INFO Set findtime = 600
    2012-10-04 15:47:20,245 fail2ban.actions: INFO Set banTime = 900
    2012-10-04 15:47:20,265 fail2ban.jail : INFO Jail ‘ssh’ started
    2012-10-04 15:47:20,283 fail2ban.jail : INFO Jail ‘ultrasurf’ started
    2012-10-04 15:53:13,982 fail2ban.server : INFO Stopping all jails
    2012-10-04 15:53:14,973 fail2ban.jail : INFO Jail ‘ssh’ stopped
    2012-10-04 15:53:15,735 fail2ban.jail : INFO Jail ‘ultrasurf’ stopped
    2012-10-04 15:53:15,744 fail2ban.server : INFO Exiting Fail2ban

    Segue meu firewall

    EXTERNAL=eth0
    INTERNAL=eth1

    # parando o failban
    /etc/init.d/fail2ban stop

    […]

    # log do ultrasurf
    iptables -A FORWARD -d 65.49.14.0/24 -j LOG –log-prefix “=UltraSurf= ”

    […]

    # BLOQUEIO ULTRASURF

    […]

    iptables -I FORWARD -p tcp -d 65.49.14.0/24 -j DROP

    […]

    # inicializa o failban
    /etc/init.d/fail2ban start

    Segue os resultados do comando iptables -L -nv
    root@srv-internet:~# iptables -L -nv
    Chain INPUT (policy DROP 1842 packets, 593K bytes)pkts bytes target prot opt in out source destination
    14813 1550K ACCEPT all—eth1 * 0.0.0.0/00.0.0.0/0

    […]

    14 672 DROP tcp—** 0.0.0.0/065.49.14.0/24

    […]

    404586 LOGall—** 0.0.0.0/065.49.14.0/24LOG flags 0 level 4 prefix “=UltraSurf= ”

    […]

    Chain OUTPUT (policy ACCEPT 34376 packets, 39M bytes)pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp—** 0.0.0.0/00.0.0.0/0tcp dpt:110

    […]

    Opa Neto, tudo bem?

    Não sei se já conseguiu resolver, o que tenho de dica é o seguinte.

    14 672 DROP tcp — * * 0.0.0.0/0 65.49.14.0/24 < <<<<<<<<<<<<<<<<<-------- 0 0 DROP tcp -- * * 65.49.2.0/24 0.0.0.0/0 0 0 DROP tcp -- * * 0.0.0.0/0 65.49.2.0/24 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9666 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3162 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3103 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:23620 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:19769 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:33190 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:55433 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:19769 0 0 ACCEPT all -- * * 0.0.0.0/0 200.201.174.204 40 4586 LOG all -- * * 0.0.0.0/0 65.49.14.0/24 LOG flags 0 level 4 prefix "=UltraSurf= " <<<<<<<<<<<<<<------------- Você tem duas regras para a rede 65.49.14.0/24, nesse caso o pacote cai na primeira regra e não cria o log do ultrasurf que está na regra mais abaixo. Tira do seu script as regras de bloqueio do ultrasurf que você usava antes. # BLOQUEIO ULTRASURF iptables -I FORWARD -p tcp --dport 19769 -j DROP iptables -I FORWARD -p tcp --dport 55433 -j DROP iptables -I FORWARD -p tcp --dport 33190 -j DROP Elas acabam entrando na frente da regra do fail2ban. Espero que resolva. Vou editar o seu post para não aparecer as suas regras no site. abs, Rodrigo

      (Citar)

  • Rafael Caobianco

    Que legal, primeiro site que encontro esse tutorial, parece ser muito eficiente!!!

    Utilizo o CentOS com o tuxfrw e squid, existe a possibilidade de realizar o bloqueio do UltraSurf a partir deles?

    Muito obrigado e sucesso!!
    Abs

      (Citar)

  • Dias

    Muito obrigado. Funcionou sem problemas c/ debian 6.0. É uma questão de ética profissional.

      (Citar)

  • Muito bom o artigo. Obrigado, funcionou certinho aqui!

    Uma dica que eu dou pra quem usa firewall/nat com duas placas de rede, é informar a interface usada e dar um drop depois. Exemplo:

    IPTABLES=”/sbin/iptables” # caminho para o iptables
    LOCAL_INTERFACE_1=”eth1″ # Interface para intranet/rede local

    $IPTABLES -A FORWARD -i $LOCAL_INTERFACE_1 -d 65.49.14.0/24 -j LOG –log-prefix “UltraSurf ”
    $IPTABLES -A FORWARD -i $LOCAL_INTERFACE_1 -d 65.49.14.0/24 -j DROP

      (Citar)

  • Cara, meus parabéns pelo artigo.

      (Citar)

  • Claudiney

    como implementar esse bloqueio do ultrasurf no pfsense?

      (Citar)

  • Claudiney:
    como implementar esse bloqueio do ultrasurf no pfsense?

    Claudiney, tudo bem?

    Tem sim, segue o link, inclusive foi baseado no meu artigo.

    http://forum.pfsense.org/index.php/topic,64166.msg347609.html

    abs,

    Rodrigo

      (Citar)

  • Wellington Rangel Diesel

    Muito obrigado pelo tutorial, ajudou muito!

      (Citar)

  • Deixe uma resposta

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

    Home Linux Como Fazer para Bloquear o UltraSurf, Solução Definitiva [iptables + fail2ban]