Olá, gurizada.
Venho aqui compartilhar com vocês, o que foi meu Trabalho de Conclusão de Curso da minha faculdade, mais especificamente, o que eu aprendi com ele e o quanto pensar "out-of-the-box", pode acabar trazendo resultados excelentes.
Sou novato no ramo de redes, embora esteja me formando neste ano no curso de Redes de Computadores. Confesso que não tenho muito conhecimento prático sobre o assunto, mas adoro pesquisar sobre coisas novas e aprender, assim como também gosto e compartilhar conhecimento quando consigo ele.
Agradeço muito ao pessoal do Viva o Linux, especificamente ao
Rodrigo Luis Silva, foi por causa da solução que ele fez para o
UltraSurf, que eu pude bloquear todo o resto dos programas. Muito obrigado mesmo.
Como a maior parte de vocês sabe, bloquear
peer-to-peer em uma rede com Blacklist é uma dor de cabeça. Há programas como o
IPP2P e o
Layer7, que tentam detectar e bloquear os tráfegos deste tipo, mas, os mesmos requerem processos bem avançados de instalação, além de que, ambos são projetos que estão abandonados (a última atualização do IPP2P foi em 2006 e do Layer7 em 2009, se eu não me engano) e bloquear portas ou IPs, não adianta. Pois eles já são projetados para dar a volta ao redor do Firewall, caso isso aconteça.
Vamos, então, pegar o conceito básico de Firewall. Pensem vocês numa muralha protegendo uma cidade. Uma muralha do tipo "blacklist", é uma muralha barata e cheia de buracos, aonde você vai tentando tapar os buracos, conforme a vai construindo.
Mas, infelizmente, nem sempre é possível tapar todos estes. Uma muralha do tipo
Whitelist, é uma muralha enorme e alta, onde você vai fazendo as entradas conforme necessário, assim prevenindo o acesso indevido de forma muito mais eficiente.
Mas, óbvio, pode acabar sendo um incomodo quando o fluxo de "pessoas" aumentar e for necessário novas entradas, sendo assim necessário alguém responsável por fazer tais entradas de tempos em tempos.
Conceito do Fail2ban
Porém, o que poucos pensam em fazer é, ao invés de ficar tapando buracos em uma blacklist que podem acabar nunca sendo tapados, seria colocar franco-atiradores no topo desta muralha, que venham a atirar em usuários que tentem ultrapassar de forma não permitida. Assim, deixando alguns "buracos" que, na verdade, são armadilhas.
Ou seja, vamos "banir" temporariamente usuários da rede, caso estes sejam pegos tentando usar um software indevido. É um método que pode ser considerado extremo e estranho para muitos, mas é muito eficaz.
Esse é o conceito por trás do
Fail2ban, programa que, com auxílio do
IPtables, faz a detecção de eventos e pune os usuários que fazem algo indevido na rede. Óbvio, para que isso seja possível, deve-se ter vários cuidados, a Instituição teve que aceitar o projeto e os alunos foram notificados que teriam seu acesso bloqueado caso, fizessem algo indevido.
Na Instituição, fora verificado o uso de quatro softwares que eram impossíveis de bloquear de outra forma: uTorrent, Tor Project, UltraSurf e Ares Galaxy.
Vocês têm que entender que, por mais que estes softwares realmente tentem circular Firewalls, eles não estão preparados para enfrentar um Firewall que está em modo "ofensivo", ou seja, um Firewall que ataca de volta e tem "armadilhas" prontas para pega-los.
As armadilhas são possíveis, pois cada um destes programas têm certa "tendência":
- O uTorrent verifica atualizações toda vez que liga, além de baixar arquivos de propaganda de um de seus servidores, além de que, você pode fazer links com a palavra "tracker", ou então, "announce" virarem armadilhas também.
- O Ares Galaxy conecta-se com a página ares.net para baixar um arquivo chamado cnodes.dat e também verifica atualizações.
- O UltraSurf conecta-se sempre com um IP da rede 65.49.14.0/24.
- O Tor tenta conectar-se com um certo range de IPs disponíveis em TorBulkExitList.
O tempo para o bloqueio temporário de cada um destes varia. O UltraSurf fica o tempo todo tentando conectar-se, então, podem colocar 5 minutos e ele vai bloquear, até que o usuário feche.
Todavia, o Tor não conecta-se sempre com os mesmos IPs e seu bloqueio deve ser feito com uma punição maior, já que o conteúdo que é acessado através do mesmo, pode ser prejudicial para a rede e seus administradores, ou seja, é necessário bloquear a Internet deste computador pelo período de 30~60 minutos. Aliás, também é aconselhável que seja enviado uma mensagem avisando sobre este bloqueio.
Aliás, a questão do Tor é muito complicada, pois ele também é usado para acesso de páginas consideradas ilegais. Na própria escola onde eu fiz meu estágio, encontrei em computadores links para a
Hidden Wiki e para conteúdo ilegal. O que não é nada bom para uma Instituição Educacional.
Avisei à direção sobre o ocorrido e conseguimos descobrir quem fez o acesso e bloqueamos o acesso ao Tor logo em seguida, sendo que, a simples tentativa de acesso a ele gera um alerta no servidor, enviando um e-mail para mim e, em seguida, a Direção é avisada, sendo passível de suspensão ou expulsão. No caso anterior, os alunos se safaram de algo que poderia envolver Polícias, seja Civil ou Federal, com apenas uma suspensão.
Enfim, vamos para a parte prática?
Aplicação
O
Fail2ban pode ser baixado em forma de código fonte na sua página
Fail2ban.org, ou então, você pode usar o comando de instalação de pacotes dos repositórios da sua distribuição (
apt-get, no meu caso). Mas enfim, a instalação é MUITO simples e sem nenhuma dor de cabeça, afinal, o programa é apenas um complemento para o bom e velho IPtables.
Creio que cada um tenha um script contendo os comandos de inicialização das suas máquinas, mas se não tiver, faça um arquivo de inicialização onde vão estar as linhas de comando. Mas enfim, neste script, insira a seguinte linha:
iptables -A FORWARD -d 65.49.14.0/24 -j LOG --log-prefix "=UltraSurf= "
Este script, aliás, é do artigo
Como bloquear o Ultrasurf - solução definitiva (iptables + Fail2ban), mas, ele vai ser modificado para podermos banir os outros aplicativos.
O conceito desta linha recém-citada, é simples, qualquer dado que for redirecionado com destino para a rede
65.49.14.0/24, irá gerar uma entrada no LOG com o prefixo
=UltraSurf= .
Ou seja, ela não bloqueia nada. Mais tarde, faremos uso do Fail2ban para capturar essa entrada (ou então outras) para gerar uma punição para o usuário.
Ou seja, para criar as próximas linhas, basta apenas entender quais são os IPs ou endereços que os programas conectam-se ao inicializar e trocar o prefixo para realizar ações individuais para cada um destes. No caso, do
Ares Galaxy:
iptables -A FORWARD -d 199.59.162.71 -j LOG --log-prefix "=Ares_Galaxy= "
iptables -A FORWARD -d ares.net -j LOG --log-prefix "=Ares_Galaxy= "
Já, detectar o
Tor é mais complicado, pois ele nem sempre conecta-se com o mesmo IP. E a lista de IPs que faz parte da sua rede é bem extensiva, por isso, deve-se primeiro efetuar o download da lista de IPs usadas por ele através da pagina:
No caso do servidor, o arquivo foi transferido, os comentários foram retirados do início e ele foi renomeado para
lista, sendo colocado no diretório
/home/. E por isso o seguinte comando:
cat /home/lista | while read line; do iptables -A FORWARD -d $line -j LOG --log-prefix "=TorProject= "; done
Onde, para cada linha da lista de IPs, será feito um comando do IPTABLES para registrar que o acesso à rede
Tor fora efetuado, usando o prefixo
=TorProject= para identifica-lo.
Embora o usuário consiga, diversas vezes em primeiro momento, conectar-se à rede
Tor e até acessar algumas páginas, já que nem todos os IPs estão na lista, após alguns minutos de uso, a rede
Tor tenta entrar em contato com um dos IPs da lista, o que acaba ativando a “armadilha” e, posteriormente, banindo temporariamente o usuário.
E no caso do
uTorrent, é ridiculamente fácil, pois o que não falta é buraco, desde o sistema de atualizações, as keywords de torrent, do DHT, tudo... :D
iptables -A FORWARD -d 98.143.146.7 -j LOG --log-prefix "=uTorrent= "
iptables -A FORWARD -d update.bittorrent.com -j LOG --log-prefix "=uTorrent= "
iptables -A FORWARD -m string --algo bm --string "BitTorrent" -j LOG --log-prefix "=uTorrent= "
iptables -A FORWARD -m string --algo bm --string "peer_id=" -j LOG --log-prefix "=uTorrent= "
iptables -A FORWARD -m string --algo bm --string "torrent" -j LOG --log-prefix "= uTorrent ="
iptables -A FORWARD -m string --algo bm --string "announce" -j LOG --log-prefix "= uTorrent = "
iptables -A FORWARD -m string --algo bm --string "tracker" -j LOG --log-prefix "= uTorrent = "
iptables -A FORWARD -m string --algo bm --string "find_node" -j LOG --log-prefix "= uTorrent = "
iptables -A FORWARD -m string --algo bm --string "info_hash" -j LOG --log-prefix "= uTorrent = "
iptables -A FORWARD -m string --algo bm --string "get_peers" -j LOG --log-prefix "= uTorrent = "
Partindo para o próximo arquivo, temos o arquivo de configuração do Fail2ban chamado
jail.conf, que fica em
/etc/fail2ban/. Nele, estarão definidas as regras de bloqueio do nosso sistema, quantos minutos algo fica banido e quantas tentativas de acesso podem ser feitas.
Sem deletar as configurações padrão, vamos adicionar a este arquivo (pode ser em qualquer parte dele) a seguinte lista de parâmetros:
# Nome do Filtro e ativacao
[ultrasurf]
enabled = true
filter = ultrasurf
# Filtrar todas as portas
port = all
# Direciona para o arquivo de acoes para realizar caso o usuário seja pego usando o UltraSurf
banaction = iptables-ultrasurf
# Diz onde esta o log de acesso que o IPTables esta registrando
logpath = /var/log/syslog
# Numero maximo de tentativas de conexao.
maxretry = 1
# Tempo em segundos que o IP fica bloqueado. 5 Minutos neste caso.
bantime = 300
Óbvio que, tudo que está com o
#, são comentários meus, podendo ser removidos.
Mas enfim, será feito uma lista destas para cada um dos aplicativos sendo capturados pelo IPtables:
# Nome do Filtro e ativacao
[tor_project]
enabled = true
filter = tor_project
# Filtrar todas as portas
port = all
# Direciona para o arquivo de acoes para realizar caso o usuário seja pego usando o UltraSurf
banaction = iptables-tor_project
# Diz onde esta o log de acesso que o IPTables esta registrando
logpath = /var/log/syslog
# Numero maximo de tentativas de conexao.
maxretry = 1
# Tempo em segundos que o IP fica bloqueado. 1 Hora neste caso pois ele se conecta apenas uma vez com esse IP
bantime = 3600
E assim por diante, conforme suas necessidades. Não vou repetir o arquivo do
uTorrent e do
Ares Galaxy, o conceito é o mesmo, bastando trocar os dois nomes do filtro e do
banaction.
Agora, é necessário criar os arquivos de filtro para pegar os dados no
Syslog e os arquivos que vão fazer a ação de banir e "desbanir" o usuário.
Iniciando, vamos fazer um arquivo dentro da pasta
/etc/fail2ban/filter.d/ com o nome de cada um dos filtros, no estilo com a extensão
.local no final. Ou seja,
ultrasurf.local,
utorrent.local,
tor_project.local e
ares_galaxy.local.
Estes são os scripts que apontarão ao Fail2ban, qual era o IP do usuário que fez uso do programa indevido na rede.
Dentro de cada um destes, o seguinte conteúdo deverá ir:
[Definition]
failregex = (.*)=UltraSurf=(.*) SRC=<HOST>
ignoreregex =
Óbvio, o
UltraSurf= deve ser modificado conforme o script, sendo mudado para
=Tor_Project=, ou então
=Ares_Galaxy=, ou
=uTorrent=.
Como última etapa, é necessário criar o arquivo que tem as ações que serão feitas quando um usuário é "pego".
Esta etapa já é mais simples, dentro da pasta
/etc/fail2ban/action.d/, crie arquivos na seguinte maneira:
iptables-ultrasurf.local, ou seja, além deste também, haverá o
iptables-utorrent.local,
iptables-tor_project.local e
iptables-ares_galaxy.local.
Dentro destes, apenas o nome, que está presente na última linha do seguinte script, deve ser modificado para adequa-lo:
[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
Se alguém também quiser que o sistema mande um e-mail para você quando um acesso indevido é detectado, pode seguir este
tutorial e modificar o que já fora feito.
Caso queiram saber se os serviços estão sendo bloqueados, há dois arquivos que vão indicar isso:
- /var/log/syslog, onde será possível verificar os logs do IPtables.
- /var/log/fail2ban.log, onde estarão os históricos de inicialização de filtros, banimentos, desbanimentos e os IPs que foram banidos.
Um dos problemas mais comuns do
Fail2ban é, infelizmente, um consumo elevado de CPU sem razão alguma. Isto ocorre, muitas vezes, devido à quantia de logs que ele verifica com as suas configurações default, verificando se o servidor não está recebendo ataques no serviço
SSH.
Caso o consumo de CPU chegue em valores maiores que 10% do seu CPU, aconselho verificar o arquivo
jail.conf e desativar qualquer filtro excluindo os filtros que você configurou.
Vale lembrar, que você pode também verificar o que está acontecendo no serviço através do arquivo
/var/log/fail2ban.log. No meu caso, houve uma semana onde o serviço SSH do servidor estava sendo atacado constantemente e por múltiplas fontes, razão porquê o Fail2ban veio a ocupar uma quantia ridiculamente alta de CPU, enquanto o seu filtro SSH estava ligado.
Conclusão
Enfim, pode ser que este sistema pareça complicado para alguns, mas não é (até porquê, maior parte é simplesmente copiar o que eu postei, colar e modificar o que é necessário) e o sistema está 100% funcional na Escola Pública.
É sim, um sistema de Firewall agressivo, mas foi a única e melhor solução além da modificação para Whitelist que encontrei disponível.
Este sistema foi parte do meu Trabalho de Conclusão de Curso de Tecnólogo em Redes de Computadores e, embora infelizmente, vários alunos realmente acabaram tendo o seu acesso bloqueado devido aos programas que tentaram utilizar (e querem praticamente me matar pelo que eu fiz lá), a direção me agradeceu MUITO pelo serviço que consegui fazer para a Escola.
Espero que analisem o artigo, não apenas como algo que pode ser usado para bloquear estas aplicações específicas, mas, como uma forma para bloquear qualquer tipo de programa "inteligente" que tente burlar oFfirewall de alguma forma. Pois, querendo ou não, a maioria dos programas que existem na atualidade, checam se há atualizações ou tem algum tipo de "padrão" em sua comunicação, sendo assim, possível banir os mesmos através do Fail2ban.