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.
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.
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.
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.
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.
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
É 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.
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.
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.
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
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