Arquivos da categoria: Shell Script

Vim programatico

Vim logo

Logo do vim

É possível utilizar o Vim de forma programática para realizar grandes tarefas de forma automatizada. Uma situação onde este recurso pode ser muito útil é na conversão do charset de arquivos sem perder os caracteres originais.

-S = indica o arquivo com o script

Exemplo de script:

Um exemplo de utilização deste recurso seria modificar o charset de todos os arquivos .java de uma pasta:
O comando acima quando utilizado tendo na mesma pasta um arquivo de nome script.vim com o conteúdo de script mostrado acima, localiza dos os arquivos com a extensão .java contidos na pasta atual,  e para cada arquivo encontrado ele abre o arquivo utilizando o script previamente criado, que faz com que modifica o charset e feche o arquivo em seguida dando continuidade a busca.

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

Script para implementação de “lixeira” no linux ( terminal )

Quando se utiliza o terminal o linux, pode acontecer alguns desastres, como por exemplo o uso do comando rm que remove o arquivo informado permanentemente. Por isso criei o script abaixo que move o arquivo ou pasta informado para uma pasta temporária, e so remove permanentemente apos 30 dias.

 Para disponibilizar o comando em qualquer local do terminal, crie o arquivo com o nome “del.sh”, dê permissão de execução com o comando “chmod +x del.sh” e crie um link dentro da pasta “/usr/local/bin” com o seguinte comando: “ln -s /home/pasta/onde/esta/o/arquivo/del.sh del”
Apos seguir todos estes passos, você ja poderá utilizar o comando:
del arquivo.txt

Executar comando em segundo plano

Existem situações onde precisamos iniciar um processo manualmente em segundo plano, como por exemplo, inicializar um servidor web. O problema é que o processo fica preso na tela do console nos impossibilitando de utilizar a mesma sessão, e o pior: quando o acesso é remoto ( ssh ) , e você não pode fechar o terminal para não encerrar o processo.
Uma das formas de resolver este problema é usando o “&” ao fim do comando (ainda não resolve para ssh)

edgard$ sleep 3&
[1] 16129

Sera exibido na tela o spid do processo e o console fica imediatamente livre para digitação, e após 3 segundos é impresso na tela a informação de que o processo foi finalizado.

[1]+  Exit 127                $ sleep 2

Outro problema é com o uso do acesso remoto (ssh) que quando fechamos a aplicação ( se for windows o put por exemplo) , processo é finalizado. Para resolver este problema, utilizaremos o aplicativo nohup.
Ex.:

nohup sleep 3&

Além de executar o processo em segundo plano, o nohup envia toda a saida (stdout) para o arquivo nohup.out que estará na pasta corrente.