Quarta-feira, 14 de Novembro de 2007
Devo dizer que acolho a notícia de a Caixa Mágica mudar a sua base de SuSE para Mandriva com a maior satisfação.
Com efeito, a Mandriva é de longe a melhor distribuição Linux KDE based que há.
Let there be no doubt about it.
Agora bom, bom, era a Caixa Mágica ter um sistema de gestão de pacotes diferente do urpmi que na verdade é uma boa treta.
Espero que a Caixa Mágica tenha artes para contornar/resolver esta questão.
Nice move, Paulo :)
PS. O DarkLord da Caixa Mágica deixou em comentário que a distribuição não vai usar o urpmi, mas sim o apt-rpm/Synaptic.
Nice move again, Paulo :)
A Ouvir: Eleventh Earl Of Mar, Genesis.
YouTube: http://www.youtube.com/watch?v=9sNgU4cJVP4
Sábado, 27 de Outubro de 2007
Esta recente versão do Mandriva, traz pela primeira vez o Filezilla em vez do gFTP como cliente de FTP.
Ok, o Filezilla tem uma grande fama — especialmente em Windows, já que é à borliú e legal — mas em Linux prefiro o velhinho gFTP.
Como não havia um RPM para este Mandriva, vá de ./configure && make && make install.
E aqui está o bicharoco a fungar :)
A ouvir: Left Of Center, Suzanne Vega.
Youtube: http://www.youtube.com/watch?v=KFXftW3Uq9E
Sexta-feira, 28 de Setembro de 2007
De ter que premir a tecla y para copiar ficheiros com o mesmo nome ?
# cp * /lixocp: overwrite `/lixo/cert.pem'? ycp: overwrite `/lixo/create-homedir'? ycp: overwrite `/lixo/defaultdelivery'? ycp: overwrite `/lixo/defaultdomain'? ycp: overwrite `/lixo/defaultquota'? ycp: overwrite `/lixo/dirmaker'? ycp: overwrite `/lixo/ldapbasedn'? ycp: overwrite `/lixo/ldapcluster'? ycp: overwrite `/lixo/ldapgid'? ycp: overwrite `/lixo/ldaplocaldelivery'? ycp: overwrite `/lixo/ldaplogin'? ycp: overwrite `/lixo/ldapmessagestore'? ycp: overwrite `/lixo/ldapobjectclass'? ycp: overwrite `/lixo/ldappassword'? ycp: overwrite `/lixo/ldapserver'? ycp: overwrite `/lixo/ldapuid'? ycp: overwrite `/lixo/locals'? ycp: overwrite `/lixo/Makefile'? ycp: overwrite `/lixo/me'? ycp: overwrite `/lixo/plusdomain'? ycp: overwrite `/lixo/qmail-imapd.rules'? ycp: overwrite `/lixo/qmail-pop3d.rules'? ycp: overwrite `/lixo/qmail-qmqpd.rules'? ycp: overwrite `/lixo/qmail-smtpd.rules'? ycp: overwrite `/lixo/quotawarning'? ycp: overwrite `/lixo/rcpthosts'? ycp: overwrite `/lixo/signatures'? ycp: overwrite `/lixo/tcp.smtp'? ycp: overwrite `/lixo/tcp.smtp.cdb'? yBem, isto é porque o cp tem um
alias para o paramêtro -i (# man cp):
# aliasalias cp='cp -i'Das duas uma: ou o removem, o que não é muito aconselhável, ou fazem:
# \cp * /lixoYap, o backslash faz toda a diferença ;-)
A ouvir: On An Island, David GilmourYouTube: http://www.youtube.com/watch?v=SROK4biHOPk
publicado por gamito às 13:33
link
Era só para dizer a estes curiosos
wannabes que não, não viram a minha
home share do Samba.
De qualquer modo, basta uma linha no smb.conf para afastar a curiosidade:
hosts allow = 192.168.0.100Lista de curiosos:
# ls /var/log/samba/[^smbd*-a-z]* | cut -f5 -d '/' | cut -f1 -d '.'carla-2000gzr9qcarlos-ir33ncm8carloscarloscarlos-s6b9brdpcasa-7xtjzspqi8casaceleroncesarchupapa-b1o4lc5cliente-5uvddoxcompcomputador1computador1computernamecontabilidadecpq28901672019crackscrackericf-dvb8w73sf78t7filipe-02i2d14aflaviacghelenahermanohnunes01hnunes01home-mt6or4k6lhouse-pyldfzdzzhvvm9xjz1wzhbkgibm558097xindividu-jid4ezindividu-jid4ezinesisabeljcpc-m4kqvro83ujcthcjcthcjesus-83txnx9u8jmrr-8rozz76apojoao-cdqkfh3gfmjorge-0avyhq88ajorgelevi-a5n4d52cfjlobo-ee166pqgp0loureiroluis-95modnu830luisanat-7q46e74wygknewton___newton___nmbdnmbdnmbdnmbdnome-e3vucd6gwqnunonunoo-c4f6hc8efdrzmoscarp40pandreia-5mbo1iparticul-u9ukxkpatricepc1pc931196262726pc931196262726pc_iolandapcmiudospessoal-hanf015posto1privado-edadehnpt-crakelricardo-mxokjhorichar-8d10ybcnrita-39cm61gbegroubadorozete-a7amtaeerui-n5tfqykvyfftalentoaatalentoaatelmotest-kk74z8p2oetiagotorvaldstorvaldstorvaldstorvaldstorvaldsuser-penachousila-v3ggbctkoutilizad-sg66h6xanitaxyr3fp4mcbfipc43A ouvir: Portobello Belle, Dire StraitsYouTube: http://www.youtube.com/watch?v=Jdbbt31abSU
publicado por gamito às 13:02
link
Terça-feira, 25 de Setembro de 2007
Na sequência do artigo anterior sobre como correr o MySQl num ambiente
chrooted, aqui vai a vez do PHP.
# gzip -dc apache_1.3.47.tar.gz | tar xvf -# gzip -dc php-5.2.3.tar.gz | tar xvf -# gzip -dc mod_security_1.95.tar.gz | tar xvf -# cp mod_security_1.95/apache1/mod_security.c apache_1.3.37/src/modules/extra/# cd apache_1.3.37# ./configure --prefix=/usr/local/httpdCompilar o PHP:
# cd ../php-5.3.2
# ./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.37 --enable-safe-mode (etc. mais opções)# make# make install# cp php.ini-dist /usr/local/lib/php.ini
# chown root:sys /usr/local/lib/php.ini
# chmod 644 /usr/local/lib/php.ini
O Apache:
# cd ../apache_1.3.37# ./configure --prefix=/usr/local/httpd --disable-module=all --server-uid=apache --server-gid=apache --enable-module=access --enable-module=log_config --enable-module=dir --enable-module=mime --enable-module=auth --activate-module=src/modules/extra/mod_security --enable-module=security --activate-module=src/modules/php5/libphp5.a# make# make install#chown -R root:sys /usr/local/httpdAgora, prepara-se o ambiente
chrooted para o Apache com o módulo PHP:
# cp /usr/local/mysql/lib/mysql/libmysqlclient.so.12 /chroot/httpd/usr/lib/# cp /usr/lib/libm.so.2 /chroot/httpd/usr/lib/# cp /usr/lib/libz.so.2 /chroot/httpd/usr/lib/Adicionamemte, temos que copiar o ficheiro de configuração do PHP:
# umask 022# mkdir -p /chroot/httpd/usr/local/lib# cp /usr/local/lib/php.ini /chroot/httpd/usr/local/lib/# mkdir /chroot/httpd/tmp
# chown -R root.root /chroot/httpd/tmp
# chmod 1777 /chroot/httpd/tmp
# chroot /chroot/httpd /usr/local/httpd/bin/httpd
# ln /tmp/mysql.sock /chroot/httpd/tmp/
Configuração do Apache para defesa contra cross side scripting e SQL injection, através do mod_secutity:
<IfModule mod_security.c>
AddHandler application/x-httpd-php .php
SecAuditEngine On
SecAuditLog logs/audit_log
SecFilterScanPOST On
SecFilterEngine On
SecFilterDefaultAction "deny,log,status:500"
SecFilter "<(.|\n)+>"
SecFilter "'"
SecFilter "\""
</IfModule>
Ok, para a próxima, explico como tornar o Apache chrooted, ok ?
A ouvir: Just Good Friends, Fish.
YouTube: http://www.youtube.com/watch?v=ApxexrzQQas
publicado por gamito às 15:02
link
Domingo, 23 de Setembro de 2007
Er... pois, o ctl file normal do MySQL agora não funciona, por isso, aqui vai um para arrancar e parar o MySQL chrooted.
#!/bin/sh
CHROOT_MYSQL=/chroot/mysql
SOCKET=/tmp/mysql.sock
MYSQLD=/usr/local/mysql/libexec/mysqld
PIDFILE=/usr/local/mysql/var/`hostname`.pid
CHROOTUID=/usr/local/sbin/chrootuid
echo -n " mysql"
case "$1" in
start)
nohup ${CHROOTUID} ${CHROOT_MYSQL} mysql ${MYSQLD} >/dev/null 2>&1 &
sleep 5 && ln ${CHROOT_MYSQL}/${SOCKET}
;;
stop)
kill `cat ${CHROOT_MYSQL}/${PIDFILE}`
rm -rf ${CHROOT_MYSQL}/${SOCKET}
;;
*)
echo ""
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
exit 0
A ouvir: Still Got The Blues, Gary Moore
YouTube: http://www.youtube.com/watch?v=wPA4KXKyVjU
publicado por gamito às 12:25
link
No seguimento do artigo sobre o MySQL em ambiente
chrooted, ainda há mais algumas coisas que podem ser feitas para aumentar a sua segurança, nomeadamente:
- Desabilitar o acesso remoto:
Adicionar ao ficheiro /etc/my.cnf, na secção [mysqld], a linha
skip-networking
Se, mesmo assim, for necessário o acesso remoto ao MySQL, por exemplo para efectuar um backup, pode utilizar-se o SSH:
# ssh mysqlserver /usr/local/mysql/bin/mysqldump -A > backup.sql
- Desabilitar a utilização do comando LOAD DATA LOCAL INFILE:
Adicionar ao /etc/my.cnf a linha
set-variable=local-infile=0
- Remover a base de dados test, bem como todos os users, excepto o root:
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;
- Agora, alterar o nome do administrador do MySQL (root) para outro:
mysql> update user set user="mydbadmin" where user="root";
mysql> flush privileges;
A ouvir: Come Away With Me, Norah Jones
YouTube: http://www.youtube.com/watch?v=aBKcKQHZXks
publicado por gamito às 12:06
link
Uma coisa que eu costumo fazer sempre nos servidores que instalo é "chrootar" o MySQL e aplicar-lhe alguns truques (que ficam para outro artigo) para o tornar o mais seguro possível.
Vou assumir um MySQL instalado tal como
neste artigo que escrevi anteriormente e a funcionar perfeitamente. Para o verificar, executar:
# mysql -p
Para tudo estar bem, deve aparecer o seguinte:
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)mysql> quit;
Adiante para o chroot...
É necessário criar a seguinte estrutura de directórios:
# mkdir -p /chroot/mysql/dev
# mkdir -p /chroot/mysql/etc
# mkdir -p /chroot/mysql/tmp
# mkdir -p /chroot/mysql/var/tmp
# mkdir -p /chroot/mysql/usr/local/mysql/libexec
# mkdir -p /chroot/mysql/usr/local/mysql/share/mysql/english
Os direitos de acesso a estes directórios devem ser os seguintes:
# chown -R root:sys /chroot/mysql
# chmod -R 755 /chroot/mysql
# chmod 1777 /chroot/mysql/tmp
Agora, têm que ser copiados alguns ficheiros para esta estrutura de directórios:
# cp /usr/local/mysql/libexec/mysqld
/chroot/mysql/usr/local/mysql/libexec/
# cp /usr/local/mysql/share/mysql/english/errmsg.sys
/chroot/mysql/usr/local/mysql/share/mysql/english/
# cp /etc/hosts /chroot/mysql/etc/
# cp /etc/host.conf /chroot/mysql/etc/
# cp /etc/resolv.conf /chroot/mysql/etc/
# cp /etc/group /chroot/mysql/etc/
# cp /etc/master.passwd /chroot/mysql/etc/passwords
# cp /etc/my.cnf /chroot/mysql/etc/
Dos ficheiros /chroot/mysql/etc/passwords e /chroot/mysql/etc/group,
removem-se todas as linhas, excepto as respeitantes ao MySQL.
Tem que ser criado um device file especial para o /dev/null:
# mknod /chroot/mysql/dev/null c 2 2
# chown root:sys /chroot/mysql/dev/null
# chmod 666 /chroot/mysql/dev/null
E copiar a base de dados dos previlégios do MySQL:
# cp -R /usr/local/mysql/var/ /chroot/mysql/usr/local/mysql/var
# chown -R mysql:mysql /chroot/mysql/usr/local/mysql/var
O MySQL está pronto a ser executado num ambiente chrooted:
# chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld &
Bem, quando tiver pachorra, escrevo um artigo sobre como correr o Apache também em ambiente chrooted e como integrar com o PHP e o MySQL de modo a fazer um todo coerente.
A ouvir: Yet Another Movie, Pink Floyd
YouTube: http://www.youtube.com/watch?v=Ep9RTAmH5Rw
publicado por gamito às 00:28
link
Precisei de fazer um script (backup.sh) corrido pelo cron daemon fazendo com o que o rsync gerasse o maior número de informação possível dos respectivos logs (-vv) para um ficheiro – /var/log/rsync.backup.log
Os logs precisavam de combinar o stdout e o stderr, portanto:
# backup.sh >> /var/log/backup.log 2>&1
Contudo, apenas queria que o output do stderr fosse para o cron, para em caso de erro, me ser enviado em e-mail.
Então:
# (./backup.sh > /var/log/backup.log) 2>&1 | tee -a /var/log/backup.log
o que propaga o stderr para o cron e a restante tralha do stdout para o ficheiro de logs :)
Agora só me falta organizar a informação, é uma chatice que o stdout e o stderr não sejam sincronizados.
A ouvir: Sorrow, Pink Floyd
YouTube: http://www.youtube.com/watch?v=njQtAC6EH8E
publicado por gamito às 00:11
link
Sexta-feira, 21 de Setembro de 2007
O valor por omissão para o
stack size no Linux são 8 kb.
Note-se que este é o valor para o
kernel stack, não para o
user-space stack.
Contudo, na configuração do Kernel, este valor pode ser alterado para 4kb, na secção
Kernel hacking:
Em que ficamos então ? Qual o melhor valor para o
read/write size ?
Várias operações requerem ou são mais eficientes quando lidam com tamanhos múltiplos do
block size.
Diferentes operações podem envolver diferentes block sizes; e.g. a page size da RAM não é necessariamente
a mesma da do block size do disco, portanto, operações
que envolvam cópia de dados entre disco e RAM
devem idealmente usar valores que sejam múltiplos de ambos (i.e. um múltiplo do maior dos dois).
Também, a page size da RAM pode variar entre arquitecturas de
CPU, enquanto que o block size dos discos pode variar com
os filesystems utilizados ou mesmo em diferentes partições
do mesmo filesystem.
Quaisquer tamanhos relevantes, podem ser obtidos via uma
macro standard ou através do sysconf() ou fo [f]pathconf().
Quanto a networking, não opera em blocos, portanto, não interessa.
A ouvir: This Is The Sea - Waterboys
YouTube: http://www.youtube.com/watch?v=gTTKcrbQog8
publicado por gamito às 17:29
link
in qmail's mailing list:
"Hi,
I want to send emails using Qmail server in asp.Net Webapplication (windows platform).Is it possible to migrate Qmail in windows platform.Can you please assist me on the same.Your reply would be more than appreciated.
Thanks in Advance.
*******************"
A ouvir: Hoochie Coochie Man, Eric Clapton
YouTube: http://www.youtube.com/watch?v=4z4fxDOd7IE
publicado por gamito às 13:42
link
Fazer um rsync para backup de dados, por exemplo, com SSH é muito simples.
Temos que ter a nossa chave pública no servidor remoto.
Suponhamos que tenho que fazer um backup dos meus e-mails:
# /usr/bin/rsync -azq -e "ssh -i /root/rsync/chave-mirror-rsync" gamito@192.168.0.102/var/spool/mail/gamito/ /var/spool/mail/gamito/
A ouvir: Sorrow, Pink Floyd
YouTube: http://www.youtube.com/watch?v=njQtAC6EH8E
publicado por gamito às 13:32
link
Já me aconteceu, num script em BASH, ter que atribuir uma password a um user sem interacção com o teclado.
É muito simples de fazer e podem experimentar na vossa consola:
# echo gamito:segredo | chpasswd
A ouvir: Shine On You Crazy Diamond, Pink Floyd
YouTube: http://www.youtube.com/watch?v=vyqgjCKm9nQ
publicado por gamito às 12:25
link
Quinta-feira, 20 de Setembro de 2007
Se se instalar o mrtg e se se executá-lo como é normal de 5 em 5 minutos através do
cron daemon, vai inserir duas linhas – uma para
login e outra para
logout – no ficheiro /var/log/messages, enchendo-o de lixo.
A solução é passar esses
logs do mrtg para um ficheiro separado, por exemplo, auth.
Editar o ficheiro /etc/syslog.conf e mudar a linha:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
para:
*.info;auth.none;mail.none;authpriv.none;cron.none /var/log/messages
Adicionar a linha:
auth.* /var/log/auth
Convém fazer também o logrotate do ficheiro auth:
Editar o ficheiro /etc/logrotate.d/syslog e adicionar no topo a linha:
/var/log/auth
Gravar o ficheiro e efectuar um restart ao serviço syslogd:
# /etc/init.d/syslog restart
Done :)
publicado por gamito às 18:16
link
Terça-feira, 21 de Agosto de 2007
Já vimos que a gestão do nosso servidor de correio electrónico com vários domínios se tornou bastante mais fácil, depois da instalação do vpopmail.
No entanto, esta configuração pode tornar-se ainda mais fácil se instalarmos um pacote de software que permite que se efectue a gestão de contas de correio, aliases, reencaminhamentos (forward) e listas de distribuição de forma ainda mais fácil, e sem ser necessário recorrer à linha de comando.
Este software foi criado pela mesma equipa que criou o vpopmail, e foi precisamente a pensar na interacção com o vpopmail que se desenhou o sistema de gestão.
Uma vez que este sistema funciona através da web, é necessário ter instalado e a funcionar um servidor web; assumimos que está instalado o servidor conforme o descrito em capítulos anteriores. A instalação do qmailadmin é relativamente simples.
Mas antes...
Uma funcionalidade indispensável em sistemas de webmail é a possibilidade de, em determinadas circunstâncias, poder enviar respostas automáticas associadas à chegada de mensagens de correio electrónico. A utilização típica desta funcionalidade é em alturas de férias, de forma a notificar os emissores de mensagens que chegam à nossa caixa de correio da nossa situação actual. Vou acompanhar a instalação de um dos vários sistemas de respostas automáticas, que será posteriormente integrado no meu sistema de webmail.
O qmail-autorseponder, necessita das bglibs instaladas:
# make# install# ldconfigO qmail-autoresponder
# make# cp qmail-autoresponder /usr/local/bin/autoresponderO qmailadmin:
#
./configure --without-authpwd --without-authshadow --without-authpam --without-authldap --without-authdaemon --enable-unicode --enable-imageurl=/icons --without-fcgi --enable-https=auto --enable-autopurge=7 --prefix=/home/www/webmail --enable-maxpurge=30 --enable-mimetypes=/usr/local/httpd/conf/mime.types --enable-modify-quota --enable-autoresponder-path=/usr/local/bin --enable-htmldir=/home/www --enable-cgibindir=/usr/local/httpd/cgi-bin --with-htmllibdir=/home/www/qmailadmin# make
# make install-strip
E está em
http://planetgeek.dynip.sapo.pt/cgi-bin/qmailadminA password para entrar é a que escolhi quando instalei o domínio com o vpopmail.
Uma vez dentro do qmailadmin, é tudo extremamente intuitivo
Enough for today...
Neste artigo vou demonstrar a instalação de software que permite a criação e utilização de mailing lists, vulgarmente conhecidas como listas de distribuição de correio. Adicionalmente, instalarei uma modificação a este software que permite gerar arquivos das listas com os seus respectivos índices e disponibilizá-los através de páginas web.
O software que vou aqui utilizar para implementar mailing lists é o ezmlm (EaZy Mailing List Manager).
O ezmlm foi criado pelo autor do qmail, tendo em vista funcionar com este.
Do mesmo modo que o qmail, também o ezmlm é constituído não por uma peça monolítica de software, mas por vários pequenos programas que interagem entre si.
O ezmlm é muito fácil de instalar e de configurar e mais fácil ainda é com ele criar uma mailing list. A lista de features do ezmlm não tem fim. A versão que vou aqui instalar inclui um add-on denominado ezmlm-idx escrito por Frederik Lindberg, que permite o threading de mensagens, criação de digests, moderação de mailing lists, etc.
Além disso, o ezmlm-idx lida com mensagens MIME.
Instalar o ezmlm:
# patch -p0 < ezmlm-0.53.errno.patch
# \cp -p -r ../ezmlm-idx-0.40/* .
# patch < idx.patch
# make
# make man
# make setup
Os binários ficam em /usr/local/bin/ezmlm
Agora, criar mailing lists à mão é uma verdadeira seca, esperem pelo próximo artigo, no qual vou falar do qmailadmin e depois tudo é mais fácil.
One hour late for the tea :(
O Zope é um
web application server.
Por vezes, quando me perguntam o que é, tenho dificuladade em explicar.
Normalmente perguntam-me "É um servidor web ?", e respondo "não, contém um servidor web.
Como não consigo explicar muito bem, deixo aqui a definição que está na
homepage do Zope:
"Zope is an open source web application server primarily written in the Python programming language. It features a transactional object database which can store not only content and custom data, but also dynamic HTML templates, scripts, a search engine, and relational
database (RDBMS) connections and code. It features a strong through-the-web development model, allowing you to update your web site from anywhere in the world. To allow for this, Zope also features a tightly integrated security model. Built around the concept of "safe
delegation of control", Zope's security architecture also allows you to turn control over parts of a web site to other organizations or individuals. The transactional model applies not only to Zope's object database, but to many relational database connectors as well, allowing
for strong data integrity. This transaction model happens automatically, ensuring that all data is successfully stored in connected data sources by the time a response is returned to a web
browser or other client.
There are numerous products (plug-in Zope components) available for download to extend the basic set of site building tools. These products include new content objects; relational database and other external data source connectors; advanced content management tools; and full applications for e-commerce, content and document management, or bug
and issue tracking. Zope includes its own HTTP, FTP, WebDAV, and XML-RPC serving capabilities, but can also be used with the Apache or other web servers."
Resolvi usar o Zope 2 em vez do 3.
O Zope 2.4.10.4 necessita do Python 2.4 e o que vem na distribuição é o
2.4.3, pelo que vou instalá-lo em /usr/local/python-2.4.4 para não
armar confusão nos directórios dos binários, bibliotecas, includes, etc.
Instalar o Python 2.4.4:
# ./configure --prefix=/usr/local/python-2.4.4# make# make install O Zope:
# ./configure --with-python=/usr/local/python-2.4.4/bin/python2.4# make# make install# /usr/local/zope/bin/mkzopeinstance.py(no último passo é-lhe solicitado um directório aonde instalar a zope
instance, um
login e
password)
Para não correr o Zope como root, crio um grupo e um
user zope:
# groupadd zope# useradd -g zope zopeAjustar permissões:
# cd /usr/local# chown -R zope.zope zope-instance/Agora edito o ficheiro /usr/local/zope-instance/etc/zope.conf e adiciono a directiva
effective-user zopeÉ tempo de arrancar o Zope:
# su zope -c '/usr/local/zope-instance/bin/runzope &'(Para que o Zope arranque quando se inicia o servidor, adicionar esta linha ao ficheiro /etc/rc.local)
O Zope corre por omissão na porta 8080, pelo que o podem ver em:
http://planetgeek.dynip.sapo.pt:8080
O Zope tem ainda um servidor de FTP na porta 8021 e WebDav na 1980.
É só descomentar as linhas no ficheiro zope.conf
Para gerirem o Zope, o URL é:
http://o-url-do-vosso-zope/managee inserem o
login e
password que escolheram quando criaram a
zope instance.
Good riddance :)
O FTP é um protocolo que a maioria dos utilizadores regulares desconhece já completamente.
Contudo, os utilizadores mais experientes e profissionais, não dispensam esta ferramenta.
O servidor que vem incluído no CentOS é o vsFTPd (
very secure TFP daemon).
Confesso que nunca experimentei, há muitos anos que utilizo o pure-ftpd, é extremamente seguro, com uma quantidade de opções de configuração enorme e,
last but not the least, permite a virtualização de utilizadores o que é sempre uma
good thing :)
Instalar o pure-ftpd:
Começo por criar um directório no qual vou guardar o certificado para que o servidor suporte SSL
# mkdir /etc/pure-ftpd-sslCrio o certificado:
# ./openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/pure-ftpd-ssl/pure-ftpd.pem -out /etc/pure-ftpd-ssl/pure-ftpd.pemCompilar e instalar o pure-ftpd:
# ./configure --prefix=/usr/local/pure-ftpd --with-puredb --with-quotas --with-ratios --with-peruserlimits --with-largefile --with-certfile=/etc/pure-ftpd-ssl/pure-ftpd.pem# make# make install-stripUma breve explicação sobre as opções seleccionadas:
--with-puredbÉ o que vai permitir a virtualização de utilizadores.
--with-quotasPermite a utilização de quotas por utilizador.
--with-ratiosPermite a configuração de rácios upload/download do servidor ou por utilizador.
--with-peruserlimitsPermite definir um número máximo de ligações simultâneas ao servidor pelo mesmo IP ou por utilizador.
--with-largefilePermite downloads superiores a 2 GB.
--with-certfilePermite FTP sobre SSL.
Confesso que nunca percebi porque o install do pure-ftp não cria este directório, uma vez que é necessário, portanto tenho que o criar:
# cd /usr/local/pure-ftpd# mkdir etcCriar o utilizador virtual gamito:
# ./bin/pure-pw useradd gamito -u gamito -g gamito -d /home/gamito/ gamitoCriar a versão binária do ficheiro de
logins e
passwords:
# ./bin/pure-pw mkdbAgorra, arranco o servidor:
# /usr/local/pure-ftpd/sbin/pure-ftpd -l puredb:/usr/local/pure-ftpd/etc/pureftpd.pdb &(Para que o servidor arranque sempre que o computador é iniciado, coloco esta linha no ficheiro /etc/rc.local)
Vou testar:
# ftp planetgeek.dynip.sapo.ptConnected to planetgeek.dynip.sapo.pt.220---------- Welcome to Pure-FTPd ----------220-You are user number 1 of 50 allowed.220-Local time is now 08:45. Server port: 21.220-IPv6 connections are also welcome on this server.220 You will be disconnected after 15 minutes of inactivity.500 This security scheme is not implemented500 This security scheme is not implementedKERBEROS_V4 rejected as an authentication typeName (planetgeek.dynip.sapo.pt:root): gamito331 User gamito OK. Password requiredPassword:230-User gamito has group access to: 506230 OK. Current directory is /Remote system type is UNIX.Using binary mode to transfer files.ftp> dir227 Entering Passive Mode (192,168,0,101,102,202)150 Accepted data connection-rw-r--r-- 1 0 0 7231146 Aug 21 07:29 Zope-2.10.4-final.tgz226-Options: -l226 1 matches totalftp> binary200 TYPE is now 8-bit binaryftp> mget *.tgzmget Zope-2.10.4-final.tgz? y227 Entering Passive Mode (192,168,0,101,246,80)150-Accepted data connection150 7061.7 kbytes to download226-File successfully transferred226 0.376 seconds (measured here), 18.32 Mbytes per second7231146 bytes received in 0.38 seconds (1.9e+04 Kbytes/s)ftp> quit
E está tudo bem :)
Vou ver com um cliente de FTP:
E cá estou eu ligado, é de notar (ver círculo) que apesar de estar na verdade no directório /home/gamito, estou jailed, i. e., não posso subir na hierarquia de directórios.
O pure-ftpd é extremamente versátil, quer na configuração, quer nos parâmetros de arranque, para mais informação, visite a
página oficial do projecto.
See you on Zope...
Segunda-feira, 20 de Agosto de 2007
Ora bem, vamos ver o estado da arte do servidor.
Tenho instalado:
- Linux CentOS 5 com vários serviços a correr;
- Apache com suporte a SSL, PHP, PERL e Python;
- DNS;
- MySQL;
- PostgreSQL;
- Samba (servidor de ficheiros);
- OpenLDAP;
- SMTP;
- POP3;
- POP3/SSL;
- IMAP;
- IMAP/SSL;
- Anti-vírus;
- Anti-SPAM.
Vou ver os recursos do sistema:
# free total used free shared buffers cachedMem: 385560 358488 27072 0 28592 171212-/+ buffers/cache: 158684 226876Swap: 787176 0 787176
Portanto, 2702 + 28592 + 171212 = 202506 bytes disponíveis, ou seja 385560 - 202506 = 183054 bytes ocupados de um total de 385560.
Bem bom, com tanto serviço a correr.
Claro que eu não ando aqui a vender banha da cobra como certos senhores, sei que a máquina está praticamente sem carga, mas pela experiência que tenho ainda é capaz de aguentar muito.
Então se lhe puser mais 128 MB de RAM...
Going to catch a movie...
O FuzzyOCR é um
plugin para o SpamAssassin que se destina a apanhar SPAM por palavras contidas em imagens nas mensagens de correio electrónico, algo que se está a tornar moda no
basfond dos spammers.
O FuzzyOCR necessita primeiro que seja instalado algum software antes dele próprio:
Dois módulos PERL:
String::ApproxTime::HiRes# perl Makefile.PL && make && make installA giflib:
# ./configure && make && make install && ldconfigA libungif:
./configure && make && make install && ldconfigO ocrad:
./configure && make && make installA netpbm:
# ./configure# make # make package pkgdir=/usr/local/lib/netpbm# ./installnetpbmO gocr com suporte a netpbm:
# ./configure --prefix=/usr/local --with-netpbm=../netpbm-10.26.42# make# make installO gifsicle:
# ./configure# make# make installO FuzzyOCR:
# cp -p -r FuzzyOcr* /etc/mail/spamassassin/Em /etc/mail/spamassassin, está agora um ficheiro chamado FuzzyOcr.words que contém a lista de palavras que ele procura nas imagens.
Podemos acrescentar a gosto quantas quisermos.
Convém acrescentar o PATH dos binários do netpbm ao PATH do sistema:
# export PATH=$PATH::/usr/local/netpbm/bin/Vou agora enviar um e-mail da minha conta do GMail, sem qualquer texto, apenas com a seguinte imagem:
e verificar qual o resultado.
Chegada a mensagem, vou ver o envelope para verificar o resultado:
From - Mon Aug 20 22:37:21 2007X-Account-Key: account6X-UIDL: 1187645780.11464.planetgeek.dynip.sapo.pt,S=28372X-Mozilla-Status: 0001X-Mozilla-Status2: 10000000X-Mozilla-Keys: Return-Path: <gamito@gmail.com>Delivered-To: teste@planetgeek.dynip.sapo.ptReceived: (qmail 11461 invoked by uid 513); 20 Aug 2007 21:36:20 -0000Received: from 209.85.128.185 by planetgeek.dynip.sapo.pt (envelope-from <gamito@gmail.com>, uid 0) with qmail-scanner-2.01 (f-prot: 4.6.7/3.16.15. spamassassin: 3.2.3. Clear:RC:0(209.85.128.185):SA:1(8.0/5.0):. Processed in 14.989563 secs); 20 Aug 2007 21:36:20 -0000X-Spam-Status: Yes, score=8.0 required=5.0X-Spam-Level: ++++++++(...)Received: by 10.82.108.9 with SMTP id g9mr5049417buc.1187645797008; Mon, 20 Aug 2007 14:36:37 -0700 (PDT)Received: by 10.82.100.10 with HTTP; Mon, 20 Aug 2007 14:36:36 -0700 (PDT)Message-ID: <91df29a20708201436lb3458a6j3c4fe5c266baed3d@mail.gmail.com>Date: Mon, 20 Aug 2007 22:36:36 +0100From: "=?ISO-8859-1?Q?M=E1rio_Gamito?=" <gamito@gmail.com>To: teste@planetgeek.dynip.sapo.ptSubject: [+++ SPAM +++] Teste FuzzyOCRMIME-Version: 1.0Content-Type: multipart/mixed; (...)Conforme se pode verificar, a mensagem apenas com a imagem foi classificada com um score de 8.0, logo é SPAM.
E pode ver-se no Thunderbird:
Cool, isnt't it ?
Ainda não tinha configurado o Apache para ver se o PHP, o PERL e o Python estavam bem.
Estão :)
See you lads...
Agora, instálo o qmail-scanner, para que as mensagens possam ser processadas pelo anti-vírus e pelo SpamAssassin.
Tenho que instalar o pacote perl-suidperl e mudar-lhe o
ownership e as permissões antes de instalar o qmail-scanner:
# yum install perl-suidperl# chown root /usr/bin/suidperl# chmod 4711 /usr/bin/suidperlAgora o qmail-scanner:
É necessário criar um grupo e um
user chamados qscand:
# groupadd qscand# useradd -s /bin/false -g qscand qscandA seguir:
# ./configureAqui, respondemos "Y":
I
t will then generate qmail-scanner-queue.pl - it is up to you to install itcorrectly.Continue? ([Y]/N)Agora faz-nos outra pergunta:
virus-admin=System Anti-Virus Administrator <root@planetgeek.dynip.sapo.pt>local-domains='planetgeek.dynip.sapo.pt'silent-viruses='klez','bugbear','hybris','yaha','braid','nimda','tanatos','sobig','winevar','palyh','fizzer','gibe','cailont','lovelorn','swen','dumaru','sober','hawawi','holar-i','mimail','poffer','bagle','worm.galil','mydoom','worm.sco','tanx','novarg','\@mm'scanners="fprot","fast_spamassassin"If that looks correct, I will now generate qmail-scanner-queue.plfor your system...Continue? ([Y]/N)Como aparece na linha a string scanners="fprot","fast_spamassassin", é sinal de que o qmail-scanner reconheceu o anti-vírus e o SpamAssassin, por isso respondo "Y".
Se não aparecer um ou outro ou os dois, é porque alguma coisa está mal. Nesse caso, é melhor responder "N" e verificar a instalação do que não aparece na linha.
De seguida,
# ./configure --installe volto a responder "Y" às perguntas
Aqui:
Hit RETURN to create initial directory structure under /var/spool/qscan,and install qmail-scanner-queue.pl under /var/qmail/bin:clico simplesmente em ENTER.
Para terminar:
# ./contrib/test_installation.sh# ./contrib/test_installation.sh -doitEste útlimo passo, envia para o root, um e-mail com o "virus" EICAR para podermos verificar se o sistema está a funcionar, contudo, o qmail não aceita mensagens endereçadas ao root.
Para que o qmail passe a utilizar o qmail-scanner, é necessário modificar o ficheiro tcp.smtp para:
127.0.0.1:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"127.0.0.2:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"192.168.0.100:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"192.168.0.101:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"192.168.0.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl":allowe refazer o binário tcp.smtp.cdb:
# cat tcp.smtp | tcprules tcp.smtp.cdb rules.tempO SpamAssassin é excelente, mas é um autêntico devorador de RAM, pelo que temos que alterar a
run file do qmail-send e alterar o parâmetro softlimit para um valor superior, caso contrário as mensagens não passam:
#!/bin/shexec env - PATH="/usr/local/bin:/var/qmail/bin" \ softlimit -m 150000000 tcpserver -v -P -R -H -l 0 \ -x /var/qmail/control/tcp.smtp.cdb -u qmaild -g nofiles 0 smtp \ qmail-smtpd \ 2>&1É necessário reiniciar o qmail-send para que assuma a alteração:
# svc -t /service/qmail-sendTudo pronto, vou enviar uma mensagem de teste:
# telnet planetgeek.dynip.sapo.pt 25Trying 192.168.0.101...Connected to planetgeek.dynip.sapo.pt (192.168.0.101).Escape character is '^]'.220 planetgeek.dynip.sapo.pt ESMTPEHLO planetgeek.dynip.sapo.pt250-planetgeek.dynip.sapo.pt250-PIPELINING250 8BITMIMEMAIL FROM: root@planetgeek.dynip.sapo.pt250 okRCPT TO: teste@planetgeek.dynip.sapo.pt250 okDATA354 go aheadTeste do qmail-scanner, SpamAssassin e f-prot.250 ok 1187615673 qp 360QUIT221 planetgeek.dynip.sapo.ptConnection closed by foreign host.Mudo para o directório /home/vpopmail/domains/planetgeek.dynip.sapo.pt/teste/Maildir/new onde deverá estar o ficheeiro da mensagem acabada de enviar.
# cd /home/vpopmail/domains/planetgeek.dynip.sapo.pt/teste/Maildir/new# ls1187615674.372.planetgeek.dynip.sapo.pt,S=593Faço agora um cat ao ficheiro para analisar o envelope da mensagem:
# cat 1187615674.372.planetgeek.dynip.sapo.pt\,S\=593Return-Path: <root@planetgeek.dynip.sapo.pt>Delivered-To: teste@planetgeek.dynip.sapo.ptReceived: (qmail 369 invoked by uid 513); 20 Aug 2007 13:14:33 -0000Received: from 192.168.0.101 by planetgeek.dynip.sapo.pt (envelope-from <root@planetgeek.dynip.sapo.pt>, uid 0) with qmail-scanner-2.01 (f-prot: 4.6.7/3.16.15. spamassassin: 3.2.3. Clear:RC:1(192.168.0.101):. Processed in 0.079826 secs); 20 Aug 2007 13:14:33 -0000Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101) by 0 with SMTP; 20 Aug 2007 13:14:08 -0000Teste do qmail-scanner, SpamAssassin e f-protComo se pode ver no
bold, a mensagem foi analisada pelo anti-vírus e pelo f-prot.
Está tudo bem :)
Vou experimentar enviando uma mensagem a partir do exterior, através do interface webmail do GMail, da conta gamito@gmail.com para teste@planetgeek.dynip.sapo.pt.
Mensagem recebida, faço o cat do respectivo ficheiro para verificar o envelope:
# cat 1187620258.4399.planetgeek.dynip.sapo.pt\,S\=2363Return-Path: <gamito@gmail.com>Delivered-To: teste@planetgeek.dynip.sapo.ptReceived: (qmail 4397 invoked by uid 513); 20 Aug 2007 14:30:58 -0000Received: from 209.85.128.187 by planetgeek.dynip.sapo.pt (envelope-from <gamito@gmail.com>, uid 0) with qmail-scanner-2.01 (f-prot: 4.6.7/3.16.15. spamassassin: 3.2.3. Clear:RC:0(209.85.128.187):SA:0(0.1/5.0):. Processed in 11.372664 secs); 20 Aug 2007 14:30:58 -0000X-Spam-Status: No, score=0.1 required=5.0X-Spam-Level:Received: from unknown (HELO fk-out-0910.google.com) (209.85.128.187) by 0 with SMTP; 20 Aug 2007 14:30:45 -0000Received: by fk-out-0910.google.com with SMTP id f40so1256164fka for <teste@planetgeek.dynip.sapo.pt>; Mon, 20 Aug 2007 07:31:16 -0700 (PDT)DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta;
(...)
------=_Part_111403_22450460.1187620276171Content-Type: text/plain; charset=ISO-8859-1Content-Transfer-Encoding: 7bitContent-Disposition: inlineTeste de fora - GMail------=_Part_111403_22450460.1187620276171Content-Type: text/html; charset=ISO-8859-1Content-Transfer-Encoding: 7bitContent-Disposition: inlineTeste de fora - GMail------=_Part_111403_22450460.1187620276171--Também funciona, como se pode ver a bold, o SpamAssassin atribuiu um
score de 0.1 valores ao mail. Por omissão, para
scores iguais ou superiores a 5.0, a mensagem é marcada como sendo SPAM.
Este valor pode ser alterado, mas 5.0 é uma boa opção.
Agora envio também a partir do GMail uma mensagem da caixa do SPAM, para ver como o meu servidor a recebe.
Cat ao ficheiro:
# cat 1187620673.4450.planetgeek.dynip.sapo.pt\,S\=4131Return-Path: <gamito@gmail.com>Delivered-To: teste@planetgeek.dynip.sapo.ptReceived: (qmail 4447 invoked by uid 513); 20 Aug 2007 14:37:53 -0000Received: from 72.14.214.235 by planetgeek.dynip.sapo.pt (envelope-from <gamito@gmail.com>, uid 0) with qmail-scanner-2.01 (f-prot: 4.6.7/3.16.15. spamassassin: 3.2.3. Clear:RC:0(72.14.214.235):SA:1(29.0/5.0):. Processed in 12.438092 secs); 20 Aug 2007 14:37:53 -0000X-Spam-Status: Yes, score=29.0 required=5.0X-Spam-Level: +++++++++++++++++++++++++++++Received: from unknown (HELO hu-out-0506.google.com) (72.14.214.235) by 0 with SMTP; 20 Aug 2007 14:37:40 -0000Received: by hu-out-0506.google.com with SMTP id 23so1958072huc for <teste@planetgeek.dynip.sapo.pt>; Mon, 20 Aug 2007 07:38:11 -0700 (PDT)DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta;
(...)
Received: by 10.82.151.14 with SMTP id y14mr7892319bud.1187620690859;
Mon, 20 Aug 2007 07:38:10 -0700 (PDT)
Received: by 10.82.100.3 with HTTP; Mon, 20 Aug 2007 07:38:10 -0700 (PDT)
Message-ID: <91df29a20708200738n1c235ce0labf65c16e8ff25ba@mail.gmail.com>
Date: Mon, 20 Aug 2007 15:38:10 +0100
From: "=?ISO-8859-1?Q?M=E1rio_Gamito?=" <gamito@gmail.com>
To: teste@planetgeek.dynip.sapo.pt
Subject: [+++ SPAM +++] Cheap Pharmacy- Buy Xanax Valium Viagra and other meds cheap vd0a01Conforme se pode ver, esta mensagem atingiu um
score de 29.0, pelo que foi marcada como sendo SPAM, e o respectivo
Subject ficou com a
string [+++ SPAM +++] adicionada no início.
Tudo a correr sobre rodas :)
Falta testar o anti-vírus, para isso, uso o EICAR que não é um vírus, mas que foi criado para que todos os anti-vírus o identifiquem como tal.
Pode ser descarregado
aqui.
Ao contrário das mensagens de SPAM, as que contêm vírus não são entregues.
São colocadas no directório /var/spool/qscan/quarantine/viruses/new
# cd /var/spool/qscan/quarantine/viruses/new# lsplanetgeek.dynip.sapo.pt11876213385404534Podemos fazer um cat ao ficheiro para vermos o vírus:
# cat planetgeek.dynip.sapo.pt11876213385404534Received: from unknown (HELO ?192.168.0.100?) (192.168.0.100) by 0 with SMTP; 20 Aug 2007 14:48:57 -0000Message-ID: <46C9A9F4.7030700@gmail.com>Date: Mon, 20 Aug 2007 15:49:24 +0100From: =?ISO-8859-1?Q?M=E1rio_Gamito?= <gamito@gmail.com>User-Agent: Thunderbird 2.0.0.6 (Windows/20070728)MIME-Version: 1.0To: teste@planetgeek.dynip.sapo.ptSubject: Teste do =?ISO-8859-1?Q?anti-v=EDrus?=Content-Type: multipart/mixed; boundary="------------010207090307060604020104"This is a multi-part message in MIME format.--------------010207090307060604020104Content-Type: text/plain; charset=ISO-8859-1; format=flowedContent-Transfer-Encoding: 8bitVírus EICAR--:wq! Mário Gamito--------------010207090307060604020104Content-Type: application/octet-stream; name="eicar.com"Content-Transfer-Encoding: base64Content-Disposition: attachment; filename="eicar.com"WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo=--------------010207090307060604020104--*** Qmail-Scanner Quarantine Envelope Details Begin ***X-Qmail-Scanner-Mail-From: "gamito@gmail.com" via planetgeek.dynip.sapo.ptX-Qmail-Scanner-Rcpt-To: "teste@planetgeek.dynip.sapo.pt"X-Qmail-Scanner: 2.01 (f-prot: 4.6.7/3.16.15. spamassassin: 3.2.3. virus Found. Processed in 2.139228 secs)Quarantine-Description: EICAR_Test_File*** Qmail-Scanner Envelope Details End ***Encontrado.
Está tudo a funcionar 5* :)
Going shopping...
Anti-SPAM é sinónimo de SpamAssassin, mas há outras barreiras ao SPAM.
De forma a fazer face à sofisticação dos mecanismos de SPAM, um tal de Paul Vixie (bastante conhecido pelo seu envolvimento em vários sistemas e projectos da Internet desde há vários anos) resolveu criar um sistema que permitisse fazer frente a esta questão. O sistema consiste num mecanismo de teste de servidores de correio electrónico, verificando se estes estão mal configurados, isto é, se permitem a sua utilização como relays abertos; por outro lado publica de várias formas uma lista de servidores que estão dentro destas características e que é facilmente consultável.
O projecto chama-se
Mail Abuse Protection System, e tem a sua face visível em http://mail-abuse.org/; é possível ver vários tipos de listas, embora tenham todas o objectivo de localizar servidores que tenham sido denunciados como origem de mensagens de SPAM ou que estejam abertos a esse tipo de práticas (através de má configuração). A consulta das várias listas é possível através deste site web, que contém adicionalmente informações sobre como resolver este problema (no caso de má configuração de servidores de correio electrónico) e uma forma de pedir a remoção do nosso servidor destas listas. A utilização deste sistema passou a requerer um pagamento prévio, o que implica que deixou de ser utilizado por toda a gente. Existem alguns outros projectos que fornecem este serviço de forma gratuita; alguns destes são o
The Open Relay Database, o Open Relay Black List e o
Open Relay Black Zone.
Uma outra forma de publicação destas listas, num formato mais adequado à utilização automática (i. e., sem intervenção humana) é através do sistema de DNS; esta forma de publicação permite ainda que as listas sejam propagadas para vários outros servidores, de forma a aliviar a carga a que este serviço sujeita os servidores onde está activo.
Embora o objectivo destes projectos seja o mesmo, têm aproximações diferentes à forma como permitem a interacção com os administradores de servidores marcados na lista negra, tendo também aproximações diferentes em relação aos testes e procedimentos que utilizam para validar as várias situações. Os servidores de DNS a utilizar para estas consultas são alguns dos seguintes:
relays.ordb.org
or.orbl.org
inputs.orbz.org e outputs.orbz.org
Para que possamos usufruir das vantagens destes sistemas, é necessário modificar a forma de funcionamento do nosso servidor de correio de forma a verificar se a origem das mensagens que recebemos está nestas listas negras.
As modificações a fazer não implicam compilação de uma nova versão do qmail; basta incluir no arranque do qmail-smtpd alguns parâmetros adicionais. Vamos então mudar o ficheiro de arranque do qmail-smtpd, que está em /var/qmail/supervise/qmail-smtpd/run, para o seguinte:
#!/bin/shenv – PATH=”/usr/local/bin:/var/qmail/bin” \ QMAILQUEUE=”/var/qmail/bin/qmail-scanner-queue.pl” \ softlimit –m 5000000 tcpserver -v -P -R -H -x \ /var/qmail/control/tcp.smtp.cdb \ -u qmaild -g nofiles 0 smtp \ rblsmtpd –r relays.ordb.org \ qmail-smtpd 2>&1É necessário reiniciar o qmail-send para assumir a alteração:
# svc -t /service/qmail-sendO SPAM que for apanhado por esta via, não chega sequer a entrar no servidor, é rejeitado logo à partida.
Instalar o SpamAssassin
Há três modos (pelo menos) de instalar o SpamAssassin.
Instalar o RPM do sistema:
# yum Install Mail-SpamAssassinO SpamAssasssin é tanto mais eficiente quantos mais uns certos e específicos módulos PERL estiverem instalados no sistema. Infelizmente, o RPM não contém esses módulos, pelo que não é uma boa escolha.
Através do CPAN:
# perl -MCPAN -e shell o conf prerequisites_policy askinstall Mail::SpamAssassinquitIsto é óptimo, como na verdade o SpamAssassin é um módulo PERL, com um único comando, instalo-o numa simples linha. Dá tempo de ir tomar um café e quando voltar estar pronto, com todas as dependências de módulos instaladas também.
Contudo, pela experiência que tenho (e já experimentei no passado por 3 ou 4 vezes), alguma coisa corre sempre mal e fico parado a meio, sem saber o que já está instalado e é a confusão total.
Instalar todos os módulos manualmente:
Dá um bocado de trabalho, mas não é tanto assim, uma vez que a forma de instalação dos módulos PERL é sempre a mesma:
# perl Makefile.PL && make && make install
Fica aqui a lista de todos os módulos PERL que o SpamAssassin suporta para uma eficiência máxima. A ordem de instalação é irrelevante, à excepção daqueles que têm depndências, estas devem ser instaladas primeiro, obviamente.
As dependências estão assinaladas por identação e o SpamAssassin, como é óbvio será o último a instalar.
É este o método que eu utilizo.
Digest::SHA1 Net::DNS Digest::HMAC_MD5 Net::IP Mail::SPF Net::DNS::Resolver::Programmable NetAddr::IP Module::Build Module::Signature ExtUtils::ParseXS ExtUtils::CBuilder version Archive::Tar Pod::Readme Pod::Text Regexp::Common ExtUtils::CBuilder Mail::SPF::Query Net::CIDR::Lite Sys::Hostname::Long IP::Country *Net::Ident IO::Socket::SSL Net::SSLeay Mail::DomainKeys Crypt::OpenSSL::RSA Mail::Address Mail::DKIM Digest::SHA Error Archive::Tar IO::Zlib Text::Diff Algorithm::Diff Encode::Detect Mail:: SpamassassinSaca
daqui os módulos todos para não andares uma hora às apalpadelas :)
Rules du Jour:
As
Rules du Jour são uma peça muito importante para um anti-SPAM eficaz. São ficheiros que contêm regras específicas para SPAM específico e que são actualizadas frequentemente.
Por exemplo, os ficheiros 20_drugs.cf e 20_porn.cf são auto-explicativos do tipo de SPAM que permitem apanhar.
Primeiro, tenho que correr este comando
# spamassassin -D --lintAgora executo (por omissão, se não for passado o nome de nenhum outro canal, o SpamAssassin aponta para updates.spamasassin.org)
# sa-update Agora, tenho em /etc/mail/spamassassin um directório chamado sa-update-keys
Executo lá dentro o comando
# sa-update --import pubring.gpgpara importar a chave com que os ficheiros de regras são assinados, para ter a certeza de que são os autênticos.
Agora, finalmente, importar as regras:
# sa-update --channel updates.spamassassin.org# rm -rf /usr/share/spamassassin/*.txt# rm -rf /usr/share/spamassassin/*.templatePor fim, coloco uma linha no crontab para ir buscar as regras todos os dias às 00:05
05 0 * * * root /usr/bin/sa-update --channel updates.spamassassin.orgNo código do SpamAssassin, no directório spamd, existe um ficheiro chamado redhat-rc-script.sh que é o ctl para o programa. Copio-o para /etc/initd.d e dou-lhe as instruções para que seja iniciado no arranque do servidor e parado quando este seja desligado:
# cp spamd/redhat-rc-script.sh /etc/init.d/spamd# cd /etc/init.d# chkconfig --level 3 spamd on# ./spamd startIMPORTANTE: O SPAM não deve ser eliminado automaticamente sem que chegue às mailboxes dos utilizadores, por causa dos falsos positivos.
Se assim fosse, podia perder-se um negócio de milhões por causa de um mail mal marcado.
O que se faz é acrescentar uma
string ao Subject das mensagens consideradas como SPAM e os utilizadores podem criar um filtro no seu cliente de e-mail – baseado nessa
string – e enviá-lo para uma pasta de SPAM.
De vez em quando, convém dar uma olhada nessa pasta.
Para acrescentar, por exemplo, a string [+++ SPAM +++] às mensagens de SPAM, edito o ficheiro /var/qmail/bin/qmail-scanner-queue.pl e mudo a linha
my $spamc_subject='';para
rewrite_header Subject [+++ SPAM +++]É necessário reiniciar o SpamAssasssin para que assuma a alteração:
# /etc/init.d/spamd restartIsto é uma instalação básica do qmail, há outros canais de regras, há o FuzzyOCR para detectar SPAM em mensagens cujo conteúdo é uma imagem, etc.
Se alguém pretender informação sobre outras coisas, é favor deixar um comentário.
O SpamAssassin está agora instalado, mas ainda não integrado com o qmail, o que quer dizer que as mensagens ainda não estão a ser processadas pelo sistema (nem pelo anti-vírus).
Para isso, é necessário instalar o qmail-scanner, que fica para o próximo artigo desta série.
Yours Sleepy...
Para que conste, considero o Ubuntu uma boa distribuição Linux para desktop, provavelmente a melhor a par com o Mandriva no campo do KDE.
Já experimentei as versões mais recentes das duas saber ver como é.
Contudo, há alguns aspectos no Ubuntu que me preocupam.
Já cá ando há tempo suficiente para saber que as bolhas rebentam mais cedo ou mais tarde.
Ora o Ubuntu, digamos que já se aguentou mais tempo até agora sem rebentar, o que não quer dizer que não venha a acontecer e aí, quanto maior a bolha, maior o estoiro.
Adiante...
A situação em que o Ubuntu se encontra neste momento pode dar para dois lados, ambos preocupantes:
- A bolha vai crescer durante mais algum tempo e depois, por qualquer razão (maybe the next big thing ?), rebenta.
Quem é que vai ficar a apanhar os cacos do Linux no desktop ?
É o fim do Linux nesta área;
- A bolha cresce exponencialmente, não rebenta e o Ubuntu torna-se na "Microsoft do Linux".
Ora ambos os cenários são catastróficos, o primeiro é a completa descredibilização do Linux no desktop.
A segunda é mais grave, a grande força do Linux e do Software Livre em geral sempre foi a variedade de escolha.
Num cenário de distribuição dominanante, inevitavelmente vão começar a surgir novidades no Ubuntu das quais os utilizadores não vão gostar.
O Ubuntu está a começar a secar as restantes distribuições
desktop oriented, até o Fedora já está a implodir.
É que diga-se o que se disser, a malta que está a sério no Software Livre gosta tanto de dinheiro como o Bill Gates,
same shit.
E aqui entra o bacano responsável pelo Ubuntu. Para mim, a ideia inicial dele era fazer dinheiro com o Launchpad, mas o Ubuntu cresceu tanto que se tornou maior do que o seu criador.
Por outro lado, uma posição de "monopólio" do Ubuntu no desktop (ou de outra distribuição qualquer) terá consequências no Linux do servidor.
Já estou a ver um decisor de um Banco, por exemplo, a dizer "Hum... querem instalar nos nossos servidores o mesmo sistema operativo tão bonitinho que usam nos vossos portáteis ? Não me parece..."
O Ubuntu não está vocacionado para servir (não sei como há gente com coragem para ter servidores Ubuntu em produção), a SuSE e a Red Hat reinam nos servidores através das suas variantes empresariais (Oracle,
anyone ?), mas uma distribuição única orientada para desktop – que é a face visível do Linux – irá inevitavelmente repecurtir-se no Linux servidor.
Portanto, eu tenho muito gosto que o Ubuntu continue a ser um sucesso e a trazer muitas pessoas para o Linux, mas gostaria de ver algum equilíbrio com mais três ou quatro distribuições.
Volto a frisar, sem variedade de escolha, o Software Livre é inconsequente.
PS. Entretanto, saiu o Euromilhões ao GNOME, se não fosse o Ubuntu já estaria morto e enterrado.
Domingo, 19 de Agosto de 2007
Como preparação para instalar e configurar o SpamAssassin e o qmail-scanner, tenho que primeiro instalar o maildrop e o t-nef.
O maildrop requer a biblioteca de desenvolvimento do pcre, pelo que tenho que a instalar:
# yum install pcre-devel
Agora o maildrop:
# ./configure && make && make install && ldconfig
e depois o t-nef (este software remove aqueles attachments estúpidos do Outlook e Outlook Express):
# ./configure && make && make install
Kind Regards...
O anti-vírus que utilizo para servidores de e-mail UNIX há muitos anos é o f-prot.
Não é software livre (nem as in speach nem as in beer), mas nunca me deixou passar um único vírus que fosse em servidores de produção.
Para utilização pessoal é gratuito.
É muito fácil de instalar, mas primeiro é preciso instalar três módulos PERL, cujas dependências ficam aqui assinaladas por identação:
libwww-perl
Compress::Zlib
Compress::Raw::Zlib
IO::Compress::Base
IO::Compress::Base::Common
IO::Compress::Gzip
HTML::Parser
HTML::Tagset
Para instalar o f-prot, copia-se a tarball para /usr/local e descomprime-se. Depois, executam-se os comandos:
# cd /usr/local/
# ln -fs /usr/local/f-prot/f-prot.sh bin/f-prot
# ln -fs /usr/local/f-prot/man_pages/ man/man8
# chmod +x /usr/local/f-prot/f-prot*
# ./check-updates.pl
***************************************
* F-Prot Antivirus Updater *
***************************************
There's a new version of:
"Document/Office/Macro viruses" signatures on the web.
Starting to download...
Download completed.
There's a new version of:
"Application/Script viruses and Trojans" signatures on the web.
Starting to download...
Download completed.
Preparing to install Application/Script viruses and Trojans signatures.
Application/Script viruses and Trojans signatures have successfully been installed.
Preparing to install Document/Office/Macro viruses signatures.
Document/Office/Macro viruses signatures have successfully been installed.
**********************************
* Update completed successfully. *
**********************************
Finalmente, coloca-se uma linha no crontab, para que todos os dias às 00:00 horas, seja executado o comando que faz o download das definições dos vírus.
00 * * * * root /usr/local/f-prot/tools/check-updates.pl
Quickie :)
Agora que o servidor de e-mail está quase instalado (falta o anti-vírus, o SpamAssassin, o
webmail e as
interfaces gráficas de gestão), alguns pontos a considerar:
- Não posso utilizar o SMTP porque o meu IP público do SAPO ADSL está blacklisted no spamhaus (pelo menos) e deste modo as mensagens nem entram nos servidores de destino, são rejeitadas logo à partida;
- Como o servidor está a obter IP dinâmico do meu router, sempre que é (re)inicializado, o sistema coloca o IP do DNS do mesmo no ficheiro /etc/resolv.conf
Para que quando o servidor arranque, seja utilizada a cache de DNS que instalei, coloco no ficheiro /etc/rc.local, a linha
echo "nameserver 127.0.0.1" > /etc/resolv.conf
Deste modo, como os comandos contidos neste ficheiro são os últimos a serem executados quando o sistema arranca, fico sempre no ficheiro /etc/resolv.conf com o IP da minha cache de DNS;
- Para problemas com as run files do qmail, um bom método de "debugar" é executar o comando:
# ps auxwww | grep readproctitle
Vão aparecer todas as descrições dos problemas.
Claro que os logs do qmail também são uma ajuda inestimável;
- Existe um script em PERL, chamado qmHandle que é excelente para gerir a queue do qmail. Saca daqui;
- Convém instalar o qmess822 do DJB para substituir o qmail-inject. Isto evita os problemas gerados por clientes de e-mail mal comportados como o (in)famous Outlook;
- Ficaram muitas coisas por explicar, onde está o software, truques, minas e alçapões, etc., mas explicar tudo levaria dias.
Se alguém estiver a seguir esta série de artigos (coisa que duvido), coloque as questões em comentários aos artigos que terei muito gosto em ajudar no que puder.
Entering lunch mode...
O software de IMAP que utilizo é o Courier-imap.
O courier-imap lida (e foi criado com essa finalidade) com o formato Maildir de caixas de correio originário do qmail. Para além disso, acrescenta uma série de features como quotas por software.
Suporta um grande número de possibilidades de formatos de autenticação, desde RDBMS (MySQL, PostgreSQL) a PAM, LDAP, etc.
O que utilizei aqui é o vchkpw por causa do vpopmail.
Permite ainda a criação de shared folders entre grupos de contas e tem suporte a IMAP sobre SSL.
O Courier-imap, a certo ponto do seu desenvolvimento, foi dividido entre dois ficheiros de código, o courier-authlib que contém as bibliotecas de autenticação e um servidor de autenticação e o courier-imap que é o servidor de IMAP propriamente dito.
O courier-authlib tem um bug que faz abortar a compilação em GCC ≥ 4 se se escolher o authvchkpw como método de autenticação, mas como sou *cough* boa pessoa *cough*, deixo aqui um pequeno patch que escrevi para resolver o problema (os tracinhos não contam :P):
-----------------------------------------------------------------
--- courier-authlib-0.59.3/authvchkpw.c 2007-08-19 07:23:30.000000000 +0200
+++ courier-authlib-0.59.3b/authvchkpw.c 2007-08-19 07:23:30.908980669 +0000
@@ -55,16 +55,19 @@
return (*i->callback_func)(a, i->callback_arg);
}
#if HAVE_HMACLIB
#include "libhmac/hmac.h"
#include "cramlib.h"
+static int auth_vchkpw_login(const char *service, char *authdata,
+ int (*callback_func)(struct authinfo *, void *), void *callback_arg);
+
static int auth_vchkpw_cram(const char *service,
const char *authtype, char *authdata,
int (*callback_func)(struct authinfo *, void *),
void *callback_arg)
{
struct cram_callback_info cci;
-----------------------------------------------------------------
Crio um ficheiro chamado por exemplo vchkpw-courier-auth.patch e executo:
# patch -p1 < vchkpw-courier-auth.patch
patching file authvchkpw.c
Hunk #1 succeeded at 55 with fuzz 1.
Os dois ficheiros de código do Courier-imap instalam-se do mesmo modo:
# cd /home/vpopmail/courier-authlib-0.59.3
# export CPPFLAGS="-I/usr/local/ssl/include"
# export LDFLAGS="-L/usr/local/ssl/lib"
#./configure --without-ipv6 --enable-unicode --enable-workarounds-for-imap-client-bugs --without-authpwd --without-authpam --without-authuserdb --without-authcram --with-authvchkpw --without-authldap --without-authmysql --without-authpgsql --without-authdaemon --without-authcustom --without-authshadow --with-redhat
# make
# su root
# make install-strip
# make install-configure
Repetir para courier-imap-4.1.3
Copio os ficheiros de arranque do IMAP e do IMAP/SSL para /etc/init.d
# cd /usr/lib/courier-imap/libexec
# cp imapd.rc /etc/init.d/imapd
# cp imapd-ssl.rc /etc/init.d/imapd-ssl
Como o chkconfig não reconhece estes ficheiros ctl como válidos, tenho que fazer o trabalho à mão para que os dois serviços arranquem automaticamente quando o servidor for ligado (se tiver interface gráfica, tem que repetir a operação para o directório /etc/rc5.d):
# cd /etc/rc3.d
# ln -s ../init.d/imapd S99imapd
# ln -s ../init.d/imapd-ssl S99imapd-ssl
Tenho que copiar o certificado que criei antes para o POP3/SSL para o sítio certo no Courier-imap (o mesmo certificado serve):
# cp /usr/local/ssl/bin/imapd.pem /usr/lib/courier-imap/share/
Agora, antes de mais, é necessário correr o authdaemon do Courier-imap (o servidor authdaemon necessita de estar permanentemente a correr. Para que ele arranque quando se inicia o servidor, colocar no ficheiro /etc/rc.local a linha /usr/local/sbin/authdaemond start):
# /usr/local/sbin/authdaemond start
É altura de ter uma conversa com o IMAP e o IMAP/SSL para verificar se está tudo ok:
IMAP:
# telnet planetgeek.dynip.sapo.pt 143
Trying 192.168.0.101...
Connected to planetgeek.dynip.sapo.pt (192.168.0.101).
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.
O login teste@planetgeek.dynip.sapo.pt segredo
O OK LOGIN Ok.
O LOGOUT
* BYE Courier-IMAP server shutting down
O OK LOGOUT completed
Connection closed by foreign host.
IMAP/SSL:
# openssl s_client -connect planetgeek.dynip.sapo.pt:993
CONNECTED(00000003)
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
verify return:1
---
Certificate chain
0 s:/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
i:/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDzjCCAzegAwIBAgIJAJa6WcKI1VROMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYD
VQQGEwJwdDEPMA0GA1UECBMGQXZlaXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNV
BAoTBEhvbWUxDjAMBgNVBAsTBURldmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5
bmlwLnNhcG8ucHQxLjAsBgkqhkiG9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5
bmlwLnNhcG8ucHQwHhcNMDcwODE4MjMwOTQwWhcNMDgwODE3MjMwOTQwWjCBoTEL
MAkGA1UEBhMCcHQxDzANBgNVBAgTBkF2ZWlybzEPMA0GA1UEBxMGSWxoYXZvMQ0w
CwYDVQQKEwRIb21lMQ4wDAYDVQQLEwVEZXZlbDEhMB8GA1UEAxMYcGxhbmV0Z2Vl
ay5keW5pcC5zYXBvLnB0MS4wLAYJKoZIhvcNAQkBFh9nYW1pdG9AcGxhbmV0Z2Vl
ay5keW5pcC5zYXBvLnB0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1y9db
W0wJZScNQV0fCisBLRakDJWTioXgb5Kzr333ZsF/X8N5ktPEpVQ/3weRbT9RqYMQ
zHWTHyDBhQDQ5L4yoNeitmAXCfO129wDtw7qLlOm6THaktzHRLuWnS5bLWBBdnSn
ELyIQ/xCANGTcRvjKmIrA3WkvbAgkeMg0SjCFQIDAQABo4IBCjCCAQYwHQYDVR0O
BBYEFJVvEdEfiVb36m31qTJIpIPLlwQjMIHWBgNVHSMEgc4wgcuAFJVvEdEfiVb3
6m31qTJIpIPLlwQjoYGnpIGkMIGhMQswCQYDVQQGEwJwdDEPMA0GA1UECBMGQXZl
aXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBURl
dmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQxLjAsBgkqhkiG
9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHSCCQCWulnCiNVU
TjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIiPOkLa6QPkk2VHmIas
jobvnczZNrA63ygoiSFbBDBtsq+UZOcaKBG1L9z1B2n1in5RcQ0ueWnKaymBw8XY
kANdRLqXy5Y0+/M9htFAiLWQGjbjqnNPrsZ531UBV+Hz+zda2FYZsyddiQEizKK2
d4KZwVEG3jpXFZ2GVRPBcGya
-----END CERTIFICATE-----
subject=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
issuer=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
---
No client certificate CA names sent
---
SSL handshake has read 1140 bytes and written 340 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: 984513454D9DB81F0324D7983AF78C69649A82819FB007033E43B25DAE55C778
Session-ID-ctx:
Master-Key: 82B0478015DB6B5BFB4F8F2F1D750BEC5CDE11A7154CD80157EFAEBB557FCDCE0B4CC03B25C7427F1B9940ACF85615B1
Key-Arg : None
Krb5 Principal: None
Start Time: 1187523291
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.
O login teste@planetgeek.dynip.sapo.pt segredo
O OK LOGIN Ok.
O LOGOUT
* BYE Courier-IMAP server shutting down
O OK LOGOUT completed
closed
Kwel :)
Virtualizar utilizadores é sempre uma
good thing (TM).
O vpopmail é um software que permite a virtualização de utilizadores para o qmail e é muito fácil de instalar.
- Instalação do vpopmail
# ./configure --enable-qmaildir=/var/qmail --enable-qmail-newu=/var/qmail/bin/qmail-newu --enable-qmail-inject=/var/qmail/bin/qmail-inject --enable-qmail-newmrh=/var/qmail/bin/qmail-newmrh --enable-vpopuser=vpopmail --enable-vpopgroup=vchkpw --enable-roaming-users=n --enable-tcprules-prog=/usr/local/bin/tcprules --enable-tcpserver-file=/var/qmail/control/tcp.smtp --enable-logging=v --enable-md5-passwords=y --enable-log-name=vpopmail --enable-auth-module=cdb --enable-qmail-ext=y --enable-ip-alias-domains=n --enable-passwd=n --enable-learn-passwords=y --enable-auth-logging=y
# make
# make install-strip
Criar um domínio e um utilizador:
# ./vadddomain planetgeek.dynip.sapo.pt
Please enter password for postmaster:
enter password again:
# ./vadduser teste@planetgeek.dynip.sapo.pt
Please enter password for user:
enter password again:
Já não é necessário existir o utilizador de sistema "teste" para que possa enviar e receber e-mail.
Em lugar disso, dentro do directório /home/vpopmail, foi criado um planetgeek.dynip.sapo.pt (relativo ao domínio) e dentro desse um "teste" com a Maildir.
A
run file do qmail-popup, teve que ser alterada, pois já não é o checkpassword que faz a autenticação, mas o vchkpw.
Assim, a
run file do qmail-popup, passa a:
#!/bin/shexec env - PATH="/usr/local/bin:/home/vpopmail/bin:/var/qmail/bin" \ tcpserver -v -l 0 -R 0 pop3 \ qmail-popup planetgeek.dynip.sapo.pt \ vchkpw \ qmail-pop3d Maildir \
2>&1Também tive que alterar uma linha no stunnel.conf, para que o POP3/SSL possa funcionar neste novo esquema, deste modo, a linha
execargs = qmail-popup 0 /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildirpassa a
execargs = qmail-popup 0 /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d MaildirVou verificar se o POP3 e o POP3/SSL continuam a funcionar neste novo esquema.
- Envio de mensagem de teste
# 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
Teste do vpopmail
.
250 ok 1187510342 qp 2362
QUIT
221 planetgeek.dynip.sapo.pt
Connection closed by foreign host.
Fiquei com a mensagem em /home/vpopmail/domains/planetgeek.dynip.sapo.pt/teste/Maildir/new/:
# cd /home/vpopmail/domains/planetgeek.dynip.sapo.pt/teste/Maildir/new/# lltotal 4-rw------- 1 vpopmail vchkpw 293 Aug 19 08:59 1187510343.2366.planetgeek.dynip.sapo.pt,S=293# cat 1187510343.2366.planetgeek.dynip.sapo.pt\,S\=293Return-Path: <root@planetgeek.dynip.sapo.pt>Delivered-To: teste@planetgeek.dynip.sapo.ptReceived: (qmail 2362 invoked by uid 0); 19 Aug 2007 07:58:53 -0000Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101) by 0 with SMTP; 19 Aug 2007 07:58:53 -0000Teste do vpopmailConclui-se que a mensagem chegou ao sítio certo.
Vou testar agora os
daemons (note-se que o
login tem que conter agora também a parte do domínio, ou seja o endereço de e-mail completo):
- 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 <2384.1187510433@planetgeek.dynip.sapo.pt>
user teste@planetgeek.dynip.sapo.pt
+OK
pass segredo
+OK
stat
+OK 1 293
list
+OK
1 293
.
retr 1
+OK
Return-Path: <root@planetgeek.dynip.sapo.pt>
Delivered-To: teste@planetgeek.dynip.sapo.pt
Received: (qmail 2362 invoked by uid 0); 19 Aug 2007 07:58:53 -0000
Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101)
by 0 with SMTP; 19 Aug 2007 07:58:53 -0000
Teste do vpopmail
.
quit
+OK
Connection closed by foreign host.
- POP3/SSL
# openssl s_client -connect planetgeek.dynip.sapo.pt:995
CONNECTED(00000003)
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
verify 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=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDzjCCAzegAwIBAgIJAJa6WcKI1VROMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYD
VQQGEwJwdDEPMA0GA1UECBMGQXZlaXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNV
BAoTBEhvbWUxDjAMBgNVBAsTBURldmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5
bmlwLnNhcG8ucHQxLjAsBgkqhkiG9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5
bmlwLnNhcG8ucHQwHhcNMDcwODE4MjMwOTQwWhcNMDgwODE3MjMwOTQwWjCBoTEL
MAkGA1UEBhMCcHQxDzANBgNVBAgTBkF2ZWlybzEPMA0GA1UEBxMGSWxoYXZvMQ0w
CwYDVQQKEwRIb21lMQ4wDAYDVQQLEwVEZXZlbDEhMB8GA1UEAxMYcGxhbmV0Z2Vl
ay5keW5pcC5zYXBvLnB0MS4wLAYJKoZIhvcNAQkBFh9nYW1pdG9AcGxhbmV0Z2Vl
ay5keW5pcC5zYXBvLnB0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1y9db
W0wJZScNQV0fCisBLRakDJWTioXgb5Kzr333ZsF/X8N5ktPEpVQ/3weRbT9RqYMQ
zHWTHyDBhQDQ5L4yoNeitmAXCfO129wDtw7qLlOm6THaktzHRLuWnS5bLWBBdnSn
ELyIQ/xCANGTcRvjKmIrA3WkvbAgkeMg0SjCFQIDAQABo4IBCjCCAQYwHQYDVR0O
BBYEFJVvEdEfiVb36m31qTJIpIPLlwQjMIHWBgNVHSMEgc4wgcuAFJVvEdEfiVb3
6m31qTJIpIPLlwQjoYGnpIGkMIGhMQswCQYDVQQGEwJwdDEPMA0GA1UECBMGQXZl
aXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBURl
dmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQxLjAsBgkqhkiG
9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHSCCQCWulnCiNVU
TjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIiPOkLa6QPkk2VHmIas
jobvnczZNrA63ygoiSFbBDBtsq+UZOcaKBG1L9z1B2n1in5RcQ0ueWnKaymBw8XY
kANdRLqXy5Y0+/M9htFAiLWQGjbjqnNPrsZ531UBV+Hz+zda2FYZsyddiQEizKK2
d4KZwVEG3jpXFZ2GVRPBcGya
-----END CERTIFICATE-----
subject=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
issuer=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
---
No client certificate CA names sent
---
SSL handshake has read 1140 bytes and written 340 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: AD21D1919EBA3E621AE33FE42E6F585EC5D82DFC4AC8B5E1EA23F9AB70708A5F
Session-ID-ctx:
Master-Key: 0FEB364425D36C8DB10EE32D0EF8FABDC2CC4F6281DF63BC46352C53987CE59CDC8E42CAA95FDA0458204B8CC8C8BEBE
Key-Arg : None
Start Time: 1187510526
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
+OK <2398.1187510526@0>
user teste@planetgeek.dynip.sapo.pt
+OK
pass segredo
+OK
stat
+OK 1 293
retr 1
+OK
Return-Path: <root@planetgeek.dynip.sapo.pt>
Delivered-To: teste@planetgeek.dynip.sapo.pt
Received: (qmail 2362 invoked by uid 0); 19 Aug 2007 07:58:53 -0000
Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101)
by 0 with SMTP; 19 Aug 2007 07:58:53 -0000
Teste do vpopmail
.
quit
+OK
closed
All is well...
O qmail funciona com
run files. Aqui ficam as que estou a usar (discutíveis, claro):
- qmail-send:
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/
- qmail-smtpd
#!/bin/sh
exec env - PATH="/usr/local/bin:/var/qmail/bin" \
softlimit -m 5000000 tcpserver -v -P -R -H -l 0 \
-x /var/qmail/control/tcp.smtp.cdb -u qmaild -g nofiles 0 smtp \
qmail-smtpd \
2>&1
- qmail-popup
#!/bin/sh
exec env - PATH="/usr/local/bin:/var/qmail/bin" \
tcpserver -v -l 0 -R 0 pop3 \
qmail-popup planetgeek.dynip.sapo.pt \
checkpassword \
qmail-pop3d Maildir \
2>&1
- qmail-popups
#!/bin/sh
exec env - PATH="/usr/local/bin:/usr/local/sbin" \
tcpserver -v -R -H -l 0 0 995 \
stunnel /usr/local/etc/stunnel/stunnel.conf \
2>&1
- logs
As run files dos logs são todas iguais, só muda o nome do serviço, fica aqui a do qmail-send como exemplo:
#!/bin/sh
env - PATH="/usr/local/bin" \
setuidgid qmaill multilog t s2500000 /var/log/qmail/qmail-send \
2>&1
Bye for today...
POP3 over SSL, importante isto, as pessoas deviam habituar-se a utilizarem comunicações seguras nos seus e-mails, embora a maioria das vezes os responsáveis sejam os administradores de sistemas que ou não estão sensibilizados para a questão ou são incompetentes.
Há vários modos de implementar POP3/SSL em qmail, as mais das vezes, recorrendo a patches.
Eu prefiro utilizar o stunnel.
O stunnel é um software que permite cifrar ligações TCP/IP sobre SSL sem ser necessário mexer no código dos daemons, nest caso o qmail-popup.
Na prática, o que vai acontecer é o estabelecimento de um túnel SSL entre o cliente de correio electrónico e o servidor. Dentro deste túnel SSL, vão passar os comandos normais do POP3 que o stunnel encaminha para o qmail-popup. Assim, a comunicação que passa na rede é segura.
Primeiro, é necessário criar uma chave SSL para o servidor:
# ./openssl req -new -x509 -days 365 -nodes -out imapd.pem -keyout imapd.pem || cleanup
# ./openssl gendh >> imapd.pem || cleanout
# ./openssl x509 -subject -dates -fingerprint -noout -in imapd.pem || cleanup
De seguida, instalar e configurar o stunnel (na instalação, são-me pedidos os dados para a criação de um certificado, mas é irrelevante, pois vai ser substituído pelo criado acima):
# ./configure --with-ssl=/usr/local/ssl
# make
# make install
# cp /usr/local/ssl/bin/imapd.pem /usr/local/etc/stunnel/stunnel.pem
# cd /usr/local/etc/stunnel/
# cp stunnel.conf-sample stunnel.conf
O ficheiro stunnel.conf deve ficar exactamente assim:
; Sample stunnel configuration file by Michal Trojnara 2002-2006
; Some options used here may not be adequate for your particular configuration
; Please make sure you understand them (especially the effect of chroot jail)
; Certificate/key is needed in server mode and optional in client mode
cert = /usr/local/etc/stunnel/stunnel.pem
;key = /usr/local/etc/stunnel/mail.pem
; Protocol version (all, SSLv2, SSLv3, TLSv1)
sslVersion = all
; Some security enhancements for UNIX systems - comment them out on Win32
#chroot = /usr/local/var/lib/stunnel/
#setuid = nobody
#setgid = nobody
; PID is created inside chroot jail
pid = /tmp/stunnel.pid
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
;compression = rle
; Workaround for Eudora bug
;options = DONT_INSERT_EMPTY_FRAGMENTS
; Authentication stuff
;verify = 2
; Don't forget to c_rehash CApath
; CApath is located inside chroot jail
;CApath = /certs
; It's often easier to use CAfile
;CAfile = /usr/local/etc/stunnel/certs.pem
; Don't forget to c_rehash CRLpath
; CRLpath is located inside chroot jail
;CRLpath = /crls
; Alternatively you can use CRLfile
;CRLfile = /usr/local/etc/stunnel/crls.pem
; Some debugging stuff useful for troubleshooting
debug = 7
output = stunnel.log
exec = /var/qmail/bin/qmail-popup
execargs = qmail-popup 0 /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
transparent = yes
local = 192.168.0.101
; Use it for client mode
client = no
; Service-level configuration
#[pop3s]
#accept = 995
#connect = 110
#[imaps]
#accept = 993
#connect = 143
#[ssmtp]
#accept = 465
#connect = 25
;[https]
#;accept = 443
#;connect = 80
#;TIMEOUTclose = 0
; vim:ft=dosini
É necessário criar uma run file nova para o POP3/SSL:
#!/bin/sh
env - PATH="/usr/local/bin" \
setuidgid qmaill multilog t s2500000 /var/log/qmail/qmail-popups \
2>&1
Envio um e-mail primeiro:
# 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
Teste do POP3/SSL
.
250 ok 1187479718 qp 8456
QUIT
221 planetgeek.dynip.sapo.pt
Connection closed by foreign host.
Agora testo com o openssl (a porta do POP3/SSL é a 995):
# /usr/local/ssl/bin/openssl s_client -connect planetgeek.dynip.sapo.pt:995
CONNECTED(00000003)
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
verify 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=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDzjCCAzegAwIBAgIJAJa6WcKI1VROMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYD
VQQGEwJwdDEPMA0GA1UECBMGQXZlaXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNV
BAoTBEhvbWUxDjAMBgNVBAsTBURldmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5
bmlwLnNhcG8ucHQxLjAsBgkqhkiG9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5
bmlwLnNhcG8ucHQwHhcNMDcwODE4MjMwOTQwWhcNMDgwODE3MjMwOTQwWjCBoTEL
MAkGA1UEBhMCcHQxDzANBgNVBAgTBkF2ZWlybzEPMA0GA1UEBxMGSWxoYXZvMQ0w
CwYDVQQKEwRIb21lMQ4wDAYDVQQLEwVEZXZlbDEhMB8GA1UEAxMYcGxhbmV0Z2Vl
ay5keW5pcC5zYXBvLnB0MS4wLAYJKoZIhvcNAQkBFh9nYW1pdG9AcGxhbmV0Z2Vl
ay5keW5pcC5zYXBvLnB0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1y9db
W0wJZScNQV0fCisBLRakDJWTioXgb5Kzr333ZsF/X8N5ktPEpVQ/3weRbT9RqYMQ
zHWTHyDBhQDQ5L4yoNeitmAXCfO129wDtw7qLlOm6THaktzHRLuWnS5bLWBBdnSn
ELyIQ/xCANGTcRvjKmIrA3WkvbAgkeMg0SjCFQIDAQABo4IBCjCCAQYwHQYDVR0O
BBYEFJVvEdEfiVb36m31qTJIpIPLlwQjMIHWBgNVHSMEgc4wgcuAFJVvEdEfiVb3
6m31qTJIpIPLlwQjoYGnpIGkMIGhMQswCQYDVQQGEwJwdDEPMA0GA1UECBMGQXZl
aXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBURl
dmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQxLjAsBgkqhkiG
9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHSCCQCWulnCiNVU
TjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIiPOkLa6QPkk2VHmIas
jobvnczZNrA63ygoiSFbBDBtsq+UZOcaKBG1L9z1B2n1in5RcQ0ueWnKaymBw8XY
kANdRLqXy5Y0+/M9htFAiLWQGjbjqnNPrsZ531UBV+Hz+zda2FYZsyddiQEizKK2
d4KZwVEG3jpXFZ2GVRPBcGya
-----END CERTIFICATE-----
subject=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
issuer=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@planetgeek.dynip.sapo.pt
---
No client certificate CA names sent
---
SSL handshake has read 1140 bytes and written 340 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: 7466A4FF1DCCEB905D40DDD0DE27F5162B82192ADE6A35B4309AB6A920F81EC5
Session-ID-ctx:
Master-Key: 2F48EBCFC4134C96571D61598A38AF35B31A6A1C14419484E57F924B16FD8C75B33685A9B3D35957188F2451F823DEF7
Key-Arg : None
Start Time: 1187480851
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
+OK <8539.1187480851@0>
user teste
+OK
pass segredo
+OK
stat
+OK 1 293
list
+OK
1 293
.
retr 1
+OK
Return-Path: <root@planetgeek.dynip.sapo.pt>
Delivered-To: teste@planetgeek.dynip.sapo.pt
Received: (qmail 8456 invoked by uid 0); 18 Aug 2007 23:28:22 -0000
Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101)
by 0 with SMTP; 18 Aug 2007 23:28:22 -0000
Teste do POP3/SSL
.
dele 1
+OK
quit
+OK
closed
Funga :)
Until next...
Sábado, 18 de Agosto de 2007
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.
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
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...
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...
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 cached
Mem: 385560 341920 43640 0 48152 235680
-/+ buffers/cache: 58088 327472
Swap: 787176 0 787176
Ora, 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 ax
2196 ? Ss 0:00 /bin/sh /command/svscanboot
2248 ? S 0:00 svscan /service
2249 ? S 0:00 readproctitle service errors:....................................................
2250 ? S 0:00 supervise dnscache
2251 ? S 0:00 supervise log
2252 ? S 0:00 /usr/local/bin/dnscache
2253 ? S 0:00 multilog t ./main
4344 ? Rs 0:00 sshd: root@pts/0
14346 pts/0 Ss 0:00 -bash
14511 ? S 0:00 /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
14513 ? Ss 0:00 postgres: writer process
14514 ? Ss 0:00 postgres: stats collector process
14558 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.pid
14593 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/planetge
14611 pts/0 R+ 0:00 ps ax
Vou avançar para o Apache.
See you soon...
Sexta-feira, 17 de Agosto de 2007
A instalação da máquina
O serviço de IP dinâmico do SAPO, configura o DNS – incluindo o
MX record para o mail – para o meu IP fixo, portanto, não dá para instalar um servidor de DNS para criar subdomínios, pois o SAPO não os delega.
No entanto, e especialmente porque vai ter um servidor de mail, uma
cache de DNS é sempre um
must have.
- Instalar o djbdns
O software que utilizo para DNS é o djbdns, também do Prof. Dan Bernstein, como se costuma dizer, o djbdns é o DNS made easy.
Primeiro instalo as daemontools, só depois o djbdns. Falarei delas quando instalar o qmail.
# groupadd Gdnscache
# useradd -s /bin/false -g Gdnscache Gdnscache
# groupadd Gdnslog
# useradd -s /bin/false -g Gdnslog Gdnslog
# dnscache-conf Gdnscache Gdnslog /etc/dnscache
# ln -s /etc/dnscache /service
# sleep 5
# svstat /service/dnscache
O servidor de DNS passa agora a ser o localhost,
pelo que o ficheiro /etc/resolv.conf passa a
conter a seguinte linha:
nameserver 127.0.0.1
Para testar, executo o comando:
# dnsip www.planetgeek.org
Como nota final, o código do djbdns já tem alguns
IPs de root servers desactualizados, pelo que
convém actualizá-los.
Para obter os IPs dos root servers actuais, executo:
# dnsq ns . a.root-servers.net
[root@planetgeek servers]# dnsq ns . a.root-servers.net
additional: a.root-servers.net 3600000 A 198.41.0.4
additional: b.root-servers.net 3600000 A 192.228.79.201
additional: c.root-servers.net 3600000 A 192.33.4.12
additional: d.root-servers.net 3600000 A 128.8.10.90
additional: e.root-servers.net 3600000 A 192.203.230.10
additional: f.root-servers.net 3600000 A 192.5.5.241
additional: g.root-servers.net 3600000 A 192.112.36.4
additional: h.root-servers.net 3600000 A 128.63.2.53
additional: i.root-servers.net 3600000 A 192.36.148.17
additional: j.root-servers.net 3600000 A 192.58.128.30
additional: k.root-servers.net 3600000 A 193.0.14.129
additional: l.root-servers.net 3600000 A 198.32.64.12
additional: m.root-servers.net 3600000 A 202.12.27.33
[root@planetgeek servers]#
São estes os IPs a inserir no ficheiro /etc/dnscache/root/servers/@
Isto faz o trabalho:
# dnsq ns . a.root-servers.net | cut -d' ' -f5 | tail -n13 > @
Vou ver se funga:
[root@planetgeek servers]# svstat /service/dnscache/
/service/dnscache/: up (pid 31737) 353138 seconds
[root@planetgeek servers]#
Funga :)
I'll be back...
Ok, sistema instalado, um módulo de RAM foi à viola, estou com 384 MB de RAM.
Instalei o OpenSSL, o MySQL e o PostgreSQL. A compilação deve ser feita no directório /usr/local/src
- Instalar OpenSSL
# ./config no-idea
# make depend
# make
# make install
No final, devemos ficar com tudo em /usr/local/ssl/
Criar a nossa Certificate Authority
Mudamos para /usr/local/ssl/bin/ e executamos
# cd /usr/local/ssl
# ./openssl genrsa -des3 -out ca.key 1024
É-nos pedida uma password para o ficheiro ca.key
De seguida criamos um auto-assinado certificado CA com a respectiva chave RSA:
# ./openssl req -new -x509 -days 365 -key ca.key -out ca.crt
É-nos pedida a password que demos anteriormente e é-nos colocada uma série de perguntas a que se responde facilmente.
Criar um certificado SSL
Criamos uma chave privada com
# ./openssl genrsa -des3 -out server.key 1024
É-nos novamente pedida uma password.
De seguida criamos um Certified Signing Request com a chave privada RSA:
# ./openssl req -new -key server.key -out server.csr
Mais uma vez é-nos colocada a mesma série de questões, mas atenção: quando nos for perguntado o Common Name, devemos dar o Full Qualified Domain Name. Esta questão é muito importante.
É-nos também pedida uma challenge password.
Assinar o server.csr
Para que possamos ter um certificado SSL válido, usamos a nossa CA para assinar o ficheiro server.csr
O mod_ssl tem um utilitário para o fazer. Descomprimimos o ficheiro do código e na directoria pkg.contrib existe um executável denominado sign.sh
Copiamo-lo para /usr/local/ssl/bin/ e neste directório executamos
# ./sign.sh server.csr
É-nos pedida a password que demos antes e respondemos y às duas perguntas seguintes. Se tivermos sucesso podemos ler a mensagem:
Write out database with 1 new entries
Data Base Updated
CA Verifying: server.crt <-> CA cert
server.crt: OK
Não se apaga o directório do código fonte do openssl e do mod_ssl, pois adiante será necessário recorrer a eles de novo.
- Instalar MySQL
# ./configure --prefix=/usr/local/mysql
# make
# make install
De seguida, deve executar-se o comando
# scripts/mysql_install_db
Agora cria-se um utilizador e um grupo mysql:
# groupadd mysql
# useradd -g mysql -s /bin/false mysql
De seguida, no directório /usr/local/mysql/var, executam-se os comandos:
# chown -R mysql.mysql .
# find . -follow -type d -print | xargs chown mysql.mysql
Deve evitar-se que outros utilizadores acedam aos dados do MySQL. Para isso, utilizam-se no mesmo directório, os comandos:
# chmod -R go-rwx .
# find . -follow -type d -print | xargs chmod go-rwx
Em /usr/local/src/mysql-5.0.45/support-files existe um ficheiro denomindao mysql.server. Copia-se para /etc/init.d e dão-se-lhe permissões de execução:
# cd /usr/local/src/mysql-4.0.12/support-files
# cp mysql.server /etc/init.d/mysqld
# cd /etc/init.d
# chmod +x mysqld
Arranque o servidor com o comando:
# /etc/init.d/mysqld start
Para que o MySQL arranque automaticamente quando ligar o servidor, execute o comando:
# chkconfig --level 35 mysqld on
Dê uma password ao utilizador root do MySQL (não confundir com o root do sistema, a semelhança de nomes é pura coincidência) executando o comando:
# /usr/local/mysql/bin/mysqladmin -u root password segredo
O root do MySQL fica então com a password segredo.
- Instalar o PostgreSQL
# ./configure
# gmake
# gmake install
# groupadd postgres
# useradd postgres
# mkdir /usr/local/pgsql/data
# chown -R postgres.users /usr/local/pgsql/data
# su - postgres
# /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
# /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data > logfile 2>&1 &
No directório contrib/start-scripts, existe um ficheiro denominado linux que é um script para arrancar o PostgreSQL. Vamos copiá-lo para /etc/init.d, dar-lhe permissões de execução e tornar permanente o seu arranque quando se ligue o servidor:
# cp linux /etc/init.d/pgsqld
# cd /etc/init.d
# chmod +x pgsqld
# chkconfig --level 35 pgsqld on
Ok, já tenho o sistema instalado, o MySQL e o PostgreSQL.
Keep in touch.
Depois de muitas trocas e baldrocas e de ter comprado um disco IDE de 40 GB por 10 euros :), voltei ao P-III a 500 MHz com 512 MB de RAM.
Também lhe pus o DVD e a ZIP que estavam no P-II
Vou postando aqui os passos que vou fazendo para a instalação do servidor todo, para o caso de alguém querer seguir, embora presuma que quem o quiser, saiba descompactar ficheiros e coisas básicas desse género.
Estou aberto a sugestões e disponível para quem precisar de ajuda.
É só postar nos comentários.
- Instalação do CentOS 4.5
A instalação é muito fácil, basta ir seguindo os passos. No meu caso aqui para casa, basta-me uma partição /boot (convém ter 256 MB, mais ou menos), uma / e uma swap;
Não escolhi nada que seja gráfico, à excepção das bibliotecas de desenvolvimento do X. Quem quiser e se sentir mais à vontade, pode instalar o GNOME ou o KDE, assim tem acesso a uma série de ferramentas administrativas gráficas.
Se quiser aprender Linux a sério, desaconselho, mas hey, é a minha opinião;
Depois de instalado o passo seguinte é fazer o update ao sistema. Para isso, é preciso primeiro importar a chave GPG do CentOS com que os pacotes são assinados:
# rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-4
Depois, fazer o update ao sistema operativo:
# yum update
No final é preciso reiniciar, pois nas actualizações veio um kernel novo.
Eu costumo editar o ficheiro /etc/sysconfig/i18n e onde está UTF-8, mudo para ISO-8859-1, mas isto é à escolha do freguês.
Se se instalar o mrtg, o crontab executa-o a cada 5 minutos – uma linha para login e outra para logout. Até aqui tudo bem, só que enche o ficheiro /var/log/messages de lixo.
Para pôr os logs do mrtg noutro ficheiro, por exemplo, /var/log/auth, edito o ficheiro /etc/syslog.conf e mudo a linha:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
para:
*.info;auth.none;mail.none;authpriv.none;cron.none /var/log/messages
Adicionar també a linha:
auth.* /var/log/auth
Faço o logrotate também a este ficheiro:
Edito o ficheiro /etc/logrotate.d/syslog e no topo, adiciono a linha:
/var/log/auth
Gravo o ficheiro e faço um restart ao syslogd:
# /etc/init.d/syslog restart
E pronto, os logs do mrtg vão para /var/log/auth.
Alguns serviços que vêm a correr por omissão no sistema, são absolutamente desnecessários e apenas consomem recursos (poucos obviamente, mas quando se tem uma máquina com pouca RAM, tudo conta).
Pessoalmente, costumo sempre desligar o gpm e o pcmcia, pelo menos:
# cd /etc/init.d/
# chkconfig --level 3 gpm off
# chkconfig --level 3 pcmcia off
# ./pcmcia stop
# ./gpm stop
Por outro lado, o OpenLDAP não vem a correr por omissão, pelo que tenho que o colocar:
# chkconfig --level 3 ldap on
# ./ldap start
(se estiver a correr uma interface gráfica, o parâmetro --level do chkconfig deve ser --level 35)
E está o sistema pronto a ser "trabalhado" e a correr :)
I'll keep you posted...
Quinta-feira, 16 de Agosto de 2007
Bem, como sempre nestas coisas de hardware antigo, a Ley de Murphy não perdoa.
O belo disco rígido do P-III deu o berro, de modo que tive que pegar num P-II MMX a 233 MHz que aqui tenho e recomeçar o trabalho.
Este só tem 128 MB de RAM e 6,8 GB de disco rígido, mas tem DVD, dois leitores de CD e uma ZIP.
Vamos ver o que o Linux vale com tão pouca memória :)
Eu vou relatando à medida que for instalando para quem possa interessar.
Para já, vou instalar o CentOS 5 (que para quem não sabe é um
clone livre do
Red Hat Enterprise Linux 5). É exactamente a mesma coisa.
Eu cá gosto de compilar umas coisas ao meu gosto para que façam aquilo que eu quero (também poderia recompilar os SRPMs), eu sei, é discutível, mas aqui vai aquilo que eu não vou instalar da distribuição e que vou compilar:
- Apache, PHP (incluindo suporte a mcrypt, mhash, IMAP e mais uma carrada de coisas), mod_perl, mod_python, mod_ssl e mod_security;
- OpenSSL;
- MySQL e PostgreSQL (PHP compilado com suporte a estas duas RDBMS);
- SpamAssassin;
- Também não instalo o X, nos meus servidores é só runlevel 3, aka consola.
See you...
Terça-feira, 14 de Agosto de 2007
Hoje, decidi-me a começar a instalação do meu primeiro servidor caseiro, utilizando o novo serviço de IP dinâmico do SAPO.
Características:
- Linux CentOS 5
- PIII a 500 MHz, 256 MB RAM, HD 20 GB
- djbdns;
- qmail LDAP + ezmlm + SpamAssassin + qmail-scanner + vpopmail + etc.
- Apache + Squid + PHP + mod_perl + mod_python + mod_ssl + mod_security + etc.
- Zope
- MySQL + PostgreSQL
- IPTABLES
- OpenLDAP
- Samba
- PureFTPd
Devo ter-me esquecido de alguma coisa.
Bem, vou começar, ainda vai demorar um bocado numa máquina destas.
Sexta-feira, 8 de Junho de 2007
Já estou mais convencido quanto à viabilidade do Linux no Desktop.
As duas últimas distribuições que ando a usar – Kubuntu 7.04 e Mandriva 2007 Spring Edition – estão muito boas.
O principal calcanhar de aquiles do Linux, a detecção e funcionamento do hardware e periféricos, melhorou a olhos vistos.
Num portátil HP de última gama, as duas detectaram o hardware todo, incluindo a indispensável placa wireless.
A configuração está excelente (estou a falar de KDE, claro), fácil e intuitiva.
Os instaladores gráficos estão muito bons e também muito intuitivos, embora pessoalmente prefira o YUM da Red Hat, mas isso deve ser defeito profissional, pois administro muitos servidores Red Hat Enterprise Linux e estou muito habituado a ele e principalmente a que os updates não criem problemas absolutamente nenhums.
Agora, ainda há uma coisa que me irrita que são as fonts.
Quando é que se arranja um sistema de fonts decente ?
Eu conheço (e uso) as alternativas, normalmente uso as fonts true type do Windows, mas mesmo assim, não ficam a 100%.
Fonts decentes no Linux é a única coisa que invejo no Windows (não sou gamer).
Venham elas para o Linux.
Os comentários são da exclusiva resonsabilidade dos seus autores.
Mário Gamito, 2004 - 2007
Todos os direitos reservados.