PostgreSQL 9.0 no FreeBSD 9

Gostaria de compartilhar algumas de suas soluções para determinados problemas? Dicas ou truques? Postem aqui.

PostgreSQL 9.0 no FreeBSD 9

Mensagempor gugabsd » 21/Jun/2012 13:45

Vamos lá...

Esse é meu primeiro tutor para o fórum, na verdade não é meu, mas é uma tradução do original:

https://www.wunki.org/posts/2011-05-07- ... ql-90.html

Chega de papo e vamos ao que interessa !

The Power to Server! FreeBSD + PostgreSQL 9.0

Que tal ter o banco de dados Postgresql 9.0 na melhor plataforma disponivel ? Então, deixe eu lhe ajudar com isso. Este guia vai te mostrar como instalar um servidor PostgreSQL 9.0 que pode ser conectado a partir de outros hosts através de uma conexão segura SSL.

Instalação:

Vamos iniciar a instalação do Postgresql a partir dos fontes disponives na arvore de ports do FreeBSD:
Código: Selecionar todos
cd /usr/ports/databases/postgresql90-server
make install clean

A única alteração da configuração padrão que eu fiz foi ativar a opção optimized CFLAGS e para configurar-mos a inicialização do PostgreSQL, vamos adicionar a linha abaixo no seu /etc/rc.conf:
Código: Selecionar todos
postgresql_enable="YES"

No comando abaixo, iremos inicializar a base de dados do Postgresql:
Código: Selecionar todos
/usr/local/etc/rc.d/postgresql initdb

Agora vamos inicia-lo !
Código: Selecionar todos
/usr/local/etc/rc.d/postgresql start


Vamos agora trabalhar com o servidor PostgreSQL, para isso, vamos criar uma base de dados para checar se esta tudo ok. Para fazer isso, primeiramente precisamos mudar nosso usuário para pgsql para administrar o PostgreSQL.
Com isso, vamos adicionar um usuário no PostgreSAL para acessar a base de dados.
Código: Selecionar todos
su pgsql
createuser -P pg_teste

Diga não ao ser perguntado se você deseja tornar o usuário um superusuário, permita a criação de bancos de dados ou permita a criação de novos papéis. Em seguida, vamos criar um banco de dados Unicode que este usuário vai ter acesso:
Código: Selecionar todos
/usr/local/bin/createdb db_teste -O pg_teste --encoding=UNICODE

Se você não receber nenhuma mensagem de erro, tudo correu bem. Não exclua o banco de dados ainda, vamos usar este para testar a conectividade remota que estamos para configurar.

Acesso Remoto

Agora precisamos que o servidor PostgreSQL escute em uma porta no ip público, além do endereço local (localhost), para isso, vamos adicionar a seguinte linha no arquivo /usr/local/pgsql/data/postgresql.conf para permitir acesso remoto:
Código: Selecionar todos
listen_addresses = 'localhost, 123.45.67.89'

Reinicie o PostgreSQL para aplicar esta configuração, você pode encontrar o seu endereço de ip visualizando a saída do comando ifconfig.

Agora precisamos alterar o método de autenticação para usuários remotos, para isso, vamos editar o arquivo /usr/local/pgqsl/data/pg_hba.conf. As configurações abaixo são um padrão do PostgreSQL para acesso:
Código: Selecionar todos
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128   


O acesso remoto pode ser ativado alterando a configuração de IPv4. As entradas atuais no arquivo permitem a conexão com todos os bancos, para todos os usuários e para conexões locais usando o metodo de autenticação "trust". "Trust" significa que todos os usuários podem se conectar ao servidor também estão autorizados a se conectar ao banco de dados. Queremos que os usuários possam conectar-se com um nome de usuário e senha para o banco de dados. Portanto, vamos mudar a autenticação para IPv4 para o seguinte:
Código: Selecionar todos
host    all             all             0.0.0.0/0               md5


Desta forma, todos podem se conectar ao servidor se fornecer um usuário e senha corretamente. Reinicie o servidor para que as alterações tenham efeito. Antes de tentar se conectar ao servidor, devemos abrir a porta do nosso firewall. Adicione as seguintes duas regras para o seu script de firewall, se estiver usando IPFW, altere o arquivo /usr/local/etc/ipfw.rules:
Código: Selecionar todos
# open port for postgresql (5432)
$IPF 130 allow tcp from any to any 5432 in
$IPF 140 allow tcp from any to any 5432 out


Aplique as alterações rodando o comando sh /usr/etc/local/ipwf.rules. Agora você pode tentar se conectar ao banco de dados remoto, digitando na sua console local:
Código: Selecionar todos
psql -U pg_test -d db_test -h 192.168.99.67


Altere "192.168.99.67" pelo endereço IP do seu servidor. Se você seguiu tudo conforme o descrito acima, você deve ser capaz de se conectar ao servidor. Se você não conseguir se conectar e também não receber quaisquer erros, verifique suas regras de firewall.

Por que não está funcionando?

Para fins de depuração, você pode ativar a saída que nos é dado pelo PostgreSQL. Altere a seguinte linha no /usr/local/pgsql/data/postgresql.conf:
Código: Selecionar todos
silent_mode = off


Reinicie o servidor com /usr/local/etc/rc.d/postgresql restart para que as alterações tenham efeito.


Você agora tem uma PostgreSQL que está configurado para acesso remoto, mas a configuração atual não é segura o suficiente. Todo mundo é capaz de se conectar ao servidor e toda a comunicação que é enviada não é criptografada. No item seguinte, vamos torná-la mais segura usando SSL para criptografar e também limitar aqueles que podem se conectar ao PostgreSQL.

Medidas de segurança

