Arquivos da categoria: Tutorial

Analisando o log do fail2ban

Firewall configuração com o fail2ban

O fail2ban é uma ferramenta escrita em python que analisa os arquivos de log dos seu sistema e automaticamente cria regras de bloqueio no iptables para ips que estejam realizando alguma atividade suspeita. Por exemplo, em casos de muitas tentativas de acesso pelo ssh inválidas, o fail2ban identifica estas tentativas com erro no log do sistema ( /var/log/syslog ) e cria uma regra no iptables bloqueando este ip por alguns minutos.

Estes bloqueios sao registrados em seu arquivo de log /var/log/fail2ban.log , e tem um conteúdo no padrão abaixo:

2015-05-06 09:58:46,692 fail2ban.actions: WARNING [ssh] Unban 115.239.248.69
2015-05-06 10:07:00,233 fail2ban.actions: WARNING [ssh] Unban 58.218.204.241
2015-05-06 10:12:42,600 fail2ban.actions: WARNING [ssh] Ban 222.186.21.236
2015-05-06 10:16:29,843 fail2ban.actions: WARNING [ssh] Ban 115.239.248.69
2015-05-06 10:21:09,140 fail2ban.actions: WARNING [ssh] Unban 222.89.166.12

Analizando por colunas:

  1. Data do evento
  2. Hora do evento
  3. Origem
  4. Nível de alerta
  5. Tipo do serviço
  6. Ação ( Banido ou liberado )
  7. IP de origem
Análises:
1 – Quantidades de bloqueios por dia:
   awk ‘/2015-05-05.*Ban.*/{print $7}’ /var/log/fail2ban.log | wc -l
     Neste comando filtramos apenas as linhas com a data que desejamos e imprimimos a coluna 7 que contem os ips ( neste comando poderia ser qualquer uma ) e passamos o resultado para o comando wc que irá contar as linhas resultantes.
2 –  Quantidade de tentativas por cada ip:
   awk ‘/2015-05-05.*Ban.*/{print $7}’ /var/log/fail2ban.log | sort | uniq -c | sort
 Neste caso utilizamos o inicio do comando anterior removendo o filtro por data ( cada arquivos de log contem informações de aproximadamente 3 dias ) em seguida passamos o resultado para o comando sort que ira ordenar o resultado que é passado para o comando uniq com o parâmetro -c que diz que ele deve remover as linhas repetidas e informa a quantidade de cada registro único encontrado, por fim passamos o resultado novamente para o comando sort para facilitar a leitura e identificar rapidamente os ips “insistentes”.
Caso deseje ler mas sobre ko fail2ban ou ate mesmo sobre o iptables, deixe um comentário com seu email que eu irei criar um post sobre o assunto solicitado e te aviso por email quando estiver pronto.
Obrigado por visitar o blog. 😀

Ordenamento por Data no DataTables

Logo do DataTables plugin jQuery

O DataTables é hoje uma dos plugin jQuery mas utilizado por resolver ordenamento e paginação de forma automática. Mas em qualquer ferramenta que tente fazer ordenamento sem reflection, ocorre um problema que é a identificação automática do tipo de dados da coluna ou lista ordenada.
Isto ser torna um problema no seguinte caso:

  • 01/02/2015
  • 02/01/2015
  • 03/12/2014
Na lista acima as datas estão ordenadas como “string”.
Por padrão, o plugin do dataTables reconhece automáticamente os tipos “string”, “numeric”, e, “date” , mas todos em formato americano.

Para burlar este problema, é possível criar um tipo de dado extendendo a api do jquery (Clique em Result para ver o resultado ):

Executando scripts Groovy no java

Logo Groovy

Logo Groovy

Existem situações onde precisamos montar lógica em tempo de execução, o java tem recursos muito bons para trabalhar com reflection, mas quando não é suficiente sentimos falta do bom JavaScript.
Para não precisar recorrer a bibliotecas de execução de JavaScript podemos utilizar o Groovy.

Usando log com Java

System.out.println(e.getMessage());
Este é talves, o maior motivo para querer-mos utilizar uma ferramenta para gestão dos processos de log.
Enquanto estamos desenvolvendo, é comum o uso do sysout, para registro e ate “depuração” do código, o problema começa quando o sistema vai para a produção e ocorrem erros misteriosos e o usuario nunca sabe realmente informar o que aconteceu.

O log4j propõe resolver este problema, não apenas registrando as mensagens em arquivos para encapsulando todo o processo que envolve os registros de log, como formatação das saidas, inclusão de data e hora, backup do log e outros.

Para utilização desta API, basta fazer o download do arquivo .jar e adiciona-lo ao buildpath da aplicação. 
 
No caso de uma aplicação web, basta colar o arquivo na pasta “lib”  do projeto.

Na primeira linha, foi usada uma configuração básica 
Na segunda linha iniciamos a classe que registra o log.
Esta configuração não resolve muita coisa porque apenas registra no console as saidas informadas:

0 [localhost-startStop-1] INFO com.edgardleal.ClassTest  – Sistema iniciado
500 [localhost-startStop-1] WARN
com.edgardleal.ClassTest  – Mensagem de alerta
500 [localhost-startStop-1] ERROR com.edgardleal.ClassTest  – Log de erro

A primeira coluna indica o tempo decorrido deste a inicialização da classe Logger
2º Thread que esta sendo executada no momento
3º Nível do log
4º Classe que executou o log
5º Mensagem informada

Para que tenha-mos um log realmente útil precisaremos criar um arquivo de configurações para definirmos nossas preferencias e termos um resultado como o do exemplo abaixo:

INFO localhost-startStop-1 15:33:42.017 com.edgardleal.ClassTest – Sistema iniciado
WARN localhost-startStop-1 15:33:42.517 com.edgardleal.ClassTest – Mensagem de alerta
ERROR localhost-startStop-1 15:33:42.517 com.edgardleal.ClassTest – Log de erro

Crie um arquivo com o nome “log.properties” com o seguinte coneudo:


1º Nome o layout de configuração
2º Tipo de layout utilizado ( o arquivo continua crescendo )
3º Formatação utilizada, neste caso, utilizaremos o padrão informado abaixo
4º Nome do arquivo de log
5º Mascara utilizada para gerar o resultado
6º Tamanho máximo do arquivo de log
7º Número máximo de backups mantidos
 
E alteramos o código anterior para que fique da seguinte forma:

  

Na primeira linha do código, iniciamos a configuração global do log com o arquivo “log.properties”

Veja a documentação completa

Desenvolvimento “Ágil” com delphi

As pessoas me perguntam porque que eu programo em delphi, a resposta esta no vídeo abaixo.
É claro que existem muitas outras ferramentas que auxiliam no desenvolvimento rápido de soluções diversas em TI, mas esta ainda é a única que conseguiu mesclar agilidade e flexibilidade para qualquer que seja o tipo de alteração.
OBS: Devido as novas políticas da atual responsável pelo desenvolvimento e manutenção do delphi a embarcadero, estou migrando todas as minhas aplicações para o lazarus com o freepascal.

Depurando seu código no delphi

Delphi borland Depuração debugar encontrar falhas erros no código

Uma das maiores dificuldades para quem esta começando é encontrar erros de tempo de execução, erros que passam pelo compilador. Neste vídeo eu vou mostrar como depurar o seu código. Trata-se de executar o programa linha apos linhas, podendo ainda examinar e se for o caso, ate alterar valores das variáveis utilizada para que fique fácil descobrir em que ponto exatamente o seu programa se comportou de forma inesperada.