Instalando Fail2ban no Debian Wheezy!
Evitando ataques bruteforce de SSH utilizando o Fail2ban
Atualmente ataques bruteforce (força bruta, aquele em que o atacante tenta n possibilidades de usuário/senha por segundo até conseguir quebrar a senha e entrar no sistema) estão muito mais frequentes do que nós imaginamos, basta uma leitura rápida (like debian) no arquivo auth.log para visualizarmos a quantidade de tentativas com milhares de usuários e senhas por dia.
O que cabe a um administrador de redes é prevenir o sistema contra estas ações maliciosas que muitos robôs e máquinas zumbis são programadas para fazer. Para evitar ataques deste tipo, eu utilizo algumas acl’s na borda e o Fail2Ban no firewall que analisa o tráfego e dependendo da análise ele bloqueia o IP ou range de ip por tempo determinado inserindo regras no firewall. O bom é que não é apenas no protocolo SSH, você pode configurar para conexões SMTP, TELNET, FTP e etc…
O Fail2Ban na verdade é uma estrutura de prevenção de intrusão, escrito na linguagem de programação Python que filtra os logs de entrada de logins no sistema e a partir desta análise insere regras no firewall para bloqueio destes acessos.
Em distribuições Linux Debian e like Debian você pode instalar via apt-get com o comando:
# apt-get install fail2ban
Ele irá instalar automaticamente. Após instalar você deve configurar o fail2ban editando o arquivo:
# vim /etc/fail2ban/jail.conf
Algumas variáveis importantes deste arquivo são estas:
- “ignoreip” se encontram os endereços de IPs que não vão ser bloqueados pelo programa.
- “bantime” se encontra o tempo em que o IP ficará banido/bloqueado pelo programa (o tempo é contado em segundos).
- “maxretry” temos o número máximo em que o IP pode tentar logar-se no seu servidor até ser bloqueado (recomendo que ponha no máximo 3).
- “logpath” refere-se ao arquivo de log onde são checadas as tentativas frustradas de login.
Recomendo que antes de editar o mesmo, você faça um backup do arquivo evitando que seja feita qualquer equívoco no fileconf do fail2ban:
# cp -ar /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.ori
Feito o backup, vamos implementar algumas configurações básicas editando o arquivo
# vim /etc/fail2ban/jail.conf
Importante inserir alguns hosts ou range de hosts que não serão bloqueados, afinal ninguém bloqueia a si mesmo. Então na linha ignoreip coloque o ip de localhost e o range da sua rede a qual você não gostaria de bloquear, deixe separados por um espaço:
ignoreip = 127.0.0.1/8 192.168.0.0/16
Após isso, sete a variável bantime para o tempo que você deseja que o ip fique bloqueado no firewall. Este tempo é em segundo, eu geralmente configuro um ban para 10 minutos. Se você quiser banir o IP ou range permanentemente, basta atribuir a esta variável um valor negativo.
bantime = 600
Configure o tempo de varredura em segundos passados em que o Fail2Ban procura por IP’s abusivos ao sistema.
findtime = 600
E por final configure o número máximo de entradas frustradas que o atacante tentou acessar seu sistema errando login e senha.
maxretry = 3
Pronto, salve o arquivo e reinicie o Fail2ban:
# /etc/init.d/fail2ban restart
O programa está configurado e poderá ver ver os IPs bloqueados em /var/log/fail2ban.log.
Quando um atacante for bloqueado, ao tentar acessar seu servidor ele irá exibir a mensagem de conexão recusada para o atacante, algo similar a mensagem abaixo:
ssh: connect to host 10.10.58.5 port 22: Connection refused
No iptables, você visualiza as regras inseridas através da sintaxe:
iptables -nL fail2ban-ssh
Que deverá listar algo assim:
root@takakaos:/etc/fail2ban# iptables -nL fail2ban-ssh Chain fail2ban-ssh (1 references) target prot opt source destination REJECT all -- 10.10.58.5 0.0.0.0/0 reject-with icmp-port-unreachable RETURN all -- 0.0.0.0/0 0.0.0.0/0
Para remover basta inserir o comando abaixo com o numero da regra (chain number) que você deseja remover. No meu caso seria remover o bloqueio para a primeira regra, que contém o IP 10.10.58.5
iptables -D fail2ban-ssh 1
Ou através da remoção do ip bloqueado (notar se na exibição do bloqueio através do iptables, a chain está dropando -j DROP ou está rejeitando -j REJECT)
iptables -D fail2ban-ssh -s 10.10.58.5 -j REJECT
Qualquer dúvida você pode acessar o manual (in english) na url abaixo.
http://www.fail2ban.org/wiki/index.php/MANUAL_0_8
Nota: Versão utilizada: 0.8.9-1
Conectando remotamente no MYSQL usando o Shell!
Conectando remotamente no MYSQL usando o Shell!
Quando precisar acessar um Banco Mysql remotamente via shell, utilizar a sintaxe abaixo:
mysql -u username -p -P n_port -h ip_host database_name
Exemplo:
mysql -u jacques.beijer -p -P 73307 -h 201.201.201.745 cafeina_database
Lembrando que você precisa definir permissão de acesso (grant) para o host que irá acessar, essa permissão tem que ser feita no host que hospeda o banco de dados. Esta permissão (tem um post meu só sobre permissões) pode ser definida com o comando abaixo:
root@takakaos:~# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. mysql> grant all privileges on *.* to usuario@ip_host_remoto IDENTIFIED BY 'senha_xpto'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye root@takakaos:~#
Para conectar usando tunel, usar a sequência abaixo:
ssh -L 73307:mysql.host.com:3306 user@host.com mysql -u user -p -P 73307 -h 127.0.0.1 database
Conectar remotamente no Mysql do Zimbra!
Conectando remotamente no Mysql do Zimbra!
Hoje ao tentar conectar no banco Mysql do Zimbra usando o Mysql Query Browser a partir da minha máquina, vi que não estava conseguindo por estar com acesso negado e ao ir fazer a liberação notei que as configurações do mysql não estavam como default.
Para resolver este problema podemos agir da seguinte forma.
Logar na conta do zimbra:
su zimbra
Em seguida conectar no banco com usuário padrão do zimbra:
mysql -u zimbra
Ele irá logar normalmente. Após isto, vamos conceder a permisssão no Mysql:
grant all privileges on *.* to `usuario`@`ip_remoto` IDENTIFIED BY "senha_desejada" WITH GRANT OPTION; flush privileges; exit
Substitua o termo usuario para o login que você deseja utilizar, bem como senha_desejada para a senha que você irá utilizar e o ip_remoto para o ip do computador a qual você pretende utilizar para acessar o banco.
Pronto, agora temos um usuários para acessar o banco do Zimbra, lembrando que você pode inserir ‘root’@’%’ para dar acesso root a partir de qualquer host da rede. Lembrando que o Mysql do Zimbra Utiliza a porta 7306.
Agora precisamos abrir o Mysql para aceitar conexões não apenas localmente, mas de outros hosts também. Para fazer esta alteração, temos que editar o arquivo /opt/zimbra/conf/my.cnf e comentar a opção bind-address = localhost e salvar o arquivo:
vim /opt/zimbra/conf/my.cnf #bind-address = localhost
Após esta alteração, reinicie o mta com os comandos abaixo e seu acesso estará permitido.
zmcontrol stop zmcontrol start
Pronto.
[]’s
Unix 32 ou 64 bits?
Verificando se o Unix é 32 ou 64 bits!!!
Recentemente fiz um post sobre como checar se o Linux é 32 ou 64 bits. E logo em seguida veio um comentário sobre como verificar se o Unix é 32 ou 64 bits…
Bom, a informação para o Linux, não funciona para o Unix, essas pequenas diferenças dos primos BaSH e SH são complicadas algumas vezes mas vamos lá.
No AIX podemos executar o comando abaixo:
bootinfo -y
No HP-UX é:
getconf KERNEL_BITS
Ambos os comandos acima apenas consultam variáveis, logo podem ser usados sem problemas de alteração no sistema.
Teclas de Atalho – Shell Bash (Bourne Again Shell)
Aumentando a produtividade utilizando teclas de atalho no Shell Bash!!!
No cotidiano de um administrador de Sistemas Linux via Shell Bash a ausência do mouse nunca me incomodou, exceto quando estou escrevendo uma linha de script razoavelmente grande e desejo ir para o meio desse script em pleno bash, sem estar em um arquivo com algum editor. Putz. Isso realmente é algo que o Linux peca um pouco… Mas comparado com tudo que ele faz, esse problema passa até despercebido.
Mas estamos falando de Linux, um sistema que foi projetado pensando em cada pequeno detalhe. Por esta razão, as teclas de atalho do shell bash resolvem vários problemas, sem falar que linhas de código maiores que duas linhas, devem ser escritas em um editor VIM.
Por esta razão, estou colocando aqui algumas das principais teclas de atalho do Bash.
Teclas de atalho: Descrição
As teclas de atalho abaixo funcionam quando as teclas default são utilizadas.
Tab ⇆ : Autocompleta o comando a partir da posição do cursor. Ctrl+a : Move o cursor para o inicio da linha, equivalente a tecla Home. Ctrl+b : Move o cursor um caractere atrás. Ctrl+c : Envia o sinal SIGINT para tarefa atual, então esta é cancelada e fechada. Ctrl+d : Envia o marcador EOF, este fecha a sessão atual do shell, igual ao exit. Ctrl+d : Deleta o caracter corrente, se existirem caracteres digitados. Ctrl+e : Move o cursor para o final da linha, equivalente a tecla End. Ctrl+f : Move o cursos para o caracter seguinte. Ctrl+g : Aborta a pesquisa e restaura a linha original. Ctrl+h : Deleta o caractere anterior, equivalente a tecla Backspace. Ctrl+i : Equivalente a tecla Tab. Ctrl+j : Equivalente a tecla Enter. Ctrl+k : Limpa o conteúdo da linha que está após o cursor e copia este conteúdo para área de memoria. Ctrl+l : Limpa o conteudo da tela, equivalente ao comando clear. Ctrl+n : Recupera o próximo comando (equivalente a tecla ↓). Ctrl+o : Executa o comando encontrato do histórico. Ctrl+p : Recupera o comando anterior (equivalente a tecla ↑). Ctrl+q : Adiciona o próximo caractere digitado à linha textualmente. Ctrl+r : Executa o ultimo comando digitado. Ctrl+s : Volta ao próximo comando digitado recentemente. Ctrl+t : Avançar os dois últimos caracteres. Ctrl+u : Limpa o conteúdo da linha anterior ao cursor e copia o conteúdo para área de memoria. Ctrl+v : Adiciona o próximo carácter à linha textualmente. Ctrl+w : Apaga a palavra depois do cursor e copia para área de memória. Ctrl+y : Comando colar. Ctrl+x Ctrl+e : Edita a linha atual no programa $EDITOR, ou vi. Ctrl+x Ctrl+r : Ler o conteúdo do arquivo inputrc, e incorporar todas as ligações ou atribuições de variáveis encontradas lá. Ctrl+x Ctrl+u : Desfazer, separado por linha. Ctrl+x Ctrl+v : Exibe informações sobre a versão da instancia corrente do bash. Ctrl+x Ctrl+x : Alterar a posição do cursor para sua antiga posição. (C-x, porque x tem uma forma de passagem). Ctrl+z : Envia o sinal para SIGTSTP a tarefa atual, para suspende-lo. Para executá-lo em segundo plano pode-se entrar no bg. Para trazer de volta através de fundo ou suspensão fg ['nome do processo ou identificação de trabalho "] (primeiro plano) pode ser emitido. Ctrl+_ : Desfazer, separado por linha. Alt+b : move o cursor para palavra anterior. Alt+c : Capitaliza o caracter sob o cursor e move para o final da palavra. Alt+d : Corta a palavra depois do cursor. Alt+f : move o cursor para próxima palavra. Alt+l : Transforma para caixa baixa todo caractere a partir do cursor em toda palavra. Alt+r : Cancela as alterações e colocar de volta a linha de como era na história. Alt+u : Transforma para caixa alta todo caractere a partir do cursor em toda palavra. Alt+. : Insira o último argumento para o comando anterior (a última palavra da entrada história anterior).
[]’s
Entenda o dpkg list!!!
Como interpretar o status do dpkg –list?
O DPKG (Debian package) é um gerenciador de pacotes para o Debian. Com o dpkg, você pode instalar, remover e gerenciar pacotes no seu sistema entre outras coisas. Também é possível ver o status de vários pacotes, como:
- De pacotes que estão instalados
- De pacotes que foram removidos
- Se arquivos de configuração estão presentes
- Se está marcado para remoção
Exemplo:
root@takakaos:~# dpkg --list openvpn ||Desired=Unknown/Install/Remove/Purge/Hold | |Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend || Err?=(none)/Reinst-required (Status,Err: uppercase=bad) || Nome Versão Descrição ============================================================ ii openvpn 2.1.3-2+squeeze1 virtual private network daemon
Status de cada pacote é pode ser representado por três caracteres xxx, sendo que geralmente é representado por apenas dois caracteres, a ausência de um terceiro caractere significa que não há erro com o pacote.
O primeiro caractere significa o estado desejado, como nós (ou algum usuário) desejamos que o pacote esteja.
u: Desconhecido (um estado desconhecido)
i: Install (marcado para instalação)
r: Remove (marcado para remoção)
p: Purge (marcado para purgar)
h: Segure (Hold)
Segundo caractere: O segundo caractere significa o estado atual, se ele está instalado ou não. Os valores são possíveis
n: Not – O pacote não está instalado
i: Install – O pacote está instalado com êxito
C: CFG-Files – Os arquivos de configuração estão presentes
u: Unpacked – O pacote é descompactado
f: Failed-cfg – Falha ao remover arquivos de configuração
h: Half-install – O pacote está parcialmente instalado
W: trig-Await
t: Trig-pend
Terceiro caractere: Isto corresponde ao estado de erro. Só pode ter um valor possível:
R: reinst-required – O pacote deve ser instalado.
Agora você pode facilmente interpretar o que ii , pn e rc correspondem.
No nosso caso o Openvpn está marcado como ‘ii’, o que significa dizer que ele está instalado com êxito.
Os pacotes com o estado rc não são completamente removidos do sistema, os arquivos de configuração ainda estão presentes.
Se você tem um monte de pacotes de rc que você precisa para limpar, como root, digite:
dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge
Mas só faça isso se você tiver certeza e realmente for necessário.
Segue abaixo um quadro comparativo resumido entre o dpkg e o rpm.