Agora queremos que a nossa comunicação com o PostgreSQL possa ser criptografada. O PostgreSQL utiliza o pacote OpenSSL para fazer isso. Vamos começar instalando a partir de /usr/ports/security/openssl. Use a configuração padrão. Como root, execute os seguintes comandos:
Código: Selecionar todos
cd /usr/ports/security/openssl
make install clean


Depois, copie o arquivo de configuração padrão do OpenSSL:
Código: Selecionar todos
cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf


As configurações padrão vão funcionar bem. Nós precisamos de um certificado que será utilizado para a codificação. Crie uma requisição de certificado com os seguintes comandos:
Código: Selecionar todos
openssl req -new -text -out /usr/local/pgsql/data/server.req


Lembre-se de sua frase secreta PEM e quando perguntado por um nome comum, digite o domínio do seu servidor. Por exemplo, "postgresql.exemplo.com.br" e por fim, deixe a senha quando solicitada vazia.

Em seguida é preciso remover a frase PEM ou vamos ser solicitado pela a senha a cada boot. Remova a senha com o seguinte comando:
Código: Selecionar todos
openssl rsa -in privkey.pem -out server.key
rm privkey.pem


Digite a senha antiga para desbloquear a chave. Em seguida digite o seguinte comando para criar o certificado com as permissões adequadas:
Código: Selecionar todos
openssl req -x509 -in server.req -text -key server.key -out server.crt
chmod og-rwx server.key
chown pgsql:pgsql server.key server.crt server.req


Em seguida, vamos dizer PostgreSQL só usar conexão SSL a partir de servidores remotos. Edite /usr/local/pgsql/pg_hba.conf e altere a linha IPv4 como segue:
Código: Selecionar todos
hostssl all             all             0.0.0.0/0               md5


E, finalmente, ative o SSL descomentando e alterando a seguinte linha no arquivo /usr/local/pgsql/postgresql.conf:
Código: Selecionar todos
ssl = on


Reinicie o PostgreSQL e tente se conectar através de sua console local. Se tudo correu bem, você deve ver algo como o seguinte:
Código: Selecionar todos
Password for user pg_teste:
psql (9.0.3)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

db_teste=>


Como medida de segurança, vamos alterar a porta padrão do PostgreSQL para uma nova. Novamente, você tem as portas 1025 a 65536 à sua disposição. Altere a porta por "port" mudando em /usr/local/pgsql/postgresql.conf. Por exemplo:
Código: Selecionar todos
port = 2345


Não se esqueça de alterar as regras do firewall /usr/etc/local/ipfw.rules.:
Código: Selecionar todos
# open port for postgresql (2345)
$IPF 130 allow tcp from any to any 2345 in
$IPF 140 allow tcp from any to any 2345 out


Aplique as novas regras de firewall e reinicie o PostgreSQL para que as alterações tenham efeito. Não se esqueça de usar o sinalizador "-p", apontando para a porta ao usar o comando psql.

Três etapas para criação de uma nova base de dados

Primeira coisa que você tem a fazer é inicializar o banco de dados PostgreSQL com o seguinte comando:
Código: Selecionar todos
/usr/local/etc/rc.d/postgresql initdb


Isto irá configurar todos os diretórios que são necessários pelo PostgreSQL. Agora você precisa de um banco de dados em si, mas antes disso, vamos configurar um novo usuário. Eu sempre crio um usuário por banco de dados. Dessa forma, se um usuário for malicioso, ele não terá acesso a todos os seus bancos de dados.
Código: Selecionar todos
su pgsql
createuser -P pg_novo_usuario


Diga não ao ser perguntado se você deseja tornar o usuário um superusuário, não para permitir a criação de bancos de dados ou permitir a criação de novos papéis. Em seguida, vamos criar um banco de dados Unicode que este usuário tem acesso a:
Código: Selecionar todos
/usr/local/bin/createdb db_novo_db -O pg_novo_usuario --encoding=UNICODE


Conclusão

É isso aí, agora você tem uma nova base de dados "db_novo_db", que você pode conectar-se com o usuário "pg_novo_usuario" . Este é também o final deste guia. Existe agora um monte de coisas legais que você pode fazer com seu novo banco de dados. Olhe em algumas opções de otimização ou de replicação de streaming.
Luiz Gustavo Costa (Powered by BSD)
mundoUnix - Consultoria em Software Livre
http://www.mundounix.com.br
ICQ: 2890831 / MSN: contato@mundounix.com.br
Blog: http://www.luizgustavo.pro.br
Avatar do usuário
gugabsd
Administrador
 
Mensagens: 26
Registrado em: 20/Jun/2012 21:43
Localização: Teresópolis - RJ

Re: PostgreSQL 9.0 no FreeBSD 9

Mensagempor lucasmcz » 21/Jun/2012 15:42

Fala GugaBSD

Ficou show de bola. Esperamos mais outros e sempre com essa qualidade!

Abraços

--
.:: Lucas Dias
.:: Lucas Dias
.:: OS3 Soluções em TI
lucasmcz
Moderador
 
Mensagens: 28
Registrado em: 20/Jun/2012 18:55
Localização: Maceió, Alagoas

Re: PostgreSQL 9.0 no FreeBSD 9

Mensagempor ebrandi » 21/Jun/2012 15:46

Excelente contribuição :)
[ ]´s Edson
Avatar do usuário
ebrandi
Administrador
 
Mensagens: 25
Registrado em: 20/Jun/2012 21:33
Localização: São Paulo

Re: PostgreSQL 9.0 no FreeBSD 9

Mensagempor thiago.rocha » 21/Jun/2012 19:15

Bem legal!
thiago.rocha
Membro
 
Mensagens: 2
Registrado em: 21/Jun/2012 19:07
Localização: Domingos Martins/ES


Voltar para Howtos, Tutoriais & FAQs

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante