Minha Solução para Bloqueio de Peer-to-Peer e Proxies com o fail2ban

1. Minha Solução para Bloqueio de Peer-to-Peer e Proxies com o fail2ban

Wellington Diesel
wetto

(usa Outra)

Enviado em 24/11/2013 - 19:31h

[SIZE=5]Introdução[/SIZE]

Boa tarde gurizada, venho aqui compartilhar com vocês o que foi o 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 esse 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 vivaolinux, mais especificamente o "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.
[url]http://www.vivaolinux.com.br/artigo/Como-bloquear-o-Ultrasurf-solucao-definitiva-%28iptables-+-Fail2ban%29/[/url]

Primeiro de tudo, quero apresentar o problema que havia e a solução proposta:

Em uma Escola Pública da minha cidade, alunos acessavam qualquer tipo de conteúdo sem nenhuma restrição e isso acabava prejudicando e muito o trabalho de seus funcionários, fazendo com que fosse impossível trabalhar nos períodos onde alunos estavam utilizando os laboratórios.

Para melhorar a situação, foi proposto o bloqueio e o limite da utilização de banda por parte dos computadores do laboratório, reservando também uma faixa de banda exclusiva para os computadores principais da Instituição.


Outro problema é que na Instituição não há ninguém que possa cuidar os computadores e eu não vou prestar assistência sempre para eles (ano que vem vou ir embora) e por isso fica impossível fazer um sistema de whitelist, que sempre é preferível em comparação à blacklist. Pode parecer em primeiro momento que whitelist dá mais trabalho que blacklist, mas não é verdade.

Mas enfim, para fazer o trabalho eu utilizei o NTOP para coletar dados por meses, o SQUID para fazer o limite de banda para os computadores e bloquear o tamanho máximo de arquivos que podem ser baixados e o seu plugin SquidGuard para fazer o bloqueio das páginas, usando uma modificação da blacklist da "www.urlblacklist.com".

Porém, o pior problema que eu encarei não foi as instalações e as vezes que tive que correr do meu trabalho às 7:30 para ir arrumar a Internet da escola arriscando perder o meu emprego, mas sim a questão de alunos usando Peer-to-Peer.

Como maior parte de vocês sabem, 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 ultima 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.

Mas 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 vai construindo ela, mas infelizmente nem sempre é possível tapar todos estes. Uma muralha do tipo whitelist, é uma muralha enorme e alta, aonde 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.

[SIZE=5]Conceito do fail2ban[/SIZE]

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 ela 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 devem-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 tem que entender que por mais que estes softwares realmente tentem circular Firewalls, mas eles não estão preparados para enfrentar um Firewall que está em modo "ofensivo", ou seja, um firewall que ataca eles de volta e tem "armadilhas" prontas para pegar eles.

As armadilhas são possíveis, pois cada um destes programas tem 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 se conecta com a página "ares.net" para baixar um arquivo chamado "cnodes.dat" e também verifica atualizações.
- O UltraSurf se conecta sempre com um IP da rede 65.49.14.0/24.
- O Tor tenta se conectar com o IP 204.124.83.21 ([url]www.conformal.com[/url]) toda vez que é ligado.

O tempo para o bloqueio temporário de cada um destes varia. O UltraSurf fica o tempo todo tentando se conectar, então podem colocar 5 minutos e ele vai bloquear até que o usuário feche. Porém, o mesmo não vai acontecer com o Tor, que tenta se conectar com a rede do site "www.conformal.com" apenas uma vez, depois ele não se conecta de novo, então um bloqueio curto pode acabar permitindo o acesso, ou seja, é necessário bloquear a Internet deste computador pelo período de 30-60 minutos e é aconselhável que seja enviado uma mensagem avisando deste 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 a 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?

[SIZE=5]Aplicação[/SIZE]

O "fail2ban" pode ser baixado em forma de código fonte na sua página ([url]http://www.fail2ban.org/wiki/index.php/Main_Page[/url]) 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, pois 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= "


Esse script, aliás, é do site "http://www.vivaolinux.com.br/artigo/Como-bloquear-o-Ultrasurf-solucao-definitiva-%28iptables-+-Fail2ban%29/", 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 se conectam 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= "


No caso do Tor Project:

iptables -A FORWARD -d 204.124.83.21 -j LOG --log-prefix "=Tor_Project= "


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 utorrent.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 "BitTorrent protocol" -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.php?passkey=" -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 "info_hash" -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 "BitTorrent" -j LOG --log-prefix "=uTorrent= "
iptables -A FORWARD -m string --algo bm --string "BitTorrent protocol" -j LOG --log-prefix "=uTorrent= "
iptables -A FORWARD -m string --algo bm --string "bittorrent-announce" -j LOG --log-prefix "=uTorrent= "
iptables -A FORWARD -m string --algo bm --string "announce.php?passkey=" -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= "
iptables -A FORWARD -m string --algo bm --string "announce" -j LOG --log-prefix "=uTorrent= "
iptables -A FORWARD -m string --algo bm --string "announce_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 vão estar 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ões, 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 as 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.

[SIZE=3]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.[/SIZE]

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 irão dizer para o 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=".

[SIZE=3]Como última etapa, é necessário criar o arquivo que tem as ações que serão feitas quando um usuário é "pego".[/SIZE]

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 adequar ele:

[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, podem seguir este tutorial e modificar o que já fora feito:
[url]http://www.vivaolinux.com.br/artigo/Como-bloquear-o-Ultrasurf-solucao-definitiva-%28iptables-+-Fail2ban%29/?pagina=3[/url]

[SIZE=5]Conclusão[/SIZE]

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.




  


2. Re: Minha Solução para Bloqueio de Peer-to-Peer e Proxies com o fail2ban

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 24/11/2013 - 21:23h

procure postar na seção de Dica
é mais adequado e vai ajudar muita gente


3. Re: Minha Solução para Bloqueio de Peer-to-Peer e Proxies com o fail2ban

Wellington Diesel
wetto

(usa Outra)

Enviado em 24/11/2013 - 22:02h

danniel-lara escreveu:

procure postar na seção de Dica
é mais adequado e vai ajudar muita gente


Obrigado, acabei de enviar, espero que seja aprovado ou então peçam para que eu corrija se há algo errado.


4. Re: Minha Solução para Bloqueio de Peer-to-Peer e Proxies com o fail2ban

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 24/11/2013 - 22:06h

wetto escreveu:

danniel-lara escreveu:

procure postar na seção de Dica
é mais adequado e vai ajudar muita gente


Obrigado, acabei de enviar, espero que seja aprovado ou então peçam para que eu corrija se há algo errado.


tranquilo , claro que vai ser aprovado






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts