sexta-feira, 7 de novembro de 2014

Instalando o PostgreSQL (8.x) a partir do source com suporte a LATIN1 em um RedHat/CentOS/Fedora.

Devido a algumas necessidades, sou obrigado a rodar ou PostgreSQL 8.3 ou 8.4, mas claro, algumas particularidades de empacotamento e configuração padrão me impedem de baixar uma versão dos repositórios.

*** IMPORTANTE ***
Todos os comandos abaixo devem ser rodados como “root”.

1 – Instale os pacotes básicos para a compilação do PostgreSQL.

yum install -y yum-fastestmirror bison-devel readline-devel zlib-devel openssl-devel

2 – Instale o pacote de desenvolvimento.

yum groupinstall -y 'Development Tools'

3 – Baixe os fontes da página oficial do PostgreSQL. Pode (e recomendo) usar o wget.


4 – Descompacte.

tar jxvf postgresql-8.x.x.tar.bz2

5 – Inicie o processo de compilação.

./configure ; make ; make install

6 – Entre no diretório “contrib”, compile e instale os adicionais.

cd contrib/ ; make all ; make install

7 – Copie o arquivo de inicialização do banco para o seu /etc/init.d/

cp /usr/local/src/postgresql-8.x.x/contrib/start-scripts/linux /etc/init.d/postgresql
8 – Torne o script executável.

chmod 775 /etc/init.d/postgresql

9 – Adicione o usuário.

adduser postgres

10 – Adicione a localização à variável de ambiente, assim os comandos do PostgreSQL ficarão acessíveis.

echo 'PATH=$PATH:/usr/local/pgsql/bin' > /etc/profile.d/postgresql.sh
echo 'export PATH;' >> /etc/profile.d/postgresql.sh


11 – Torne-o executável.
chmod 775 /etc/profile.d/postgresql.sh

12 – Crie um diretório “data”, na verdade o nome pode ser qualquer um, mas “data” é o mais comum.  Esta será sua “cluster” de database. No meu caso, eu crio um diretório na raiz com outro nome, mas ATENÇÃO, se você optar por outro diretório, não esqueça de alterar o caminho do “pgdata” no /etc/init.d/postgres.
mkdir /usr/local/pgsql/data

13 – Mude o proprietário da pasta.
chown -R postgres:postgres /usr/local/pgsql/data


14 – Execute o initdb script.  Isto prepara o “cluster” para o uso.
sudo -u postgres /usr/local/pgsql/bin/initdb -U postgres pgdata=/usr/local/pgsql/data/ --encoding=LATIN1 --locale=C --username=postgres -W

15 - Modifique o seu /usr/local/pgsql/data/postgresql.conf para permitir conexões externas.
Mude os parâmetros para as configurações abaixo:

Remova os '#'.
listen_addresses = '*' (isto permite “escutar” ips de de fora do “localhost).
port = 5432

16 – Altere também o seu “pg_hba.conf”, adicionando a sua range de ips, nunca se esquecendo no final da linha a flag “trust”.

17 – Adicione o script a rotina de inicialização.
chkconfig --add postgresql


18 – Inicie o PostgreSQL.
service postgresql start


Se você tiver algum problema na inicialização, verifique o “serverlog” no seu diretório “data”. Geralmente ele informa qual o problema na inicialização do banco.
Era isso!
Até a próxima!









Utilizando bases como template do PostgreSQL.

Post do meu colega Paulo Diovani, que fiz questão de "roubartilhar" ou como diria o detetive: "Se o Pica-Pau tivesse comunicado a polícia, isso nunca teria acontecido!".

Segue a postagem:

