Fail2ban - Bloqueio de Peer-to-Peer (Ares, uTorrent) e Proxies (UltraSurf e Tor)

Este artigo mostra a instalação de um sistema de detecção de Peer-to-Peer e Proxies através de logs do IPtables, com ações restritivas através do Fail2ban em uma rede com Blacklist.

[ Hits: 15.379 ]

Por: Wellington Diesel em 29/11/2013


Introdução



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.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Iptables + Layer7

Arno Iptables Firewall (poderoso e simples)

Criando cluster com o PFSense

Autenticação no Iptables

Shorewall, uma excelente opção para firewall Linux

  
Comentários
[1] Comentário enviado por wetto em 29/11/2013 - 03:29h

Caso o bloqueio do Ares não esteja funcionando apropriadamente, adicionem o seguinte comando no script de inicialização de seu servidor:

cat /root/ares.txt | while read line; do iptables -A FORWARD -d $line -j LOG --log-prefix "=Ares_Galaxy= "; done

E salvem esta lista de IPs INTEIRA com o nome "ares.txt" no diretório /root/:
http://pastebin.com/1n6BnsG6

O complicado é que a lista do IPtables pode acabar ficando grande demais dependendo das configurações que você já possui!

---------------------------

E sim, eu fiz essa solução APENAS porquê era praticamente impossível instalar e fazer funcionar o Layer7 ou IPP2P na minha versão 12.04 LTS do Ubuntu (tentei de tudo).

[2] Comentário enviado por px em 29/11/2013 - 05:05h

Cara muito massa essa noção de bloquear por ip, no meu iptables uso algo parecido, uso e abuso de blacklists que são atualizadas automaticamente caso alguém de fora tente acessar algo indevido!

Mas eu acho que faltou um buraco ai, deixe-me explicar...

Lido todos os métodos no seu artigo há unica coisa em comum em todos os bloqueios é o ip de destino de pacotes, que é o método para identificar o "usuário safado" que ta burlando algo... e se esse ip estivesse "espofado" com o ip de outra pessoa? esse seu sistema poderia bloquear ou prejudicar uma pessoa que nem sabe de nada que esta a acontecer!

IP-DO-SAFADO > IP-DO-DESAVISADO >> TORRENT

TORRENT > IP-DO-DESAVISADO >> IP-DO-SAFADO

Também se tivesse um proxy de ponte para as aplicações isso funcionaria? tipo..

PC-CURSO > PROXY666 >> TOR-IP

TOR-IP > PROXY666 >> PC-CURSO

Bom para evitar a clonagem de ip ou o redirecionamento de pacotes, precisaria só desativar o forward em cada máquina (isso se fosse linux :S), já o proxy não sei se da para barrar...

Bom isso foi só o que veio na cabeça agora.

[3] Comentário enviado por danniel-lara em 29/11/2013 - 08:27h

Parabéns , muito bom o Artigo

[4] Comentário enviado por wetto em 29/11/2013 - 10:10h


[2] Comentário enviado por px em 29/11/2013 - 05:05h:

Cara muito massa essa noção de bloquear por ip, no meu iptables uso algo parecido, uso e abuso de blacklists que são atualizadas automaticamente caso alguém de fora tente acessar algo indevido!

...


Realmente, se há pessoal espoofando, a solução não é fazer como eu fiz, mas sim montar uma whitelist e fazer um sistema realmente diferente. Mas, felizmente isso não é tão normal e o meu artigo foi realmente feito para redes pequenas onde é necessário fazer um sistema de blacklist pois não vai haver alguém que possa ficar o tempo todo gerenciando e monitorando a rede, detectando casos como este ou então adicionando novas portas para novos serviços que venham a ser adicionados à rede.

[5] Comentário enviado por px em 29/11/2013 - 14:08h


[4] Comentário enviado por wetto em 29/11/2013 - 10:10h:

Realmente, se há pessoal espoofando, a solução não é fazer como eu fiz, mas sim montar uma whitelist ...


Bom whitelist para ips da rede local ou para ips externos? da rede local não adiantaria já que "malandro" esta na própria rede... e de ips externos é muito inconveniente fazer isto para vários sites e/ou range de ips.

Bom acho que para ficar seguro mesmo, só tirando o cabo de rede! rsrs, ainda sim não adianta muito se for um local público :(

Não que queira tirar seu mérito pelo artigo, pelo contrário, essa solução de monitoramento ativo com uns "honeypots" é uma boa pedida em pequenas e médias redes, mas no caso, seria bom implementar algo como proxy + IDS e talvez + fail2ban para barrar (de verdade) esses trambiques!

T+

[6] Comentário enviado por phoemur em 29/11/2013 - 14:33h

Na minha rede doméstica eu uso Snort + Fail2ban em lugar de iptables + fail2ban,
mais ou menos como neste artigo:

http://blog.bibliotecaunix.org/?p=103

O legal do snort é que ele detecta o protocolo através dos pacotes e não através do IP de destino, então mesmo que a pessoa use um proxy o snort irá ver que aquele tipo de pacote é de P2P e vai barrar... Só é meio chatinho de configurar...

De qualquer forma excelente artigo... Parabéns...

[7] Comentário enviado por ederpaulopereira em 29/11/2013 - 15:17h

Parabéns pelo artigo, é o que estou passando aqui na minha rede ultimamente. Vou aplicar este seu 'tutorial'. Diga-me, qual distro você usou? Pode ser Centos 6.4 32bits? Grande abraço;
Eder

[8] Comentário enviado por wetto em 29/11/2013 - 15:45h


[7] Comentário enviado por ederpaulopereira em 29/11/2013 - 15:17h:

Parabéns pelo artigo, é o que estou passando aqui na minha rede ultimamente. Vou aplicar este seu 'tutorial'. Diga-me, qual distro você usou? Pode ser Centos 6.4 32bits? Grande abraço;
Eder


Não tenho certeza, eu utilizei o Ubuntu LTS 12.04, tive que usar essa aplicação depois de apanhar e muito para tentar instalar e configurar o Layer7 e o ipp2p.

Na verdade, há distribuições bem especificas sobre o assunto de Firewall neste estilo, inclusive contendo o Layer7 já pré-instalado e elas são muito boas para casos onde você já não possui dados no seu servidor (não fosse o NTOP e os dados que eu já havia coletado com ele, eu instalava uma distribuição de Firewall), se por acaso o tutorial não funcionar, sugiro pesquisar sobre elas e tentar ver a possibilidade de instalar uma no seu servidor.

[9] Comentário enviado por px em 30/11/2013 - 17:24h


[6] Comentário enviado por phoemur em 29/11/2013 - 14:33h:

Na minha rede doméstica eu uso Snort + Fail2ban em lugar de iptables + fail2ban,
mais ou menos como neste artigo:

http://blog.bibliotecaunix.org/?p=103

O legal do snort é que ele detecta o protocolo através dos pacotes e não através do IP de destino, então mesmo que a pessoa use um proxy o snort irá ver que aquele tipo de pacote é de P2P e vai barrar... Só é meio chatinho de configurar...

De qualquer forma excelente artigo... Parabéns...


Háa uma boa ideia! enfim, rsrs. Esse phoemur sempre com uma boa solução! dei uma lida nesse site e achei bacana, quando tiver no pc c/ linux dnv irei fazer uns testes com esse combo de Snort + fail2ban...

T+

[10] Comentário enviado por xjc em 04/12/2013 - 17:52h

Muito bacana e criativo seu post . abraços

[11] Comentário enviado por tiagolagef em 29/03/2014 - 21:20h

Gostei, criativo, o bacana e usar o que esta a mão para resolver o problema! parabéns.

[12] Comentário enviado por ranieregomes em 01/04/2014 - 16:58h

Achei legal o artigo, mas só é válido se você tiver somente um firewall rodando, porque utilizando um iptables fechando as portas todas e um squid com negação para conexão direta para endereços IP, você não teria esse problema de conectar software como clientes de torrent e um ultrasurf da vida. Mas foi muito engenhoso o modo que você criou os bloqueios, parabéns!

[13] Comentário enviado por silasmg em 12/02/2015 - 18:12h

Olá, se alguém puder ajudar, estou com um problema aqui, quando crio o arquivo jail.local ele não inicia mais o fail2ban, informando o seguinte no log:

2015-02-12 17:59:41,806 fail2ban.server : INFO Stopping all jails
2015-02-12 17:59:42,732 fail2ban.actions.action: ERROR iptables -D INPUT -p tcp -m multiport –dports ssh -j fail2ban-ssh
iptables -F fail2ban-ssh
iptables -X fail2ban-ssh returned 100
2015-02-12 17:59:42,732 fail2ban.jail : INFO Jail ‘ssh’ stopped
2015-02-12 17:59:42,733 fail2ban.server : INFO Exiting Fail2ban

Se eu colocar essa configuração dentro do jail.conf dá na mesma, antes o erro acontecia da seguinte forma:


2015-02-12 18:01:55,481 fail2ban.server : INFO Stopping all jails
2015-02-12 18:01:56,259 fail2ban.jail : INFO Jail ‘ssh’ stopped
2015-02-12 18:01:56,260 fail2ban.server : INFO Exiting Fail2ban

[14] Comentário enviado por janduy em 31/07/2017 - 16:20h

Parabéns pelo artigo Brother.

Atenciosamente,
Janduy Euclides


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts