Sábado, 18 de Agosto de 2007
Servidor caseiro - XI
O qmail já funga :)
É pá, desculpem lá, mas isto não dá para explicar aqui, só me levantava da cadeira daqui a uma semana.
Quem quiser saber como se instala e gere, pode comprar
este excelente livro, escrito por uns tais de Mário teste e Ricardo Oliveira.
Os bacanos agradecem, pois recebem 1,25 € por cada exemplar vendido :)
O livro tem algumas coisas desactualizadas porque há software que já mudou a forma de instalar/configurar, mas eu tenho aqui um exemplar todo anotado e terei todo o prazer em ajudar.
Ora bem, vamos ver, isto é o básico, a seguir vem POP3/SSL, IMAP, IMAP/SSL:
- SMTP
# telnet planetgeek.dynip.sapo.pt 25
Trying 192.168.0.101...
Connected to planetgeek.dynip.sapo.pt (192.168.0.101).
Escape character is '^]'.
220 planetgeek.dynip.sapo.pt ESMTP
EHLO planetgeek.dynip.sapo.pt
250-planetgeek.dynip.sapo.pt
250-PIPELINING
250 8BITMIME
MAIL FROM: root@planetgeek.dynip.sapo.pt
250 ok
RCPT TO: teste@planetgeek.dynip.sapo.pt
250 ok
DATA
354 go ahead
Subject: Teste do qmail
qmail rulez...
.
250 ok 1187477575 qp 2344
QUIT
221 planetgeek.dynip.sapo.pt
Connection closed by foreign host.
- POP3
# telnet planetgeek.dynip.sapo.pt 110
Trying 192.168.0.101...
Connected to planetgeek.dynip.sapo.pt (192.168.0.101).
Escape character is '^]'.
+OK <2351.1187477582@planetgeek.dynip.sapo.pt>
user teste
+OK
pass segredo
+OK
stat
+OK 1 314
list
+OK
1 314
.
retr 1
+OK
Return-Path: <root@planetgeek.dynip.sapo.pt>
Delivered-To: teste@planetgeek.dynip.sapo.pt
Received: (qmail 2344 invoked by uid 0); 18 Aug 2007 22:52:42 -0000
Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101)
by 0 with SMTP; 18 Aug 2007 22:52:42 -0000
Subject: Teste do qmail
qmail rulez...
.
dele 1
+OK
quit
+OK
Connection closed by foreign host.
Servidor caseiro - X
Enquanto ando de volta do qmail, já podem dar uma espreitadela ao Apache, pois já abri a porta 80 e a 443 ao exterior:
Pode ver-se que está tudo bem com o HTTP:
# telnet planetgeek.dynip.sapo.pt 80
Trying 192.168.0.101...Connected to planetgeek.dynip.sapo.pt (192.168.0.101).Escape character is '^]'.GET /<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Apache by Mário teste</title><style type="text/css"><!--.style1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;}--></style></head><body><div align="center"> <p><br /> <br /> <img src="apache.gif" width="537" height="51" /><br /> <br /> <br /> <br /> <span class="style1">Brought to you by Mário teste<br /> with a little help from SAPO's dynamic IP service.</span><br /> <br /> <br /> </p> <img src="sapo.jpg" width="147" height="112" alt="SAPO" /></div></body></html>Connection closed by foreign host.E com o HTTPS também:
# openssl s_client -connect planetgeek.dynip.sapo.pt:443
CONNECTED(00000003)depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.ptverify error:num=20:unable to get local issuer certificateverify return:1depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.ptverify error:num=27:certificate not trustedverify return:1depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.ptverify error:num=21:unable to verify the first certificateverify return:1---Certificate chain 0 s:/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt i:/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=Mario teste/emailAddress=teste@planetgeek.dynip.sapo.pt---Server certificate-----BEGIN CERTIFICATE-----MIICpzCCAhACAQEwDQYJKoZIhvcNAQEEBQAwgZUxCzAJBgNVBAYTAnB0MQ8wDQYDVQQIEwZBdmVpcm8xDzANBgNVBAcTBklsaGF2bzENMAsGA1UEChMESG9tZTEOMAwGA1UECxMFRGV2ZWwxFTATBgNVBAMTDE1hcmlvIEdhbWl0bzEuMCwGCSqGSIb3DQEJARYfZ2FtaXRvQHBsYW5ldGdlZWsuZHluaXAuc2Fwby5wdDAeFw0wNzA4MTgxNzM0MjdaFw0wODA4MTcxNzM0MjdaMIGhMQswCQYDVQQGEwJwdDEPMA0GA1UECBMGQXZlaXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBURldmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQxLjAsBgkqhkiG9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMDS96JXEp5ExmOKa5LmZZo2Wim1vN2GYpteUm+JPrT21PONuyjmliTkg2wj2Zo2zyA+gH87STDur98IX+S+nVvSwqBqm9sZIoxgPm9fORlkEC+8Y9YyUB7hSzyEOBrIHgZPGTA1L+s5zKxntY/Boz+PILwKeuDhtWcXbKcR01f7AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEA1/Nm7AzaLfr/l66Cy5aXJjzWlgMTgv/J9XWp+rWHHn18PHiBv+gH2vhEzQzBpgoLHE3vsIjguRrm4Q+REoLpKk0X595SuRFuchcQn7y89Ss3PEk4nPsWv49yNFGDGzJazqPAYKEeQ+fzQXzge2IGa/OBO0LMeo9PbzmOBHPqF20=-----END CERTIFICATE-----subject=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.ptissuer=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=Mario teste/emailAddress=teste@planetgeek.dynip.sapo.pt---No client certificate CA names sent---SSL handshake has read 1247 bytes and written 340 bytes---New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHAServer public key is 1024 bitCompression: NONEExpansion: NONESSL-Session: Protocol : TLSv1 Cipher : DHE-RSA-AES256-SHA Session-ID: A05F9289D750D1C996F0ED6246F739ACC3D039BA055CCD3F553A9565B376C1A7 Session-ID-ctx: Master-Key: BDC80C19131A3C17D90AC863041DE22948C2143C56055956DCEB00FCFB9A5CCABA332C83A3FBF40A9784872816E88651 Key-Arg : None Start Time: 1187464955 Timeout : 300 (sec) Verify return code: 21 (unable to verify the first certificate)---
GET /
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Apache by Mário teste</title>
<style type="text/css">
<!--
.style1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</head>
<body>
<div align="center">
<p><br />
<br />
<img src="apache.gif" width="537" height="51" /><br />
<br />
<br />
<br />
<span class="style1">Brought to you by Mário teste<br />
with a little help from SAPO's dynamic IP service.</span><br />
<br />
<br />
</p>
<img src="sapo.jpg" width="147" height="112" alt="SAPO" /></div>
</body>
</html>
closed
Servidor caseiro - IX
Antes de mais, dois pequenos apontamentos:
- A ventilação da máquina faz muito barulho na sala, acho que vou puxar um cabo até ao roupeiro e trancá-la lá :P
- No ficheiro /root/.bash_profile, na linha
PATH=$PATH:$HOME/bin
convém adicionar o PATH para os binários do MySQL e do Apache:
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/httpd/bin
de modo a que não seja necessário digitar o PATH completo para um comando.
Portanto, neste momento, tenho instalado:
- Um sistema Linux, CestOS 5, com vários serviços;
- MySQL (RDBMS);
- PostgreSQL (RDBMS);
- Apache com suporte a SSL, PHP, PERL e Python (Servidor web com suporte a três linguagens dinãmicas;
- Samba (servidor de ficheiros);
- Cache de DNS;
Estado da arte:
# free total used free shared buffers cachedMem: 385560 372096 13464 0 21156 282968-/+ buffers/cache: 67972 317588Swap: 787176 100 787076Ora tenho 385560 bytes de RAM total, 13464 livres, 21156
buffered e 282968
cached, o que dá 317588 bytes disponíveis.
Nada mal, não senhor, para um P-III a 500 MHz e 318 MB de RAM.
O que é que dizem a isto os "Microsoft mans", é que numa máquina destas nem um Windows Server instala.
Mas vou deixar um comentário mais completo sobre este assunto no último artigo desta série.
Para já, vou seguir para o qmail.
Back in a while...
Servidor caseiro - VII
Acabei de instalar o Apache com suporte a tudo quanto me interessa: PHP, PERL, Python, SSL e modsecurity.
- Pré-configuração do Apache:
# ./configure --prefix=/usr/local/httpd
Por agora fica assim, volto a ele mais tarde
- Instalação de pré-requisitos para o PHP
Para configurar o PHP com suporte a mcrypt e mhash, é necessário compilar as respectivas bibliotecas. Estão no SourceForge para download.
Antes, é necessário adicionar ao ficheiro /etc/ld.so.conf as linhas
/lib
/usr/lib
/usr/local/lib
para que o sistema as reconheça (embora na verdade, só seja estrictamente necessária a última).
A compilação é feita do mesmo modos para os três ficheiros:
# ./configure && make && make install && ldconfig
e deve ser feita por esta ordem: libmcrypt, mhash, mcrypt
Para o PHP suportar IMAP, o que é uma coisa muito útil para o webmail :), tenho que compilar a biblioteca c-client da Universidade de Washington que pode ser encontrada em ftp://ftp.cac.washington.edu/imap/
Antes da compilação, devo editar o ficheiro Makefile e na linha EXTRACFLAGS, colocar à frente, =-ldl, caso contrário, a compilação aborta.
Compilo:
# make slx
A seguir, são necessários uns truques para que o PHP integre bem a biblioteca e não aborte a compilação com erros:
# mkdir lib
# mkdir include
# cd c-client
# cp *.c ../lib
# cp *.h ../include
# cp c-client.a ../lib/libc-client.a
Deixo por agora as coisas como estão.
- Instalação do mod_ssl
O mod_ssl deve ser o primeiro módulo para o Apache.
Lembram-se do certifocado e chave que criei num artigo anterior ? Pois bem, preciso dele agora:
# ./configure --with-apache=../apache_1.3.37 -with-crt=/usr/local/ssl/bin/server.crt --with-key=/usr/local/ssl/bin/server.key
- Instalação do mod_perl
# perl Makefile.PL APACHE_SRC=../apache_1.3.37/src NO_HTTPD=1 USE_APACI=1 PREP_HTTPD=1 EVERYTHING=1
# make
# make install
- Instalação do modsecurity
# cd apache1/
# cp mod_security.c ../../apache_1.3.37/src/modules/extra/
- Instalação do PHP
# export LDFLAGS=-lstdc++
# ./configure --with-mysql=/usr/local/mysql \
--with-pgsql=/usr/local/pgsql \
--with-apache=../apache_1.3.37 \
--with-openssl=/usr/local/ssl \
--enable-track-vars \
--with-xml \
--with-mcrypt \
--with-gettext \
--with-ldap \
--enable-sockets \
--enable-wddx \
--enable-xslt \
--with-xsltsablot \
--with-zlib \
--with-kerberos \
--enable-bcmath \
--with-bz2 \
--enable-calendar \
--with-jpeg-dir \
--with-tiff-dir \
--with-curl \
--with-curlwrappers \
--with-gdbm \
--with-expat \
--with-iconv-dir \
--with-dom-xslt \
--with-dom-exslt \
--with-dom \
--with-db4 \
--with-flatfile \
--with-fam \
--enable-exif \
--with-gd \
--enable-ftp \
--with-png-dir \
--with-xpm-dir \
--with-ttf \
--with-iconv \
--with-mhash \
--with-ncurses \
--enable-soap \
--with-readline \
--with-pear \
--enable-snmp \
--enable-ucd-snmp-hack \
--enable-mbstring \
--enable-mbstr-enc-trans \
--with-imap=/usr/local/src/imap-2006e \
# make
# make install
# cp php.ini-dist /usr/local/lib/php.ini
- Instalação do Apache
Eu tinha dito num artigo anterior que ia precisar do código do OpenSSl e portanto, não o devia apagar. É agora.
# SSL_BASE=../openssl-0.9.8e ./configure --prefix=/usr/local/httpd \ --activate-module=src/modules/perl/libperl.a \ --activate-module=src/modules/php5/libphp5.a \
--enable-module=ssl \
--activate-module=src/modules/extra/mod_security \
--enable-module=security \
--enable-module=rewrite \
--enable-shared=rewrite \
--enable-module=proxy \
--enable-shared=proxy
# make
# make install
O ficheiro ctl do Apache não funciona com o chkconfig de sistemas Red Hat based, pelo que para que arranque automaticamente com o startup do servidor e páre quando se desligue, é necessário efectuar o trabalho manualmente:
# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
# cd /etc/rc3.d
# ln -s ../init.d/httpd S99httpd
# ln -s ../init.d/httpd K99httpd
(se tiver interface gráfica, deve fazer o mesmo para o directório /etc/rc5.d)
Como o Apache foi compilado com suporte a SSL, sempre que arranca, pergunta-me a password com que foi criado o certificado, o que é "secante".
Essa pergunta pode ser retirada, embora não seja aconselhável, muito menos em ambientes de produção. Fica a nota.
Para isso, no directório /usr/local/httpd/conf/ssl.key, corro os seguintes comandos:
# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key
# chmod 400 server.key
O modsecurity tem um bug que faz com que a linha inserida no httpd.conf seja:
AddModule mod_security
Tenho que a mudar para:
AddModule mod_security.c
Se quisermos que o Apache arranque sempre com suporte a SSL, editamos o ficheiro /etc/init.d/httpd e muda-mos a linha nº 87 de
if $HTTPD; then
para
if $HTTPD -DSSL; then
A configuração do httpd.conf fica ao gosto do freguês.
- Instalação do mod_python
A instalação do mod_python é feita depois do Apache estar compilado.
Quando se instala o mod_python, o Apache no arranque queixa-se de que pode crashar.
Para evitar isso, edita-se a o ficheiro src/Makefile.in e muda-se a linha
OPT=
para
OPT=-DEAPI
# ./configure --with-apxs=/usr/local/httpd/bin/apxs
# make dso
# make install
Tenho que adicionar esta linha ao httpd.conf:
LoadModule python_module /usr/local/httpd/libexec/mod_python.so
# /etc/init.d/httpd restart
E pronto, aqui está o Apache a correr com suporte a SSL:
# ps ax
(...)
5600 ? Ss 0:00 /usr/local/httpd/bin/httpd -DSSL
5601 ? S 0:00 /usr/local/httpd/bin/httpd -DSSL
5602 ? S 0:00 /usr/local/httpd/bin/httpd -DSSL
5603 ? S 0:00 /usr/local/httpd/bin/httpd -DSSL
5604 ? S 0:00 /usr/local/httpd/bin/httpd -DSSL
5605 ? S 0:00 /usr/local/httpd/bin/httpd -DSSL
(...)
See ya...
Servidor caseiro - VI
Ponto da situação, neste momento, com o MySQL, o PostgreSQL, o OpenLDAP e mais uma série de serviços a correr, para além do próprio sistema operativo, é claro, temos o seguinte:
# free total used free shared buffers cachedMem: 385560 341920 43640 0 48152 235680-/+ buffers/cache: 58088 327472Swap: 787176 0 787176Ora, tenho um total de 385560 de RAM na máquina, com a indicação de que 341920 estão a ser utilizados.
Contudo, tenho 43460 livres + 48152
buffered e 235680
cached e nada na
swap.
Nada mau :)
Processos instalados:
# ps ax2196 ? Ss 0:00 /bin/sh /command/svscanboot2248 ? S 0:00 svscan /service2249 ? S 0:00 readproctitle service errors:....................................................2250 ? S 0:00 supervise dnscache2251 ? S 0:00 supervise log2252 ? S 0:00 /usr/local/bin/dnscache2253 ? S 0:00 multilog t ./main4344 ? Rs 0:00 sshd: root@pts/014346 pts/0 Ss 0:00 -bash14511 ? S 0:00 /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data14513 ? Ss 0:00 postgres: writer process14514 ? Ss 0:00 postgres: stats collector process14558 pts/0 S 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/planetgeek.dynip.sapo.pt.pid14593 pts/0 Sl 0:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/planetge14611 pts/0 R+ 0:00 ps axVou avançar para o Apache.
See you soon...
Os comentários são da exclusiva resonsabilidade dos seus autores.
Mário Gamito, 2004 - 2007
Todos os direitos reservados.