quinta-feira, 13 de agosto de 2009

Configurar um Postfix ( Completo ) - Criado por Kleber


Introdução


Bom, espero que esse documento seja útil para alguém, tentei dar o máximo de clareza e informação possível, mas é claro que nada fica 100% :).

Eu pessoalmente sou um amante do QMAIL, mas tive que atualizar meus conhecimentos e entrar no mundo do POSTFIX, não vou entrar em detalhes de qual é o melhor, o que interessa é que são dois MTAs robustos, estáveis e seguros. Tive que instalar um novo servidor de e-mail em uma provedora de acesso a internet, por quê não instalei QMAIL? Por quê o cliente não queria o QMAIL por achar o POSTFIX mais amigável e estar sempre em desenvolvimento, o QMAIL já está na versão 1.0.3 há mais de 3 anos.

Eu já tinha instalado o POSTFIX, mas nunca me aprofundei bem nesse MTA, então tive que correr atrás de informações, achei vários documentos na net sobre ele, inclusive em português, documento criado por Marco A. S. Máximo, um documento muito bom e que me ajudou bastante, esse documento que estou escrevendo vai sugar muito desse material do Marco, na verdade o que eu vou fazer e colocar minhas experiências e adequar o manual pra qualquer distribuição usando o código fonte(sources) dos softwares, mas se você gosta de usar pacotes já compilados (RPM, DEB, TGZ) não haverá problemas, no documento do Marco ele usa pacotes da distribuição MANDRAKE, e eu uso SLACKWARE, o primeiro problema que eu encontrei foi que, no SLACKWARE não existe a autenticação PAM por default, então não pude usar o smtp autenticado usando o SASL, por quê o SASL necessita do PAM pra autenticar no MYSQL, bom e eu nem quis correr atrás de informações de como eu poderia contornar isso, lembrando que somente o SLACKWARE não usa PAM, todas as outras distribuições linux usam, pelo menos as mais conhecidas, também não vou entrar em discussão aqui por quê o SLACKWARE não usa PAM, então encontrei uma solução que ao meu ver era a melhor opção, uma técnica chamada POP-BEFORE-SMTP, claro que alguns já ouviram falar sobre isso, mas o que seria essa técnica? É bem simples, toda vez que um cliente autêntica no POP ou IMAP, ele tem relay aberto por um determinado tempo, e isso é transparente para o usuário, por quê não necessita de configuração especial no MUA(Mail User Agent Ex.: Outlook), poupar um pouco de trabalho ao suporte :), mas é claro se você usa smtp separado para o envio de mensagens não tem como usar essa técnica, pelos menos não tão facilmente.

Outra coisa que enfrentei muitos problemas foi migrar as contas do antigo SENDMAIL, padrão MBOX, para contas do POSTFIX, padrão MAILDIR, criei scripts que capturavam usuários do /etc/passwd e /etc/mail/virtusertable, esses scripts capturavam os usuários cadastrados e gerava automaticamente um script com todas as configurações necessárias para inclusão no MYSQL.

Bom vamos começar a colocar a mão na massa e instalar nosso ambiente.






Softwares Necessários


Até o momento nenhum link estava quebrado, mas caso enfrente problemas com links quebrados, procure na net os sites respectivos, www.google.com é uma ótima pedida! :).

Postfix:


Quando instalei esse ambiente a versão do Postfix era a 2.1.0, baixe a mais recente.

Patch para usar quota no Postfix:


Aqui está uma outra diferença do manual do Marco, ele usa o Maildrop pra fazer a entrega e controlar quota de e-mail, nos vamos usar o virtual do Postfix pra fazer a entrega e o patch para o Postfix pra gerenciar quota.

Mysql:


Bom, aqui é simples, qualquer distribuição
Linux vem com pacotes do MySQL, mas se você prefere compilar ele, como eu :), pegue os sources e mãos a obra, não vou explicar aqui como compilar o MySQL.

NOTA: Se você for compilar o MySQL e usa uma distribuição com gcc acima de 2.95, não use a opção libwrap, essa opção esta dando problemas com gcc acima de 2.95.

Courier-IMAP:


Quando instalei esse ambiente a versão era 3.0.3, baixe a mais recente.

POP-BEFORE-Smtp:


Software responsável para abrir relay para quem autenticar.

Mcafee antivírus:


Bom, aqui alguns vão falar que tem opções melhores :), como o clamav, na própria documentação do Marco ele usa o clamav como antivírus, isso fica ao seu critério, uso o uvscan por já usar ele a muito tempo e saber que ele realmente funciona, então resolvi não mudar, você ainda pode deixar os 2 antivírus rodando, o amavis_new consegue gerenciar bem isso. :)

NOTA: O uvscan pode ser baixado no site da Mcafee, é uma versão de demonstração, se desejar usa-lo você tem que comprar a licença, vale apena lembrar que, se você tem um Mcafee para Windows o registro vale para linux também, é só copiar o arquivo license.dat para dentro da pasta onde está instalado o uvscan, não vou cobrir a instalação desse antivírus por que é só rodar o script de instalação (install-uvscan) :). Deixe-o instalado antes de instalar o Amavis_new.

Amavis_new:


Para a instalação do amavis são necessários alguns módulos PERL, então tenha certeza que você tem o PERL instalado em seu sistema. O spamassassin é instalado como módulo PERL, isso será abordado na instalação do amavis.

SquirrelWebmail:


Webmail muito bom, funcional e bem robusto, um pouco feio tenho que concordar :), mas isso não importa muito, por quê resolvi usar ele? Como na documentação do Marco mesmo diz, ele aceita vários plugins um deles para o próprio usuário mudar sua senha(poupar trabalho ao suporte :)) e de fácil instalação e manutenção, claro que você vai precisar de um APACHE instalado com suporte a PHP. Também não vou cobrir a instalação do mesmo.

Postfix Admin:


Interface em PHP para administração do Postfix, também necessita de um APACHE com suporte a PHP, ele vem configurado pra usar tabelas do MYSQL pré-definidas, se você não quer usar essas tabelas, será necessário alterar o código do postfixadmin, ou se você é bom em PHP pode fazer sua própria interface, aqui será configurado com as tabelas do postfixadmin para ficar mais fácil a explicação. Com o postfixadmin você pode criar novos domínios, contas de emails, administradores para cada domínio, fazer backup de seu banco de dados etc...



Instalação do Postfix



Vale à pena lembrar que o MySQL precisa estar instalado, com suas libs completas.

A primeira coisa que vamos fazer é aplicar o patch para o Postfix pra gerenciar as quotas, faça o seguinte:

Descompacte o source em um diretório de sua preferência (eu uso o /opt/sources):

# cd /opt/sources
# tar -xvzf postfix-2.1.0.tar.gz


Descompacte o arquivo dentro do diretório do Postfix

# cd postfix-2.1.0
# tar -xvzf postfix-2.1.0.patch.gz


Após terminar aplique o patch assim:

# patch -p0 <>

Agora vamos para a instalação do Postfix:

Crie um usuário chamado postfix e um grupo chamado postdrop.

# groupadd -g 1010 postdrop
# useradd -s /bin/false -d /var/server/postfix -u 1010 -g postdrop postfix


Crie o diretório /var/server/postfix, você pode usar qualquer diretório para armazenar os Maildirs.

# mkdir -p /var/server/postfix
# chown postfix.postdrop -R /var/server/postfix


Renomeie o binário do sendmail para sendmail.old:

# mv /usr/sbin/sendmail /usr/sbin/sendmail.old

Se seu sistema possui um link simbólico em/usr/lib:

# mv /usr/lib/sendmail /usr/lib/sendmail.old

Após terminar entre no diretório que foi criado, e digite o seguinte comando.

# cd postfix-2.1.0
# make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql' 'AUXLIBS=/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib'


OBS: isso é uma linha única. Outra coisa é que a minha instalação do mysql esta sob o /usr, se você instalou o mysql no /usr/local, altere os paths corretamente com sua instalação.

Depois de terminado rode o comando make, se você já possui uma instalação do Postfix rode o make update, se não rode o make install.

# make update
ou
# make install

A instalação te fará algumas perguntas, como localização de algumas pastas, responda todas as perguntas para a instalação ser finalizada.

Vamos verificar se o Postfix foi compilado pra usar o MYSQL, faça o seguinte:

# postconf -m
static
cidr
pcre
nis
regexp
environ
mysql
proxy
btree
unix
hash

Se tem o mysql listado, está tudo correto.

Crie arquivos com os seguintes nomes dentro de /etc/postfix:

mysql_virtual_alias_maps.cf

# Insira dentro do arquivo o que está abaixo
user = postfix
password= senha
dbname = postfix
table = alias
select_field = goto
where_field = address
hosts = localhost


mysql_virtual_mailbox_limit_maps.cf

# Insira dentro do arquivo o que está abaixo

