De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Como Fazer para Bloquear o UltraSurf, Solução Definitiva (iptables + fail2ban)

Colaboração: Rodrigo Luis Silva

Data de Publicação: 16 de janeiro de 2012

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.

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. Já o BitTorrent foi bloqueado sem dificuldades.

Com o uso do tcpdump eu identifiquei que todo o acesso do UltraSurf sai pela porta 443, logo a solução mais óbvia seria bloqueá-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 em criar uma regra no iptables e fazer log dos acesso ao IP do UltraSurf para depois criar um daemon para ler esse log e fazer um bloqueio em tempo real.

Começando

Como esse pequeno tutorial visa tratar um problema especifico, eu suponho que você já sabe usar o iptables, pois está aqui buscando uma forma de fazer um bloqueio mais avançado.

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.

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 lê algum arquivo de log, compara com uma expressão regular e em caso positivo 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

Para instalar, emita o comando:

  # 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

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 seu-email@seu-dominio.com.br
  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-o 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.

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.

Download

Referências

Este artigo foi publicado originalmente no site DotSharp.

Rodrigo Luis Silva é Gestor de equipes especialista em sistemas GNU/Linux com ampla experiência em gerenciamento de storage, virtualização, network, desenvolvimento e outros. Nas horas vagas escreve artigos técnicos para o site http://www.dotsharp.com.br

Muro da vergonha da propriedade intelectual

Por Fátima Conti

Notar a linha do tempo sobre copyright na parte inferior do infográfico com consequente aumento do tempo de validade dos direitos autorais.

Muro da vergonha da propriedade intelectual

#infografico (Publicado em 26 de abril de 2011)

Error: No domain found