Ao criar uma nova base de dados no PostgreSQL é possível utilizar uma base existente como modelo.
Isso serve, principalmente, para permitir inicializar rapidamente uma base de dados com as tabelas e valores necessários e é muito mais rápido do que realizar um pg_dump + pg_restore — na prática, o tempo depende apenas do acesso ao disco, como uma cópia dos diretórios da base.
Eu vinha pesquisando sobre uma forma de criar snapshots da base de dados, semelhando ao que o MS SQL Server faz, para poder restaurar uma base de desenvolvimento até determinado ponto. — O motivo é que precisava realizar um procedimento repetitivo, mas a necessidade seria a mesma para testes automatizados.
A solução foi restaurar a base que eu precisava e então utilizá-la como template para criar uma nova.
CREATE database foo_01 TEMPLATE foo_template;
Cada vez que eu preciso da base em estado inicial, basta eu removê-la e criar uma nova, novamente utilizando o template.
Esta é uma solução prática e rápida o bastante para procedimentos repetitivos. Se precisar de uma solução mais robusta para database snapshots uma alternativa é utilizar o PostgreSQL’s continuous WAL archiving.
Fonte: http://dba.stackexchange.com/questions/3394/is-it-possible-to-quickly-create-restore-database-snapshots-with-postgresql

quarta-feira, 22 de outubro de 2014

Apache: Parando ataques de DoS com fail2ban.

Este post na verdade é uma continuação do post anterior.
A minha tarefa, além de testar a ferramenta ab, era também implementar um método para evitar qualquer DDoS direcionado ao Apache.

1 - Instalação:

A instalação é muito fácil:

Debian/Ubuntu Server:

apt-get install fail2ban

CentOS:

É necessário a instalação dos repositórios epel:


yum install fail2ban


2 - Edite o arquivo /etc/fail2ban/jail.conf e adicione os dados abaixo:

[http-get-dos]

enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/apache2/SEU_ARQUIVO_DE_ACCESS_LOG
# maxretry is how many GETs we can have in the findtime period before getting narky
maxretry = 300
# findtime is the time period in seconds in which we're counting "retries" (300 seconds = 5 mins)
findtime = 300
# bantime is how long we should drop incoming GET requests for a given IP for, in this case it's 5 minutes
bantime = 300
action = iptables[name=HTTP, port=http, protocol=tcp]

NÃO SE ESQUEÇA de incluir o caminho completo ao seu access.log.

3 -  Vamos precisar criar o arquivo de filtro, então crie o arquivo /etc/fail2ban/filters.d/http-get-dos.conf e adicione o conteúdo abaixo:

# Fail2Ban configuration file
#
# Author: http://www.go2linux.org
#
[Definition]

# Option: failregex
# Note: This regex will match any GET entry in your logs, so basically all valid and not valid entries are a match.
# You should set up in the jail.conf file, the maxretry and findtime carefully in order to avoid false positives.

failregex = ^<HOST> -.*\"(GET|POST).*

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

4 - Reinicie o fail2ban.

/etc/init.d/fail2ban restart

Pronto!

Se você quiser testar a eficácia do fail2ban:

ab -n 500 -c 10 http://seuservidorouwebsite/ 

O conteúdo de /var/log/fail2ban.log deverá ser igual a este:

2013-06-22 05:37:21,943 fail2ban.actions: WARNING [http-get-dos] Ban SEU_ENDEREÇO_IP
2013-06-22 05:42:22,341 fail2ban.actions: WARNING [http-get-dos] Unban SEU_ENDEREÇO_IP


Simples e funcional! ;-)

Post original: http://r3dux.org/2013/06/how-to-stop-apache-dos-attacks-with-fail2ban/

Até a próxima!







Benchmark (teste de stress) no Apache com o comando "ab".


O comando ab (Apache Benchmark) serve para realizarmos testes de stress no nosso servidor web. Achei interessante, pois serve também para simularmos alguma coisa no que diz respeito a um DDoS.


Uso: ab [opções] [http[s]://]hostname[:porta]/caminho

Exemplo que usei em uma máquina virtual:

ab -kc 1000 -t 30 http://10.x.x.x/

Explicação:

-k    Use HTTP KeepAlive feature
-c    concurrency  Number of multiple requests to make at a time
-t timelimit    Seconds to max. to spend on benchmarking

As opções são variadas, basta digitar um man ab e a diversão começa!

Era isso! :-)

Até a próxima!

quinta-feira, 9 de outubro de 2014

terça-feira, 7 de outubro de 2014

Não sabe o que um comando Linux faz?

Este website tem a função de "explicar melhor" o que cada comando e flags fazem! 
Achei bem legal a iniciativa, ainda mais para quem está iniciando. O ponto negativo fica por conta do idioma, ainda em inglês.

http://explainshell.com/

Até a próxima!

segunda-feira, 6 de outubro de 2014

Informações de hardware com dmidecode.

Esqueça o velho 'cat /proc/cpuinfo' e outras maneiras menos precisas para se conseguir uma informação mais detalhada do seu hardware.
Vamos o usar o comando dmidecode.

O que é o dmidecode?

O dmidecode é uma ferramenta de despejo da tabela SMBIOS, que por sua vez, detêm as informações pertinentes a todas as configurações de seu computador/servidor.

Como funciona?!

Digite dmidecode em seu terminal.
Rodando somente este comando, o dmidecode lhe retornará toda a tabela da SMBIOS, sem qualquer filtro. Se você quer alguma informação mais específica, por exemplo, de processador, você deverá executar esse comando:

sudo dmidecode -t 4

A flag "-t" exibe um tipo específico de informação e conforme você deve ter visto, o dmidecode lhe mostrou informações somente sobre seu processador. Nem mais e nem menos! :-)

Existe uma tabela para informações específicas, como por exemplo, memória (tipo, fabricante, qual banco ele está ocupando na placa-mãe e etc.).

       Keyword     Types
       ──────────────────────────────
       bios        0, 13
       system      1, 12, 15, 23, 32
       baseboard   2, 10, 41
       chassis     3
       processor   4
       memory      5, 6, 16, 17
       cache       7
       connector   8
       slot        9


Quer mais detalhes? Pois não!

       Type   Information
       ────────────────────────────────────────────
          0   BIOS
          1   System
          2   Baseboard
          3   Chassis
          4   Processor
          5   Memory Controller
          6   Memory Module
          7   Cache
          8   Port Connector
          9   System Slots

         10   On Board Devices
         11   OEM Strings
         12   System Configuration Options
         13   BIOS Language
         14   Group Associations
         15   System Event Log
         16   Physical Memory Array
         17   Memory Device
         18   32-bit Memory Error
         19   Memory Array Mapped Address
         20   Memory Device Mapped Address
         21   Built-in Pointing Device
         22   Portable Battery
         23   System Reset
         24   Hardware Security
         25   System Power Controls
         26   Voltage Probe
         27   Cooling Device
         28   Temperature Probe
         29   Electrical Current Probe
         30   Out-of-band Remote Access
         31   Boot Integrity Services
         32   System Boot
         33   64-bit Memory Error
         34   Management Device
         35   Management Device Component
         36   Management Device Threshold Data
         37   Memory Channel
         38   IPMI Device
         39   Power Supply
         40   Additional Information
         41   Onboard Devices Extended Information
         42   Management Controller Host Interface

Era isso!!

Até a próxima!

quarta-feira, 1 de outubro de 2014

VirtualBox - Parte 1.

Olá!

Geralmente quando nossos clientes possuem pouca estrutura, utilizamos soluções mais simplórias e rápidas. Claro que tudo tem que ser feito de maneira rápida (a hora técnica está correndo! Tic! Tac! Tic! Tac!) e simples.
Uma das soluções rápidas para virtualização é o VirtualBox. Apesar de simples, é bem direto e permite a manipulação das VMs via linha de comando.

Vamos ao que interessa!

Instalando o VirtualBox:

Ubuntu e derivados:

apt-get install virtualbox

RedHat/CentOS:

Lembre-se que nos RedHat ou CentOS, é importante antes atualizar o sistema e instalar o "Kit de desenvolvimento", que inclui compiladores, kernel headers, kernel source e demais ferramentas:

Para atualizar:

yum update

Para instalar o "Kit de Desenvolvimento":

yum groupinstall -y 'Development Tools'

Após atualizado e instalado o 'Development Tools', baixe os rpm's relacionados à sua versão de CentOS.



Após o download, digite:

yum install <pacotedovirtualbox.rpm>

Se tudo correr bem, ele irá baixar as dependências restantes e compilar um módulo para o Kernel. Sem este módulo, o VirtualBox NÃO FUNCIONA! É  importante ter em mente, que toda a vez que você atualizar o kernel de sua distro, é necessário recompilar o módulo do kernel que acompanha o VirtualBox.
Existe um script que corrige o problema e recompila o módulo de acordo com a sua versão de kernel. Basta executar o seguinte comando:

vboxsetup

Depois de todo esse trabalho, parabéns! Conseguiste instalar o VirtualBox em um RedHat/CentOS.


Criando VMs na linha de comando:

VBoxManage createvm --name Deb64 --ostype Debian_64 --register 

Explicação:
O comando acima, cria a VM com as informações de nome, tipo de sistema operacional e a flag de registro dentro do VirtualBox.

VBoxManage modifyvm Deb64 --cpus 4 --memory 1024 --vram 8

Explicação:

Este outro comando, altera as características da nova VM, como o número de cpus, memória e vram.

Habilitando o RPD(VirtualBox Remote Desktop):

Estes comandos são úteis quando se quer ter acesso visual à nova VM via linha de comando. Use o ssh conforme citei neste artigo!

VBoxManage modifyvm addie_vm --vrdp on
 

VBoxManage modifyvm addie_vm --vrdpport 3390 

Instalando e utilizando o RDesktop:

Debian/Ubuntu:

apt-get install rdesktop

RedHat/CentOS:

yum -y install rdesktop

Após instalado, o seu uso é simples:

rdesktop -u <usuário> -p <senha> <IP:Porta>

Iniciando uma máquina virtual:

VBoxHeadless -s, -startvm, --startvm <nomedavm|uuid> &

ou

VBoxManage startvm <nomedavm|uuid>


Parando uma máquina virtual:

VBoxManage controlvm <nomedavm|uuid> poweroff


Por enquanto era isso! :-)

Até a parte II!






Quando isto era o topo da tecnologia nos anos 90.


Saudosistas vão adorar!

Até a próxima!


quinta-feira, 25 de setembro de 2014

Base RPM corrompida? Tem solução!

Hoje me deparei com um problema em um servidor rodando CentOS. Vi que por alguma razão, a base de pacotes rpm estava corrompida. Nada funcionava, nem o comando rpm ou yum.
Depois de uma breve pesquisada, achei a resposta.

1 - Mate todo e qualquer processo ligado ao yum ou rpm.

kill -9 <pid>

Ou simplesmente

killall -9 <yum/rpm>

2 - Vá até o diretório /var/lib/ e faça o backup de sua antiga base RPM:

tar -cvzf rpm.tar.gz rpm

3 - Entre no diretório "rpm" e delete os arquivos de base corrompidos:

cd /var/lib/rpm

rm -f __db*

4 - Agora, faça o rebuild da base:

rpm --rebuilddb -vv

5 - Teste!

yum update


#BeHappy! ;)

Até a próxima!

 

BASH - Falha de segurança!


Atualizem seus servidores!
Urgente! :-/

"An attacker can provide specially-crafted environment variables containing arbitrary commands that will be executed on vulnerable systems under certain conditions."

Slackware:
http://www.slackware.com/security/viewer.php?l=slackware-security&y=2014&m=slackware-security.522193

CentOS:
http://lwn.net/Alerts/CentOS/

RedHat:
https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/

Ubuntu/Ubuntu Server:
http://www.ubuntu.com/usn/usn-2362-1/

quinta-feira, 18 de setembro de 2014

Dia da liberdade de software - 2014.


 Repassando!

http://wiki.softwarelivre-vs.org/DiaDaLiberdadeDeSoftware2014#Chamada_de_palestrantes

Data, Hora e Local
  • Data: 04 de outubro de 2014 (sábado)
  • Hora: 13h às 17h
  • Local: Campus II da Feevale, Prédio Arenito - Novo Hamburgo / RS (Como chegar? - Atenção: localize o mapa do Campus II na página que abrir)
  • Público Alvo: usuários de computador em geral, educadores, estudantes e profissionais de TI que queiram conhecer o Software Livre e/ou participar da comunidade de Software Livre da região. Não é necessário ter experiência com Software Livre para participar.
  • Investimento: evento gratuito
#Fica a dica! :)

Até a próxima!

Utilizando md5sum para verificar a integridade de um arquivo.

Gostaria de compartilhar a dica dessa ferramenta, a qual eu utilizo muito, desde os dias de internet discada. Me lembro de muitas horas de linha ocupada,  utilizando o wget -c e rezando para que tudo ocorresse bem. 
Depois que uma .iso de uma instalação era finalmente baixada,  utilizávamos uma ferramenta chamada md5sum.

O que é o md5sum e o que ele faz?

O md5sum é um programa de código livre que permite verificar a integridade dos arquivos transmitidos por rede, garantindo que eles não tenham sido corrompidos em sua transferência.

O uso do md5sum é muito simples.

md5sum <arquivo>

Quando este comando é executado, ele gera um enorme número hexadecimal, que deve ser comparado com o arquivo .md5.txt que é fornecido na origem, isto é, junto com a imagem ou binário de instalação.
Vamos supor, que você baixou a iso mais atual de sua distribuição favorita do Linux, porém, está com dúvidas se a imagem está íntegra. Siga os passos abaixo:
  1. Vá até o site ou FTP de onde você baixou a imagem de instalação de sua distribuição Linux.
  2. Baixe um arquivo de texto que se encontra junto das imagens, geralmente ele tem o nome de "md5sum.txt". Este arquivo armazena os hashs (números hexadecimais gerados na origem para a verificação de integridade) de todos os arquivos contidos no diretório de download.
  3. Após o download, mova o arquivo para o mesmo diretório onde se encontra a imagem de instalação.
  4. Feito tudo isso, execute o comando: md5sum -c md5sum.txt

Se tudo ocorrer bem, a saída deve ser semelhante a esta:

marcio@marcio:~/Downloads/ISO$ md5sum -c CentOS-6.5-x86_64-minimal.md5.txt
CentOS-6.5-x86_64-minimal.iso: SUCESSO
marcio@marcio:~/Downloads/ISO$

Se o arquivo estiver corrompido, ele deverá apresentar algo como isso:

marcio@marcio:~/Downloads/ISO$ md5sum -c CentOS-6.5-x86_64-minimal.md5.txt
CentOS-6.5-x86_64-minimal.iso: FALHOU
marcio@marcio:~/Downloads/ISO$

Explicação:

A flag "-c" ou "--check"(opcional) lê o md5sum do arquivo e faz a checkup em seguida.

#Fica a dica! :)

Até a próxima!



quarta-feira, 17 de setembro de 2014

Executando aplicativos remotos do "X" via SSH.


Sempre em meu trabalho, faço uso do TeamViewer no Linux (Argh! Sim, ele usa o Wine!), mas em alguns casos, ele travava e causava diversos transtornos.
Existe uma "alternativa", caso você queira ter acesso a algum aplicativo específico do X sem precisar usar o TV.
A resposta é o fabuloso SSH!!

Comando:

ssh -XC usuário@<ip> -p<porta>

Explicação:

A flag "-X" habilita o encaminhamento do X11.  Existem outras utilidades para a mesma, mas aconselho a ler o manual.
A flag "C" habilita a compactação dos dados na conexão, que ajuda nesses casos, principalmente quando seu cliente tem uma conexão que mal chega a 2mbps.

O curioso é que as aplicações que rodam em Qt são mais lentas, em comparação às do Gnome.

Bom, essa era a dica do dia! :-)

Até a próxima!