user = postfix
password = senha
dbname = postfix
table = mailbox
select_field = quota
where_field = username
hosts = localhost


mysql_virtual_mailbox_maps.cf

# Insira dentro do arquivo o que está abaixo

user = postfix
password= senha
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
hosts = localhost


Depois destes arquivos prontos, vamos criar nosso script para criação de usuários e tabelas do MYSQL. Lembram-se quando eu falei que iria usar as tabelas e usuários do postfixadmin? As tabelas que seguem nesse script são do postfixadmin, personalize se você deseja isso. Olhe no script e onde você encontrar password("postfix") ou password("postfixadmin"), altere para sua senha, ex.: password("sua senha"). Salve esse arquivo com um nome que você desejar, ex.: postfix.db. Esse script esta dentro da pasta do postfixadmin, caso queira aproveitá-lo.

DICA: O mysql por padrão vem com a senha em branco para o usuário root, se você não alterou essa senha, altere agora, rode o comando da seguinte forma:

# mysqladmin -u root -p password "sua senha"

Ele vai pedir uma senha, não digite nada apenas dê enter, após isso ter sido feito, para entrar no mysql agora como root será necessário você digitar sua senha, entre no mysql da seguinte forma:

# mysql -p

Quando for solicitado a senha digite sua senha.

Agora vamos criar nossas tabelas e usuários no MYSQL.

# mysql -p <>
Enter password:
Em enter password digite a senha do root que você alterou.

Script mysql com usuários e tabelas.

USE mysql;
# Postfix user & password
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('sua senha'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
# Postfix Admin user & password
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('sua senha'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');
FLUSH PRIVILEGES;
GRANT USAGE ON postfix.* TO postfix@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfix@localhost;
GRANT USAGE ON postfix.* TO postfixadmin@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfixadmin@localhost;
CREATE DATABASE postfix;
USE postfix;
#
# Table structure for table admin
#
CREATE TABLE admin (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (username),
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Admins';

#
# Table structure for table alias
#
CREATE TABLE alias (
address varchar(255) NOT NULL default '',
goto text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (address),
KEY address (address)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';

#
# Table structure for table domain
#
CREATE TABLE domain (
domain varchar(255) NOT NULL default '',
description varchar(255) NOT NULL default '',
aliases int(10) NOT NULL default '-1',
mailboxes int(10) NOT NULL default '-1',
maxquota int(10) NOT NULL default '-1',

created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (domain),
KEY domain (domain)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains';

#
# Table structure for table domain_admins
#
CREATE TABLE domain_admins (
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Domain Admins';

#
# Table structure for table log
#
CREATE TABLE log (
timestamp datetime NOT NULL default '0000-00-00 00:00:00',
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
action varchar(255) NOT NULL default '',
data varchar(255) NOT NULL default '',
KEY timestamp (timestamp)
) TYPE=MyISAM COMMENT='Postfix Admin - Log';

#
# Table structure for table mailbox
#
CREATE TABLE mailbox (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
maildir varchar(255) NOT NULL default '',
quota int(10) NOT NULL default '-1',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (username),
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';

#
# Table structure for table vacation
#
CREATE TABLE vacation (
email varchar(255) NOT NULL default '',
subject varchar(255) NOT NULL default '',
body text NOT NULL,
cache text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (email),
KEY email (email)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation';


Por enquanto não iremos configurar os arquivos principais do Postfix, são eles: main.cf e master.cf. Iremos instalar agora o POP-BEFORE-SMTP.



Instalação do POP-BEFORE-SMTP



OBS: O POP-BEFORE-SMTP precisa do Berkeley db, tenha certeza que você tem ele instalado em seu sistema. No Slackware vem por padrão com as versões 2 e 3, não sei as outras distribuições. Use a verão 4, aqui vai o link se você não tem ele instalado, esse link você vai encontrar o source(código fonte) se você prefere pacotes compilados, olhe no site da sua distribuição:


Vamos instalar os módulos perl:

# perl -MCPAN -e 'install Date::Parse'
# perl -MCPAN -e 'install Net::Netmask'
# perl -MCPAN -e 'install DB_File'


Descompacte o source:

# tar -xvzf pop-before-smtp-1.35..tar.gz

Entre na pasta que foi criada, dentro desta pasta você vai encontrar 3 arquivos:

pop-before-smtp.init
pop-before-smtp
pop-before-smtp-conf.pl

Copie o pop-before-smtp.init para o /etc/rc.d/:

# cp pop-before-smtp.init /etc/rc.d/rc.popbsmtp

Dentro do /etc/rc.d/ tem um script chamado rc.M, esse é o script responsável pela inicialização dos daemons no Slackware, insira nesse arquivo a seguinte linha:

# /etc/rc.d/rc.popbsmtp start

E estará pronto a inicialização do POP-BEFORE-SMTP no Slackware.

DICA: Eu renomeei para rc.popbsmtp só para manter uma compatibilidade entre os arquivos de inicialização do Slackware, mas coloque o nome que achar melhor, se você usa RedHat, Conectiva, Mandrake, copie para o /etc/rc.d/init.d, e coloque o script na inicialização abrindo o aplicativo ntsysv, marque a opção do POP-BEFORE-SMTP, no Debian, copie o script para /etc/init.d e rode o aplicativo update-rc.d -n POP-BEFORE-SMTP.init defaults.

Feito isso com o script de inicialização vamos copiar o programa pop-before-smtp para a pasta /usr/sbin:

# cp pop-before-smtp /usr/sbin

Agora vamos a parte mais importante, o arquivo de configuração do pop-before-smtp, copie o arquivo pop-before-smtp-conf.pl para /etc:

# cp pop-before-smtp-conf.pl /etc

Feito isso, temos que configurar o arquivo, esse arquivo é um pouco grande, dê uma boa olhada nele, vou colocar aqui somente o que é necessário para o funcionamento dele com o courier-imap, ele pode trabalhar com vários daemons de POP e IMAP, vamos aos itens mais importantes, você tem que descomentar as linhas que estão listadas a baixo:

Habilitar log:

$debug = 1;
$logto = '/var/log/pop-before-smtp';


Onde será criado o arquivo com os IPs que podem fazer relay:

$dbfile = '/etc/postfix/pop-before-smtp';


Tempo que o ip pode fazer relay, o default é 30 minutos, se você acha muito ou pouco, altere essa opção, 30*60 = 30, 15*60 = 15 e assim vai:

$grace = 30*60;


Arquivo onde ele encontra quais ip´s estão autenticados corretamente:

$file_tail{'name'} = '/var/log/maillog';


Aqui é especificado quem é o POP e IMAP agentes, no caso Courier, Deixe todos os outros comentados.


# For Courier-POP3 and Courier-IMAP:$pat = '^(... .. ..:..:..) \S+ (?:courier)?(?:pop3|imap)(?:login|d|d-ssl): ' .'LOGIN, user=\S+, ip=\[[:f]*(\d+\.\d+\.\d+\.\d+)\]';


Rode o seguintes comandos:

# pop-before-smtp -dumpconfig
# /etc/rc.d/rc.popbsmtp start


E dê um ls dentro de /etc/postfix para ver se existe um arquivo pop-before-smtp.db

# ls -la /etc/postfix/pop-before-smtp.*

Se o resultado for positivo, nossa instalação está OK. )

Pronto essas são as configurações básicas para o funcionamento do POP-BEFORE-SMTP nesse ambiente que estamos montando, mas o arquivo de configuração é bem extenso de uma boa lida, talvez tenha algo interessante pra você ).


Instalação e Configuração do Courier-IMAP


A instalação do Courier-IMAP é bem simples, só que ela não pode ser feita pelo root, pelo menos na fase de preparação dos binários não, vamos a instalação.

OBS: No Slackware eu tive que mudar as permissões do /dev/null, não sei se você vai enfrentar isso na sua distribuição, então faça um:

# chmod 777 /dev/null

Isso é só temporário, quando você reiniciar a máquina ele voltará com as configurações padrões.

Logue com um usuário comum, no meu caso eu usei o próprio Postfix:

# su postfix

Rode o script configure com as seguintes opções, lembrando que você pode dar uma lida no help do configure para maiores informações:

# ./configure --prefix=/usr/local --with-mysql-libs=/usr/lib/mysql --with-msyql-includes=/usr/include/mysql \
--with-authmysql --with-authmysql=yes --with-authchangepwdir


Depois de pronto execute:

# make && make check

Se não deu nenhum erro, como root rode o make install

# make install

Pronto, agora vamos a configuração do courier-imap, se você percebeu eu fiz toda instalação usando o /usr/local como base, se você deseja alterar isso, fique a vontade, entre no diretório /usr/local/etc, la dentro você vai encontrar um arquivo chamado authmysqlrc.dist mude-o para authmysqlrc:

# cp authmysqlrc.dist authmysqlrc

Feito isso, edite esse arquivo e deixe-o dessa maneira:

MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD sua senha (senha que você colocou no script mysql)
MYSQL_SOCKET /var/run/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_WHERE_CLAUSE active=1


Feito isso, você vai encontrar os arquivos:

imapd.dist
imapd-ssl.dist
pop3d.dist
pop3d-ssl.dist

Renomeie esses arquivos tirando o dist do final deles:

# cp imapd.dist imapd
# cp imapd-ssl.dist impad-ssl
# cp pop3d.dist pop3d
# cp pop3d-ssl.dist pop3d-ssl


Não vi necessidade de alterar alguma coisa nesses arquivos, mas se você necessita de alterações, fique a vontade para altera-los.

Os arquivos que tem ssl são daemons que usam criptografia, se você deseja usa-las rode o aplicativo que se encontra dentro de /usr/local/sbin/mkpop3dcert e /usr/local/sbin/mkimapdcert:

# cd /usr/local/sbin
# ./mkpop3dcert
# ./mkimpadcert


Feito tudo isso, vamos rodar os daemons respectivos, cada serviço tem um script para sua inicialização, estão todos dentro de /usr/local/libexec, você pode iniciar isso de várias maneiras, eu criei um script chamado rc.popimap incluindo todos os scripts necessários, mas você pode copiar esses scripts pra dentro do /etc/rc.d e colocar uma linha no rm.M para cada um, ou colocar o path completo no rc.M, no Red Hat você pode copiar os scripts pra dentro do /etc/rc.d/init.d e usar o ntsyv pra cuidar disso, no Debian a mesma coisa so usando o update-rc.d como já foi explicado antes, isso fica com você, vamos levantar os daemons pra ver se deu tudo certo agora. Rode-os assim:

# /usr/local/libexec/pop3d.rc start
# /usr/local/libexec/imapd.rc start
# /usr/local/libexec/pop3d-ssl.rc start
# /usr/local/libexec/imapd-ssl.rc start


Se não apareceu erro algum rode o comando ps aux:

# ps aux

Veja se na saída tem algo parecido com isso:

root 220 0.0 0.0 2140 976 ? S May12 0:08 /usr/local/libexec/authlib/authdaemond.mysql
root 221 0.0 0.0 2140 976 ? S May12 0:08 /usr/local/libexec/authlib/authdaemond.mysql
root 233 0.0 0.0 1460 528 ? S May12 0:10 /usr/local/libexec/couriertcpd -address=0-stderrlogger=/usr/local/sbin/courierlogger -stderrlo
root 238 0.0 0.0 1372 452 ? S May12 0:07 /usr/local/sbin/courierlogger pop3d
root 248 0.0 0.0 1460 520 ? S May12 0:00 /usr/local/libexec/couriertcpd -address=0 -stderrlogger=/usr/local/sbin/courierlogger -stderrlo
root 252 0.0 0.0 1360 288 ? S May12 0:00 /usr/local/sbin/courierlogger imapd

Se existe algo parecido os daemons estão rodando, de um telnet na porta respectiva para teste, mas lembre-se, como não cadastramos ninguém nas tabelas do MYSQL, então não da pra testarmos a autenticação ainda.

# telnet localhost 110

Deve aparecer algo assim:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.

# telnet localhost 143

Deve aparecer algo assim:

Trying 127.0.0.1...
Connected to localhost.
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-2004 Double Precision, Inc. See COPYING for distribution information.

Não podemos testar as portas do pop3d-ssl e nem imapd-ssl por quê necessitam de softwares especiais preparados pra trabalhar com criptografia. Se tudo ocorreu bem, estamos com nosso Courier-IMAP funcionando corretamente, vamos continuar nossa instalação, faremos testes no final do documento pra saber se esta tudo funcionando corretamente.


Instalação e Configuração do Amavis_new


A instalação do amavis não é difícil mas é um pouco chata por causa dos módulos do PERL, são vários módulos, para a instalação do amavis você precisa estar conectado, vamos usar o comando:

# perl -MCPAN -e "install modulo::perl"

Vamos ao módulos:
(Lista tirada da documentação do amavis_new)

Archive::Zip
Compress::Zlib
Convert::TNEF
Convert::UUlib
MIME::Base64
MIME::Parser
Mail::Internet
Net::Server
Net::SMTP
Digest::MD5
IO::Stringy
Time::HiRes
Unix::Syslog
Mail::SpamAssassin

Como foi dito a instalação é feita como no exemplo a seguir:

# perl -MCPAN -e "install Archiver::Zip"

Faça isso com todos os módulos listados acima.

Nota: A instalação do spamassassin é toda feita aqui, então não é preciso você baixar do site o spamassassin, a única coisa que você vai se preocupar e com o arquivo de configuração do spamassasin, no site http://www.yrex.com/spam/spamconfig.php tem um gerador automático do arquivo local.cf, nesse site você tem todas as informações necessárias para criar o arquivo, leia com bastante atenção. Vou colocar aqui um exemplo de como esse arquivo é:

# SpamAssassin config file for version 2.5x
# generated by http://www.yrex.com/spam/spamconfig.php (version 1.01)
# How many hits before a message is considered spam.
required_hits 10.0

# Whether to change the subject of suspected spam
rewrite_subject 0

# Text to prepend to subject if rewrite_subject is used
subject_tag *****SPAM*****

# Encapsulate spam in an attachment
report_safe 1

# Use terse version of the spam report
use_terse_report 0

# Enable the Bayes system
use_bayes 1

# Enable Bayes auto-learning
auto_learn 1

# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1

# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_languages all

# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales all


Há alguns softwares de sistema necessários também, aqui vai a lista deles, check se você tem esses softwares em seu sistema:
(Lista tirada da documentação do amavis_new)


Após a instalação de todas essas dependências vamos a instalação do amavis_new:

Crie um usuário e um grupo para o amavis_new:

# groupadd -g 1011 amavis
# useradd -s /bin/false -d /var/amavis -g 1011 -u 1011 amavis


Crie agora os diretórios necessários para o amavis_new:

# mkdir /var/amavis
# chown amavis.amavis -R /var/amavis
# chmod 750 -R /var/amavis

# mkdir /var/virusmails
# chown amavis.amavis -R /var/virusmails
# chmod 750 -R /var/virusmails


Descompacte o arquivo do amavis_new:

# tar -xvzf amavisd-new-20030616-p9.tar.gz

Entre dentro do diretório criado, vamos copiar alguns arquivos para diretórios específicos e mudar seus donos e permissões, são eles:

# cp amavisd /usr/sbin
# chown root.amavis /usr/sbin/amavisd
# chmod 750 /usr/sbin/amavisd

# cp amavisd.conf /etc/
# chown root.amavis /etc/amavisd.conf
# chmod 644 /etc/amavisd.conf


Agora iremos configurar o arquivo de o /etc/amavisd.conf, vou colocar aqui as opções que eu julguei importantes para o meu ambiente. Esse arquivo é bem extenso, então dê uma boa olhada em /etc/amavisd.conf.

$MYHOME = '/var/amavis';
$mydomain = 'dominio.com.br';
$myhostname = 'maquina.dominio.com.br';
$daemon_user = 'amavis';
$daemon_group = 'amavis';
$TEMPBASE = $MYHOME;

$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;


Se você deseja notificar as pessoas que estão enviando vírus, spam, ou os seus usuários que estão recebendo esses emails, você pode personalizar essas notificações usando essas variáveis:

Por default elas vem comentadas, se você deseja personalizar é só descomentar e criar os arquivos especificados, eu preferi usar as mensagens que vem dentro do arquivo /usr/sbin/amavisd, apenas traduzindo essas mensagens para português.

$notify_sender_templ = read_text('/var/amavis/sender.txt');
$notify_virus_sender_templ= read_text('/var/amavis/virus_sender.txt');
$notify_virus_admin_templ = read_text('/var/amavis/virus_admin.txt');
$notify_virus_recips_templ= read_text('/var/amavis/virus_recip.txt');
$notify_spam_sender_templ = read_text('/var/amavis/notify_spam_sender.txt');
$notify_spam_admin_templ = read_text('/var/amavis/spam_admin.txt');


Aqui você define se as mensagens que contém virus ou spam devem passar ou não, os valores que você pode usar são D_BOUNCE, D_PASS, D_REJECT e D_DISCARD, se você usa D_PASS ou D_BOUCE todas as mensagens que chegarem com virus, o amavis notificara quem enviou o vírus e quem esta recebendo vírus e spam, eu achei melhor usar a opção D_DISCARD, usando essa opção você pode usar as variáveis que você desejar, $warnvirussender, $warnvirusrecip etc. Com o uso dessas variáveis o amavis vai notificar só quem você achar melhor, no meu caso não vou notificar quem esta enviando o vírus ou spam, somente quem esta recebendo, para evitar os spammers que usam a proliferação de vírus pra saber quais contas estão ativas ou não, no manual do Marco, ele deixa a variável $final_spam_destiny como D_PASS isso deixa o spam passar, mas assinala a mensagem com um ****SPAM****, eu preferi não deixar spam nenhum passar, mas isso você decide :), como você pode ver, só deixei as mensagens com um cabeçalho mal formado passar, o resto fica como D_DISCARD, o D_DISCARD vai rejeitar a mensagem e não vai retornar nada para quem está enviando D_REJECT retorna o erro para quem esta enviando a mensagem, as próximas linhas definem quem vai ou não receber a notificação.

$final_virus_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_banned_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_spam_destiny = D_DISCARD; # (defaults to D_REJECT)
$final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested


Aqui você define quem vai ou não receber as notificações, no meu caso deixei somente o recipiente receber as notificações. Deixando a linha comentada o valor da variável e false, então descomente a linha que você desejar.

# Notify virus sender?
#$warnvirussender = 1;

# Notify spam sender?
#$warnspamsender = 1;

# Notify sender of banned files?
#$warnbannedsender = ; #

# Notify sender of syntactically invalid header containing non-ASCII characters?
#$warnbadhsender = 1;

# Notify virus (or banned files) RECIPIENT?
$warnvirusrecip = 1;
#$warnbannedrecip = 1;


A próxima configuração é para estabelecer qual o email do notificador do sistema, eu usei o postmaster, mas você pode usar quem achar melhor.

$virus_admin = "postmaster\@$mydomain";
$mailfrom_notify_admin = "postmaster\@$mydomain";
$mailfrom_notify_recip = "postmaster\@$mydomain";
$mailfrom_notify_spamadmin = "postmaster\@$mydomain
$hdrfrom_notify_sender = "postmaster


Aqui definimos qual diretório vai ser usando para a quarentena.

$QUARANTINEDIR = '/var/virusmails';


Aqui definimos quais as extensões de arquivos queremos proibir. No meu caso eu barrei extensões (vbs, pif, src, bat, cmd, com) faça da maneira que achar melhor.

$banned_filename_re = new_RE (

# qr'^UNDECIPHERABLE$', # is or contains any undecipherable components
# qr'\.[^.]*\.(vbs|pif|scr|bat|cmd|com|dll)$'i, # double extension
qr'.\.(exe|vbs|pif|scr|bat|cmd|com)$'i, # banned extension - basic
# qr'.\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|exe|hlp|hta|inf|ins|isp|js|
# jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|scr|sct|shs|shb|vb|
# vbe|vbs|wsc|wsf|wsh)$'ix, # banned extension - long
# qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i, # banned extension - WinZip vulnerab.
# qr'^\.(zip|lha|tnef|cab)$'i, # banned file(1) types
# qr'^\.exe$'i, # banned file(1) types
# qr'^application/x-msdownload$'i, # banned MIME types
qr'^application/x-msdos-program$'i,
# qr'^message/partial$'i, qr'^message/external-body$'i, # block rfc2046
);


Aqui ficam as configurações para o antivírus, como eu disso vou usar o Mcafee Antivírus pra linux, eu comentei todas as outras linhas referentes a outros antivírus. Caso queira usar outro antivírus é só instalar o software o amavis_new cuida do resto sozinho.

### http://www.nai.com/
['NAI McAfee AntiVirus (uvscan)', 'uvscan',
'--secure -rv --mime --summary --noboot - {}', [0], [13],
qr/(?x) Found (?:\ the\ (.+)\ (?:virus|trojan) |
\ (?:virus|trojan)\ or\ variant\ ([^ ]+) |
:\ (.+)\ NOT\ a\ virus)/,
# sub {$ENV{LD_PRELOAD}='/lib/libc.so.6'},
# sub {delete $ENV{LD_PRELOAD}},
],


NOTA: Como explicado no começo do documento, a instalação do uvscan é bem simples. Então é só seguir as perguntas da instalação e pronto.

Para iniciar o amavis_new é só digitar o seguinte comando:

# amavisd -c /etc/amavisd.conf start

E para pará-lo é só digitar:

# amavisd stop

Eu criei um script bem simples em /etc/rc.d/rc.amavisd com o seguinte conteúdo:

#!/bin/sh

amavis_start() {
/usr/sbin/amavisd -c /etc/amavisd.conf start
}

amavis_stop() {
/usr/sbin/amavisd stop
}

case "$1" in
'start')
amavis_start
;;
'stop')
amavis_stop
;;
'restart')
amavis_stop
sleep 3
amavis_start
;;
*)
echo "usage $0 start|stop|restart"
esac


NOTA: Notem que é bem simples mesmo, foi só pra mostrar uma maneira de iniciar, parar e restartar o amavis, sinta-se livre para fazer da maneira que achar melhor :).

Bom, eu ainda não vou falar aqui como configurar o amavis_new com o Postfix, isso vai ser feito na próxima seção onde iremos cobrir os dois arquivos principais da configuração do Postfix.



Configuração do main.cf e master.cf


Aqui mostrarei o que é necessário para a configuração do MAIN.CF e MASTER.CF, as configurações aqui mostradas são simples, se você deseja saber sobre todas as configurações que pode ser feitas no MAIN.CF você pode olhar no site do Postfix o link é http://www.postfix.org/postconf.5.html o comando postconf -d lista as configurações padrões do main.cf.

Abaixo vai o MAIN.CF que eu uso, linhas que tem // são os comentários para o que as variáveis servem:

#=== CONFIGURAÇÕES
queue_directory = /var/spool/postfix/
program_directory = /usr/sbin
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
default_privs = nobody
default_transport = smtp
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
readme_directory = no
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
manpage_directory = /usr/local/man
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
smtpd_banner= ESMTP SUA EMPRESA // Define o banner
disable_vrfy_command=yes // Desabilita o comando vrfy
home_mailbox = Maildir/
html_directory = no
mail_version = 2.1.0 // Versão do Software
maps_rbl_domains =
maps_rbl_reject_code = 554
smtpd_recipient_limit = 100 // Nº de msgs que podem ser enviadas por vez.
message_size_limit = 10240000 // Tamanho da msg em bytes
smtpd_helo_required = yes // Se é obrigado a fazer helo
unknown_local_recipient_reject_code = 450
default_process_limit = 1000 // Quantidades de processos o valor padrão é 100
se seu server vai receber muitas requisições aumente isso para um valor maior,
no meu caso 1000 foi o suficiente.

#=== NOME DO DOMÍNIO
myhostname = maquina.domínio.com.br
mydomain = dominio.com.br
myorigin = $mydomain
mydestination = $mydomain, $transport_maps

#=== REDES p/ Relay
mynetworks = 127.0.0.1 // Aqui você pode colocar uma rede inteira ou somente
hosts, ex.: 200.200.200.0/24 ou 200.200.200.1

#=== Pop-Before-Smtp
// Aqui entra a configuração para o pop-before-smtp vejam que só é aceito
fazer relay mynetworks, quem estiver o email de acordo com fqdn (user@domain)
e quem estiver contido no arquivo pop-before-smtp.
smtpd_recipient_restrictions = permit_mynetworks, reject_non_fqdn_recipient,check_client_access hash:/etc/postfix/pop-before-smtp, reject_unauth_destination

#=== MYSQL
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /var/server/postfix
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_uid_maps = static:1010 // lembram quando criamos o usuário e grupo com uid e gid 1010
virtual_gid_maps = static:1010
transport_maps = virtual // Definimos o virtual como meio de transport

#=== Quota
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps= mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit = 200000000 // Estabelece quota de 20MB mas isso pode
ser definido para cada usuário nas tabelas do mysql.
virtual_maildir_limit_message = Lamento, a cota do usuário foi excedida, por favor tente mais tarde.
virtual_overquota_bounce = yes

#=== AMAVIS
// Aqui entra a configuração para o amavis_new
content_filter = smtp-amavis:[127.0.0.1]:10024


Abaixo vai o MASTER.CF que eu uso, linhas que tem // são os comentários para o que as variáveis servem, esse arquivo e muito extenso, vou colocar aqui somente as linhas que eu precisei alterar:

// Insira essas linhas no final do arquivo.

# AMAVIS + SPAMASSASSIN
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes

127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0


São configurações simples então não tenha medo de estudar e aprofundar-se mais nessas configurações. Falaremos agora sobre a instalação do Postfixadmin e SquirrelWebmail.


Instalação e Configuração do PostfixAdmin


Não tem maiores segredos a instalação do postfixadmin, faça download do software, descompacte-o na pasta onde ficam seus htmls do apache, no meu caso /usr/local/apache/htdocs, mas veja esse path no seu sistema, uma vez descompactado renomeie para um nome mais fácil ex.: postadmin ou postfixadmin, veja como seria no meu sistema:

# tar -xvzf postfixadmin-2.0.4.tgz
# mv postfixadmin-2.0.4 postadmin
# mv postadmin /usr/local/apache/htdocs


NOTA: O path onde ficam os htmls do apache pode variar de sistema para sistema, no meu caso fica em /usr/local/apache/htdocs, em algumas distribuições como o RedHat, Conectiva e Debian, costumam ficar em /var/www/html.

Feito isso vamos configurar o arquivo de configuração do postfixadmin config.inc.php, primeiro temos que renomeá-lo:

# mv config.inc.php.sample config.inc.php

Edite esse arquivo e alteres as configurações necessárias para o seu funcionamento, vou listar somente as opções que eu achei melhor alterar, mas leia com atenção o script:

# Definir a língua para português
$CONF['language'] = 'pt-br';

# Definir o tipo de banco de dados, host, usuário, senha e base de dados.
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'sua senha'; // Aqui você coloca sua senha.
$CONF['database_name'] = 'postfix';

# Email do administrador.
$CONF['admin_email'] = 'postmaster@netgo.com.br';

# Tipo de criptografia.
$CONF['encrypt'] = 'md5crypt';

# Tamanho da quota em MB.
$CONF['maxquota'] = '20';


Dentro da pasta admin, você vai encontrar arquivos .htaccess e .htpasswd vejam o conteúdo deles:

Arquivo .htaccess:

AuthUserFile /usr/local/apache/htdocs/postadmin/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Postfix Admin"
AuthType Basic


require valid-user


O arquivo .htpasswd contém os usuários que podem acessar essa parte de administração do postfixadmin, use o comando htpasswd para criar e alterar senhas desse arquivo.

# htpasswd .htpasswd admin

NOTA: Onde admin é o usuário que você quer que acesse a área de administração.

Feito essas configurações tente acessar o postfixadmin para ver se esta tudo certo:

# lynx http://localhost/postfixadmin/admin/

Se estiver tudo certo vai aparecer alguns links como, listar domínios, listar administradores etc... Se não apareceu nada disso, veja sua configuração do apache ou do postfixadmin.

Se tudo ocorreu sem problemas vamos tentar inserir uma conta só para testes, clique em adicionar nova conta de email, preencha da forma que achar melhor, esse usuário servira para nossos testes do pop e imap.


Instalação e Configuração do SquirrelWebmail


O SquirrelWebmail é um webmail muito bom na minha opinião, claro que tem vários por ai na internet, uebimiau mesmo é um deles, mas optei pelo squirrel por ser totalmente modular e de fácil configuração. Vamos a instalação dele:

Baixe o software, descompacte e coloque no seu diretório responsável pelos htmls do apache.

# tar -xvzf squirrelmail-1.4.2.tar.gz
# mv squirrelmail-1.4.2 webmail
# mv webmail /usr/local/apache/htdocs


NOTA: O path onde ficam os htmls do apache pode variar de sitema para sistema, no meu caso fica em /usr/local/apache/htdocs, em algumas distribuições como o RedHat, Conectiva e Debian, costumam ficar em /var/www/html.

Nos arquivos do squirrel encontraremos o seguinte arquivo configure, rode este script e altere as opções que você achar necessário para seu sistema.

# ./configure

O squirrel aceita vários plugins o que eu usei foi o do change_mysqlpass com esse plugin meus usuários podem mudar a senha diretamente do webmail, também é muito fácil a instalação deste plugin, baixe-o no site do squirrel e copie-o para a pasta plugins do squirrel é só descompactar editar o arquivo de configuração, rodar o script conf.pl para adicionar o plugin.

# cd /usr/local/apache/htdocs/webmail/plugins
# tar -xvzf change_mysqlpass-3.2-1.2.8.tar.gz


Edite o arquivo de configuração do change_mysqlpass e altere as seguintes opções:

$mysql_server = 'localhost';
$mysql_database = 'postfix';
$mysql_table = 'mailbox';
$mysql_userid_field = 'username';
$mysql_password_field ='password';
$mysql_manager_id = 'postfixadmin';
$mysql_manager_pw = 'sua senha'; // Coloque aqui sua senha


Rode o script de configuração, o script de configuração fica dentro da pasta config:

# ../config/conf.pl

Selecione o item 8 plugins, o change_mysqlpass vai estar listado em AVAIBLE PLUGINS apenas digite o número correspondente ao change_mysqlpass ele passara para INSTALED PLUGINS isso serve para todos os plugins que você deseja instalar.

Veja se está tudo correto acessando o squirrel:

# lynx http://localhost/webmail

Deve aparecer uma tela pedindo o usuário e senha.

NOTA: Lembrando que essas pastas postfixadmin e webmail, foram colocadas na raiz do servidor web, se você usa virtualdomains no seu apache, coloque essas pastas em seus diretórios específicos



Testando o Sistema


Deixei para o final todos os testes, você deve ter criado um domínio e uma conta de email no postfixadmin, caso não criou vou colocar aqui como criar no mysql mesmo, para podermos testar todo o sistema.

Digite o comando abaixo para entrar no mysql acessando a base de dados POSTFIX:

# mysql -D postfix -p
Enter Password:

Estamos no console do mysql vamos usar a seguinte sintaxe para criamos os domínios e os emails, vale lembrar que fazer isso pelo postfixadmin é muito mais fácil.

Em primeiro lugar vamos criar o domínio:

mysql> INSERT INTO domain (domain, description, created, modified, active) VALUES ('teste.com.br' , 'Meu domínio' , NOW(), NOW() , '1');

Agora iremos criar o alias do usuário:

mysql> INSERT INTO alias (address, goto, domain, created, modfied, active) VALUES ('teste@teste.com.br', 'teste@teste.com.br', 'teste.com.br', NOW(), NOW(), '1');

Agora iremos criar o usuário:

NOTA: Por padrão o postfixadmin cria todos os usuários seguidos do domínio, para poder diferenciar usuários, quando montei esse ambiente na provedora o pessoal queria que usuários da provedora não precisasse digitar o email completo para logar no webmail, então tive que fazer algumas alterações no código do postfixadmin, caso você queira esse código me mande um email.

mysql> INSERT INTO mailbox (username, password, name, maildir, quota, domain, created, modified, active) VALUES ('teste@teste.com.br', encrypt('123'), 'teste', '/var/server/postfix/teste.com.br/teste/Maildir', '20000000', 'teste.com.br', NOW(), NOW(), '1');

Estamos criando um usuário com seu home em /var/server/postfix/teste.com.br/teste/Maildir quota de 20MB (20000000) e sua conta esta ativa 1. Vamos testar todos os daemons, se ainda não estão rodando levante-os agora: Nota: Estes exemplos são para o Slackware.

# /etc/rc.d/rc.popimap start
# /etc/rc.d/rc.amavis start
# /etc/rc.d/rc.popbsmtp start
# postfix start

O postfix já tem o script pronto, você pode rodá-lo de qualquer ponto do sistema.

Vamos testar o amavis:

# telnet localhost 10024

Deve aparecer algo assim:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready

# telnet localhost 10025

Deve aparecer algo assim:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ESMTP SUA EMPRESA

Vamos testar o postfix:

# telnet localhost 25

Deve aparecer algo parecido:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ESMTP SUA EMPRESA

Isso indica que o postfix esta rodando perfeitamente, caso não funcione de uma olhada nos logs de emails, /var/log/maillog, veja qual foi o erro que apareceu.

Tente mandar um email para o usuário teste@teste.com.br:

220 ESMTP SUA EMPRESA
helo teste
mail from: teste@teste.com.br
rcpt to: teste@teste.com.br
data
354 End data with .
Digite aqui seu texto.
. // ponto para terminar
250 Ok: queued as 92F2214812C // Esse número e aleatório deve aparecer outro.

Vamos ver se o email chegou:

# cd /var/server/postfix/teste.com.br/teste/Maildir/new
# cat 92F2214812C.V801I23ccd8.server,S=1023

Return-Path:
X-Original-To: teste@teste.com.br
Delivered-To: teste@teste.com.br
Received: from localhost (localhost [127.0.0.1])
by server.teste.com.br (Postfix) with ESMTP id 92F2214812C
for ; Mon, 17 May 2004 17:40:30 -0300 (BRT)
Received: from server.teste.com.br ([127.0.0.1])
by localhost (server.teste.com.br [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id 04649-08 for ;
Mon, 17 May 2004 17:40:29 -0300 (BRT)
Received: from teste (localhost [127.0.0.1])
by server.teste.com.br (Postfix) with SMTP id 6FC17147BC0
for ; Mon, 17 May 2004 17:39:39 -0300 (BRT)
Message-Id: <20040517203939.6fc17147bc0@server.teste.com.br>
Date: Mon, 17 May 2004 17:39:39 -0300 (BRT)
From: teste@teste.com.br
To: undisclosed-recipients: ;
X-Virus-Scanned: by amavisd-new at teste.com.br
X-Spam-Status: No, hits=3.5 tagged_above=3.0 required=6.3 tests=BAYES_44,
MSGID_FROM_MTA_SHORT, NO_REAL_NAME
X-Spam-Level: ***

Digite aqui seu texto.

Beleza nosso postfix está funcionando 100%.

Agora vamos testar o POP3:

# telnet localhost 110

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user teste@teste.com.br
+OK Password required.
Pass 123
+OK logged in.
quit

Beleza nosso servidor pop3 também esta funcionando corretamente.

Agora vamos testar o IMAP:

# telnet localhost 143

Trying 127.0.0.1...
Connected to localhost.
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-2004 Double Precision, Inc. See COPYING for distribution information.
0 login teste@teste.com.br 123
0 OK LOGIN Ok.
0 logout

Beleza nosso servidor imap também esta funcionando corretamente.



Fontes de pesquisa


Site Postfix:
http://www.postifx.org
Documentação muito boa, principalmente dos arquivos de configuração.

Leonardo Rodrigues :)
http://www.solutti.com.br
Obrigado Leonardo por ter agüentando as minhas perguntas e ter respondido a todas elas.

Documentação de Marco A. S. Máximo
http://www.linuxdicas.com.br/tutoriais1/tutorial_courier_mysql_postfix.txt

Site Amavis_new:
http://www.ijs.si/software/amavisd/#doc
Muito bem documentado o site do amavis_new, recomendo a leitura.

Recomendo também leitura em todos os README dos sources.


O Autor


Kleber Rocha
klinuxk@hotmail.com.br
Administrador de Redes e Sistemas
PoliPrint Ltda.
http://www.poliprint.com.br




Joomla Day Brasil 2009 - Rio de Janeiro

Joomla Day Brasil 2009

A Cidade Maravilhosa foi eleita sede do Joomla!Day Brasil 2009, após uma votação acirrada.

O evento será realizado na Escola de Comando e Estado-Maior do Exército (ECEME), aos pés do Pão de Açúcar, com um auditório para trezentas pessoas e amplo espaço para coffee-break e networking.

Grandes desenvolvedores, empresas e colaboradores do Joomla! confirmaram presença. O evento contará com palestras para usuários iniciantes e desenvolvedores, estudos de caso e estimulará o networking. Vamos priorizar este último, pois desejamos que a rede seja expandida. Assim, vamos caminhar todos juntos para melhorar o gerenciamento de conteúdo na internet.

Mais informações : www.joomladaybrasil.org/2009

Debian Day 2009 - Manaus

Debian Day é um evento realizado anualmente por vários grupos de Software Livre em todo o mundo. Também conhecido por Dia Debian e Dia D, este evento comemora o aniversário da distribuição GNU/Linux Debian, que neste ano (2009) completa 16 anos de existência.

Em Manaus, o Debian Day é realizado pelo Grupo de Usuários Debian do Amazonas, conhecido por Debian-AM, sendo patrocinado pela UniLaSalle e com o apoio do Projeto Zagaia, AIT Technologies, Gráfica Silva, OrangeTel, SafeNode, Hospital e Maternidade Santo Alberto e Águacrim/Natucrim.

Neste Debian Day, em Manaus, teremos um convidado especial, o criador e mantenedor do portal Viva o Linux (http://vivaolinux.com.br), Fábio Berbert de Paula.


Data: 22 de Agosto de 2009

Local: UniLaSalle : Av. D. Pedro I, 151 - D. Pedro I. Em frente à praça de alimentação do D. Pedro.

Hora: 9h - 17:30h (1:30h de almoço - das 12h às 13:30h)

Entrada: 2Kg de alimentos não perecíveis, exceto sal.

Mais informações: http://diadebian.org/am/2009/


quarta-feira, 13 de maio de 2009

SSH sem senha

Procedimento de SSH sem senha (conexão segura)

1 - O usuário terá que gerar o arquivo primeiramente em sua máquina ( Lembrando esse procedimento é de servidor linux para linux - para windows terá que solicitar ao especialista windows, pois não tenho esse conhecimento):
2 - Executar o comando:
ssh-keygen -b 1024 -t rsa

Será gerada uma chave privada e uma chave pública. Com versões antigas do SSH, essas chaves ficarão armazenadas em ~/.ssh/identity e ~/.ssh/identity.pub; com versões novas, serão armazenadas em ~/.ssh/id_rsa.pub. ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub.

3 - Irá solicitar uma frese secreta, como abaixo:
PS: Eu deixo sempre em branco !

Enter file in which to save the key (/home/bsoares/.ssh/id_rsa):
Created directory '/home/bsoares/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/bsoares/.ssh/id_rsa.
Your public key has been saved in /home/bsoares/.ssh/id_rsa.pub.

4 - Em seguida, adicone o conteúdo do arquivo da chave pública dentro de ~/.ssh/authorized_keys, para isso utilize o seguinte comando:

cat ~/.ssh/id_rsa.pub > authorized_keys

5 - Feito isso, instale a chave pública no servidor remoto que deseja se conectar copiando o arquivo “authorized_keys” através do comando:

#scp ~/.ssh/authorized_keys usuario@ip_servidor:~/.ssh/

Após realizar o procedimento descrito acima, teste o acesso ao servidor:

$ssh usuario@ip_servidor

Att.

quinta-feira, 2 de abril de 2009

Configuração de disco do storage via HDLM

Sobre o Multi Path (HDLM) do Storage Hitachi

Conforme o desenho, pode-se observar que será necessário um software multipath para controlar os vários caminhos que os servidores “server-spo-la-1″ e “server-spo-la-2″ podem fazer para chegar até os discos do storage.

Para exemplificar, o server-spo-la-1 pode fazer os seguintes caminhos:
- Passar pela fibra saindo pela HBA0 até o Switch 1, e chegar no storage pela Controller 0, porta A;
- Passar pela fibra saindo pela HBA1 até o Switch 2, e chegar no storage pela Controller 0, porta B;
- Passar pela fibra saindo pela HBA1 até o Switch 2, e chegar no storage pela Controller 1, porta A;
- Passar pela fibra saindo pela HBA0 até o Switch 1, e chegar no storage pela Controller 0, porta B;

É aí que entra o HDML (Hitachi Dynamic Link Manager). O problema é que para cada caminho que o SO faz até o Storage, ele encontra discos e “pensa” que são discos diferentes. Portanto, se você tem 25 LUNs exportadas para o server-spo-la-1, ele irá “enxergar” 100 discos (25*4=100). Será algo parecido com isso:

root@server-spo-la-1 ~# fdisk -l 2> /dev/null | grep "38.6 GB"
Disk /dev/sdb: 38.6 GB, 38654705664 bytes
Disk /dev/sdc: 38.6 GB, 38654705664 bytes
Disk /dev/sdd: 38.6 GB, 38654705664 bytes
Disk /dev/sde: 38.6 GB, 38654705664 bytes
Disk /dev/sdf: 38.6 GB, 38654705664 bytes
Disk /dev/sdg: 38.6 GB, 38654705664 bytes
Disk /dev/sdh: 38.6 GB, 38654705664 bytes
Disk /dev/sdi: 38.6 GB, 38654705664 bytes
Disk /dev/sdj: 38.6 GB, 38654705664 bytes
Disk /dev/sdk: 38.6 GB, 38654705664 bytes
Disk /dev/sdl: 38.6 GB, 38654705664 bytes
Disk /dev/sdm: 38.6 GB, 38654705664 bytes
Disk /dev/sdn: 38.6 GB, 38654705664 bytes
Disk /dev/sdo: 38.6 GB, 38654705664 bytes
Disk /dev/sdp: 38.6 GB, 38654705664 bytes
Disk /dev/sdq: 38.6 GB, 38654705664 bytes
Disk /dev/sdr: 38.6 GB, 38654705664 bytes
Disk /dev/sds: 38.6 GB, 38654705664 bytes
Disk /dev/sdt: 38.6 GB, 38654705664 bytes
Disk /dev/sdu: 38.6 GB, 38654705664 bytes
Disk /dev/sdv: 38.6 GB, 38654705664 bytes
Disk /dev/sdw: 38.6 GB, 38654705664 bytes
Disk /dev/sdx: 38.6 GB, 38654705664 bytes
Disk /dev/sdy: 38.6 GB, 38654705664 bytes
Disk /dev/sdz: 38.6 GB, 38654705664 bytes
Disk /dev/sdaa: 38.6 GB, 38654705664 bytes
Disk /dev/sdab: 38.6 GB, 38654705664 bytes
Disk /dev/sdac: 38.6 GB, 38654705664 bytes
Disk /dev/sdad: 38.6 GB, 38654705664 bytes
Disk /dev/sdae: 38.6 GB, 38654705664 bytes
Disk /dev/sdaf: 38.6 GB, 38654705664 bytes
Disk /dev/sdag: 38.6 GB, 38654705664 bytes

Completamente bizarro 8-)

Instalação do HDLM

O processo de instalação é um tanto chato, e cada servidor precisa de uma licença diferente. Em termos gerais, seria mais ou menos isso:

-> Verificar se o server acha os discos com um fdisk -l

-> Copiar o license key para:
/var/tmp/hdlm_license
/etc/opt/DynamicLinkManager/dlm.lic_key

-> Rodar o /media/cdrom/installhdml

-> No /etc/profile

PATH=$PATH:/opt/DynamicLinkManager/bin ; export PATH

-> Reboot

-> Verificar se o fdisk -l mostra mais discos :)

Se tudo der certo, além dos 100 discos de outrora, seu servidor irá enxergar mais 25 (!!!) mas agora com outro nome. E será esse device que você irá utilizar para guardar os dados:

Disk /dev/sddlmaa: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmab: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmac: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmad: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmae: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmaf: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmag: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmah: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmai: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmaj: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmak: 38.6 GB, 38654705664 bytes
Disk /dev/sddlmal: 38.6 GB, 38654705664 bytes

Configuração do HDLM

Caso você queira testar se o HDML está mesmo funcionando, você poderia tirar uma fibra enquanto copia os dados, chutar o switch ou algo do tipo :-)

# dlnkmgr set -lb on
# dlnkmgr set -pchk on -intvl 5
# dlnkmgr set -afb on -intvl 5
# dlnkmgr set -ellv 2
# dlnkmgr set -systflv 1
# dlnkmgr set -elfs 1000
# dlnkmgr set -elfn 5
# dlnkmgr set -systfs 2000
# dlnkmgr set -systfn 10

Para verificar:

# dlnkmgr view -path | more
# dlnkmgr view -sys
# dlnkmgr view -lu | more

Este setup irá ativar o Load Balance, verificação de PATH, auto Failback em caso de falhas e etc.

Configurando o LVM

Existe ainda mais um cuidado a ser tomado antes de você conseguir brincar com o Storage. O LVM é uma ferramenta muito esperta, e ele identifica cada disco com uma assinatura, individual e intransferível, mais ou menos como a sua impressão digital.

Portanto, ao adicionar um disco do HDLM ao LVM, você verá algo parecido com isso:

root@server-la-2 ~# pvcreate /dev/sddlmaa
Physical volume “/dev/sddlmaa” successfully created

root@server-la-2 ~# pvs
Found duplicate PV sXzKX9RMVxSafKzfDJP78Zr4qYFPNPcO: using /dev/sdb not /dev/sddlmaa
Found duplicate PV sXzKX9RMVxSafKzfDJP78Zr4qYFPNPcO: using /dev/sdch not /dev/sdb
Found duplicate PV sXzKX9RMVxSafKzfDJP78Zr4qYFPNPcO: using /dev/sdbf not /dev/sdch
Found duplicate PV sXzKX9RMVxSafKzfDJP78Zr4qYFPNPcO: using /dev/sdad not /dev/sdbf
Found duplicate PV sXzKX9RMVxSafKzfDJP78Zr4qYFPNPcO: using /dev/sddlmaa not /dev/sdad
PV VG Fmt Attr PSize PFree
/dev/sda2 Vol_LVM lvm2 a- 408.17G 0
/dev/sddlmaa lvm2 — 36.00G 36.00G

O que acontece é que o LVM está vendo o mesmo disco (mesma LUN, na verdade) pelos 04 caminhos diferentes e mais o novo caminho, do HDLM.

O que você deve fazer, é editar o arquivo /etc/lvm/lvm.conf e criar um filtro separando os devices que devem de fato serem manipulados pelo LVM, algo deste tipo:

filter = [ "a/sda1-9$/" "a/sddla-za-za-z$/" "r/.*/" ]

Após isso, basta rodar um ‘vgscan -vv’ para refazer o cache.

Passos rápidos para configurar o LVM no Storage

Papo rápido:


# for i in `fdisk -l 2> /dev/null | grep "sddl" | awk '{print $2}' | cut -d : -f 1`; do pvcreate $i; done


# vgcreate -Ay AMS500 /dev/sddlmaa /dev/sddlmab /dev/sddlmac /dev/sddlmad \
/dev/sddlmae /dev/sddlmaf /dev/sddlmag /dev/sddlmah /dev/sddlmai /dev/sddlmaj \
/dev/sddlmak /dev/sddlmal /dev/sddlmam /dev/sddlman /dev/sddlmao /dev/sddlmap \
/dev/sddlmba /dev/sddlmbb /dev/sddlmbc /dev/sddlmbd /dev/sddlmbe /dev/sddlmbf \
/dev/sddlmbg /dev/sddlmbh /dev/sddlmbi /dev/sddlmbj /dev/sddlmbk /dev/sddlmbl


# lvcreate -Ay -L 1.2T --name u01 AMS500

# mkfs.ext3 /dev/AMS500/u01

# mkdir /u01; mount /dev/AMS500/u01 /u01

Pronto! 1.2 TB para brincar :-D

Ganhando desempenho fazendo Stripe no LVM

É possível fazer Stripe do lado do Sistema Operacional, visando um maior desempenho :)

Cada servidor está “enxergando” 28 LUNs do Storage, como se cada LUN fosse um disco.

Utilizei o “dd” para criar arquivos de 10 e 40 GB nos servidores, tanto na “Barriga” da máquina (Dell PowerEdge 2950 em RAID 10) quanto no Storage. Depois disso, irei utilizar nos servidores Stripes com granulação de 128 KB, sempre no FileSystem com Block Size de 4KB para comparar:

# Teste Storage Billing
# LVM padrão (sem stripe) e Block Size de 4KB

=> 10 GB com LVM default:
root@server-la-1 ~# Storage: 1m38.939s
root@server-la-1 ~# Barriga: 1m22.395s

root@server-la-2 ~# Storage: 1m57.203s
root@server-la-2 ~# Barriga: 1m15.134s

=> 40 GB com LVM default:
root@server-la-1 ~# Storage: 10m23.250s
root@server-la-1 ~# Barriga: 06m04.812s

root@server-la-2 ~# Storage: 11m22.150s
root@server-la-2 ~# Barriga: 06m01.234s

# lvcreate -Ay -i 28 -I 128 -l258020 –name u01 AMS500
# 28 Stripes com granulação de 128 KB cada (Block size=4096)

=> 10 GB com LVM + Stripe 128K
root@server-la-2 ~# Storage: 1m02.411s
root@server-la-2 ~# Barriga: 1m18.440s

=> 40 GB com LVM + Stripe 128K
root@server-la-2 ~# Storage: 4m49.578s
root@server-la-2 ~# Barriga: 5m50.452s

# lvcreate -Ay -i 28 -I 64 -l258020 –name u01 AMS500
# 28 Stripes com granulação de 64 KB cada (Block size=4096)

=> 10 GB com LVM + Stripe 64K
root@server-la-1 ~# Storage: 1m42.396s
root@server-la-1 ~# Barriga: 1m44.903s

=> 40 GB com LVM + Stripe 64K
root@server-la-1 ~# Storage: 5m04.977s
root@server-la-1 ~# Barriga: 5m55.737s

quarta-feira, 25 de março de 2009

HBA Solaris

bash-2.03# luxadm probe
No Network Array enclosures found in /dev/es

Found Fibre Channel device(s):
Node WWN:50070e800475e108 Device Type:Disk device
Logical Path:/dev/rdsk/c5t50060E800475D109d0s2
Node WWN:50070e800475e108 Device Type:Disk device
Logical Path:/dev/rdsk/c5t50060E800475D109d1s2
Node WWN:50070e800475e108 Device Type:Disk device
Logical Path:/dev/rdsk/c5t50060E800475D109d2s2
Node WWN:50070e800475e108 Device Type:Disk device
Logical Path:/dev/rdsk/c5t50060E800475D109d3s2
Node WWN:50070e800475e108 Device Type:Disk device
Logical Path:/dev/rdsk/c5t50060E800475D109d4s2
Node WWN:50070e800475e108 Device Type:Disk device
Logical Path:/dev/rdsk/c5t50060E800475D109d5s2
Node WWN:50070e800475e108 Device Type:Disk device
Logical Path:/dev/rdsk/c5t50060E800475D109d6s2
Node WWN:50070e800475e108 Device Type:Disk device
Logical Path:/dev/rdsk/c5t50060E800475D109d7s2

HBA card WWN

# prtconf -vp | grep wwn
port-wwn: 2100001b.3202f94b
node-wwn: 2000001b.3202f94b
port-wwn: 210000e0.8b90e795
node-wwn: 200000e0.8b90e795

#prtconf -vp | more

Node 0xf00e2f80
assigned-addresses: 81000810.00000000.00000300.00000000.00000100.82000814.00000000.00100000.00000000.00002000.82000830.00000000.00140000.00000000.00040000
version: ‘QLA2460 Host Adapter Driver(SPARC): 1.11 10/03/05′
manufacturer: ‘QLGC’
model: ‘QLA2460 ‘
name: ‘SUNW,qlc’
port-wwn: 2100001b.3202f94b
node-wwn: 2000001b.3202f94b
reg: 00000800.00000000.00000000.00000000.00000000.01000810.00000000.00000000.00000000.00000100.02000814.00000000.00000000.00000000.00001000
compatible: ‘pci1077,140.1077.140.2′ + ‘pci1077,140.1077.140′ + ‘pci1077,140′ + ‘pci1077,2422.2′ + ‘pci1077,2422′ + ‘pciclass,c0400′ + ‘pciclass,0400′
short-version: ‘1.11 10/03/05′
#size-cells: 00000000
#address-cells: 00000002
device_type: ’scsi-fcp’
fcode-rom-offset: 0000aa00
66mhz-capable:
fast-back-to-back:
devsel-speed: 00000001
latency-timer: 00000040
cache-line-size: 00000010
max-latency: 00000000
min-grant: 00000040
interrupts: 00000001
class-code: 000c0400
subsystem-id: 00000140
subsystem-vendor-id: 00001077
revision-id: 00000002
device-id: 00002422
vendor-id: 00001077

Node 0xf00ee398
#size-cells: 00000000
#address-cells: 00000004
reg: 00000000.00000000
device_type: ‘fp’
name: ‘fp’

Node 0xf00eeaa0
device_type: ‘block’
compatible: ’ssd’
name: ‘disk’

Node 0xf00ef91c
assigned-addresses: 81001010.00000000.00000400.00000000.00000100.82001014.00000000.
version: ‘QLA2460 Host Adapter Driver(SPARC): 1.11 10/03/05′
manufacturer: ‘QLGC’
model: ‘QLA2460 ‘
name: ‘SUNW,qlc’
port-wwn: 210000e0.8b90e795
node-wwn: 200000e0.8b90e795
reg: 00001000.00000000.00000000.00000000.00000000.01001010.00000000.
compatible: ‘pci1077,140.1077.140.2′ + ‘pci1077,140.1077.140′ + ‘pci1077,140′ + ‘pci1077,2422.2′ + ‘pci1077,2422′ + ‘pciclass,c0400′ + ‘pciclass,0400′
short-version: ‘1.11 10/03/05′
#size-cells: 00000000
#address-cells: 00000002
device_type: ’scsi-fcp’
fcode-rom-offset: 0000aa00
66mhz-capable:
fast-back-to-back:
devsel-speed: 00000001
latency-timer: 00000040
cache-line-size: 00000010
max-latency: 00000000
min-grant: 00000040
interrupts: 00000001
class-code: 000c0400
subsystem-id: 00000140
subsystem-vendor-id: 00001077
revision-id: 00000002
device-id: 00002422
vendor-id: 00001077

Node 0xf00fad34
#size-cells: 00000000
#address-cells: 00000004
reg: 00000000.00000000
device_type: ‘fp’
name: ‘fp’

Node 0xf00fb43c
device_type: ‘block’
compatible: ’ssd’
name: ‘disk’

For Solaris 8 and 9:
Run the following script to determine the WWNs of the HBAs that are currently being utilized:
#!/bin/sh for i in `cfgadm |grep fc-fabric|awk ‘{print $1}’`;

do

dev=”`cfgadm -lv $i|grep devices |awk ‘{print $NF}’`” wwn= \

“`luxadm -e dump_map $dev |grep ‘Host Bus’|awk ‘{print $4}’`”

echo “$i: $wwn” done

To show link status of card

bash-2.03# luxadm -e port

Found path to 2 HBA ports

/devices/ssm@0,0/pci@18,700000/SUNW,qlc@2/fp@0,0:devctl CONNECTED
/devices/ssm@0,0/pci@19,700000/SUNW,qlc@2/fp@0,0:devctl CONNECTED

To see the WWN’s (using address given to you from previous commands),

it is the last one that specifies it is a HBA, so the port WWN here is 50070e800475e108

bash-2.03# luxadm -e dump_map /devices/ssm@0,0/pci@18,700000/SUNW,qlc@2/fp@0,0:devctl
Pos Port_ID Hard_Addr Port WWN Node WWN Type
0 642113 0 50070e800475e108 50070e800475e108 0×0 (Disk device)
1 643f13 0 550070e800475e108 50070e800475e108 0×0 (Disk device)
2 643913 0 2100001b3205e828 2000001b3205e828 0×1f (Unknown Type,Host Bus Adapter)

SAN Foundation Software versions display as such

bash-2.03# modinfo | grep SunFC
38 102bcd25 209b8 150 1 fcp (SunFC FCP v20070703-1.98)
39 102d4071 855c - 1 fctl (SunFC Transport v20070703-1.41)
42 102ead69 164e0 149 1 fp (SunFC Port v20070703-1.60)
44 10300a79 cd574 153 1 qlc (SunFC Qlogic FCA v20070212-2.19)

To show Sun/Qlogic HBA’s

bash-2.03# luxadm qlgc

Found Path to 2 FC100/P, ISP2200, ISP23xx Devices

Opening Device: /devices/ssm@0,0/pci@18,700000/SUNW,qlc@2/fp@0,0:devctl
Detected FCode Version: ISP2312 Host Adapter fcode version 1.16 11/15/06

Opening Device: /devices/ssm@0,0/pci@19,700000/SUNW,qlc@2/fp@0,0:devctl
Detected FCode Version: ISP2312 Host Adapter fcode version 1.16 11/15/06
Complete

To show all vendor HBA’s

bash-2.03# luxadm fcode_download -p

Found Path to 0 FC/S Cards
Complete

Found Path to 0 FC100/S Cards
Complete

Found Path to 2 FC100/P, ISP2200, ISP23xx Devices

Opening Device: /devices/ssm@0,0/pci@18,700000/SUNW,qlc@2/fp@0,0:devctl
Detected FCode Version: ISP2312 Host Adapter fcode version 1.16 11/15/06

Opening Device: /devices/ssm@0,0/pci@19,700000/SUNW,qlc@2/fp@0,0:devctl
Detected FCode Version: ISP2312 Host Adapter fcode version 1.16 11/15/06
Complete

Found Path to 0 JNI1560 Devices.
Complete

Found Path to 0 Emulex Devices.
Complete

Administração do Veritas no Solaris

Neste artigo é sobre Administração com Veritas Volume Manager e Filesystem, mostrando que não é muito difícil administrar discos e filesystems com Veritas.

Usarei o Veritas Volume Manager e Filesystem 4.1 com Solaris 10.

Por que utilizar o Veritas Volume Manager e Filesystem?

Veritas tem várias vantagens e uma delas é que é muito mais fácil verificar se os discos estão ativos e verificar espaços. Veritas passa muita confiança na hora de adicionar e remover o discos, aumentar filesystems e decrementar tudo on-line.

Vamos começar a entender os comandos que serão utilizado para a criação de um filesystem.

Inicialmente vamos entender o conceito abaixo:

DG é um grupo de volume e pode consistir de um ou mais volumes físicos. Pode haver mais de um grupo de volume no sistema. Uma vez criado o grupo de volume, e não o disco, é a unidade básica de armazenamento de dados (um disco virtual compondo-se de um ou mais discos físicos).

LV é o volume lógico e pode conter um número de volumes físicos "discos" ou representar apenas uma porção de um volume físico. Uma vez criados, volumes lógicos podem ser utilizados como partições de disco regulares - para criar um sistema de arquivos ou um dispositivo de troca.

Para saber qual ou quais são os VG's "grupo de volumes" que estão configurado no sistema operacional, vamos utilizar o comando vxdg list, como podemos ver abaixo:

#vxdg list
NAME STATE ID
rootdg enabled 1143490758.6.guairaca

Poderíamos ter vários VG's. Neste caso só temos um VG.

Vamos verificar quanto tem de espaço para criarmos e/ou aumentar um filesystem.

# vxassist -g rootdg maxsize
Maximum volume size: 468807680 (228910Mb)

No VG rootdg tem 228Gbyte.

Bom, agora que já sabemos que temos 228Gbyte livres, vamos criar um filesystem para o client Oracle com 50Gbyte.

#vxassist -g rootdg make oracle_client 50g

O nome do Volume Lógico será oracle_client e o nome do filesystem pode ser qualquer um. Claro que tem que ser um bom senso.

# mkfs -F vxfs -o largefiles /dev/vx/rdsk/rootdg/oracle_client

Agora vamos criar um ponto de montagem. Neste caso será /oracle e é claro que poderíamos colocar qualquer nome.

#mkdir /oracle

Agora vamos montar o filesystem:

#mount -F vxfs /dev/vx/dsk/rootdg/oracle_client /oracle

Sempre que você criar um filesystem você terá que colocar no arquivo /etc/vfstab.

Agora é só mudar o dono do diretório oracle.

#chown oracle:dba /oracle

Bom pessoal, espero ter ajudado com este artigo. Abraços e até mais!

Fonte: Marcelo Barros (Plugmasters)