POSTFIX

POSTFIX COM DOMÍNIOS VIRTUAIS

Antes de começar: Não troque a localização “/var/spool/maildir” por outra, como ex: “/var/spool/mail”. Se você fizer isto não será possivel entregar e-mails para os usuários.

+ Configurando MySQL

1 – Instale os pacotes: mysql-client mysql-server mysql-common libmysqlclient10-dev

apt-get install mysql-client mysql-server mysql-common libmysqlclient10-dev

IMPORTANTE: Antes de continar configure o arquivo “/etc/hosts” assim:

vi /etc/resolv.conf

127.0.0.1 localhost localhost.localdomain ha-primary-web

* Esta modicação é para o MySQL conseguir se conectar em “localhost”

2 – Configure a segurança no MySQL

mysql_secure_installation

3 – Faça o MySQL gerar logs, editando o arquivo “/etc/mysql/my.cnf”

vi /etc/mysql/my.cnf

log = /var/log/mysql.log

TESTE: Reinicie o mysql e veja o arquivo “/var/log/mysql.log”

/etc/init.d/mysql restart
tail -f /var/log/mysql.log

4 – Crie a base de dados “postfixdb”

mysql -u root -psenha
mysql> CREATE DATABASE postfixdb;

5 – Crie o usuário “vmail” e defina sua senha

mysql> USE mysql;
mysql> grant all on postfixdb.* to vmail@127.0.0.1 identified by '123456';
mysql> FLUSH PRIVILEGES;

* Você pode testar o acesso com o novo usuário criado no MySQL com o comando:

mysql -u vmail -p123456 -h 127.0.0.1

6 – Crie a tabela de apelidos “alias”

mysql> USE postfixdb;
mysql> CREATE TABLE alias (
       address varchar(255) NOT NULL default '',
       goto text NOT NULL,
       domain varchar(255) NOT NULL default '',
       create_date datetime NOT NULL default '0000-00-00 00:00:00',
       change_date datetime NOT NULL default '0000-00-00 00:00:00',
       active tinyint(4) NOT NULL default '1',
       PRIMARY KEY (address)
       ) TYPE=MyISAM COMMENT='Virtual Aliases - mysql_virtual_alias_maps';

7 – Crie a tabela de domínios “domain”

mysql> USE postfixdb;
mysql> CREATE TABLE domain (
       domain varchar(255) NOT NULL default '',
       description varchar(255) NOT NULL default '',
       transport varchar(255) NOT NULL default 'maildrop',
       create_date datetime NOT NULL default '0000-00-00 00:00:00',
       change_date datetime NOT NULL default '0000-00-00 00:00:00',
       active tinyint(4) NOT NULL default '1',
       PRIMARY KEY (domain)
       ) TYPE=MyISAM COMMENT='Virtual Domains - mysql_virtual_domains_maps';

8 – Crie a tabela das contas de e-mail “mailbox”

mysql> USE postfixdb;
mysql> CREATE TABLE mailbox (
       username varchar(255) NOT NULL default '',
       password varchar(255) NOT NULL default '',
       name varchar(255) NOT NULL default '',
       home char(255) default '/var/spool/maildir',
       maildir varchar(255) NOT NULL default '',
       quota varchar(255) NOT NULL default '100000000S',
       domain varchar(255) NOT NULL default '',
       create_date datetime NOT NULL default '0000-00-00 00:00:00',
       change_date datetime NOT NULL default '0000-00-00 00:00:00',
       active tinyint(4) NOT NULL default '1',
       passwd_expire enum('N','Y') default 'N',
       uid int(10) unsigned default '120',
       gid int(10) unsigned default '120',
       complete_home varchar(255) NOT NULL default '',
       PRIMARY KEY (username)
       ) TYPE=MyISAM
       COMMENT='Virtual Mailboxes - mysql_virtual_mailbox_maps';

+ Courier-IMAP / Courier-POP

9 – Instale os pacotes courier-authmysql courier-imap courier-pop

apt-get install courier-imap courier-authmysql courier-pop

10 – Edite o arquivo “/etc/courier/authmysqlrc” para ficar assim:

vi /etc/courier/authmysqlrc

MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME vmail
MYSQL_PASSWORD 123456
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE postfixdb
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

11 – Faça o courier trabalhar com MySQL editando o arquivo: “/etc/courier/authdaemonrc”

vi /etc/courier/authdaemonrc

# Troque o parametro authmodulelist="authpam" para:
authmodulelist="authmysql"

12 – Reinicie os serviços do courier IMAP e POP e veja se estão rodando

/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-authdaemon restart
netstat -nl | egrep "(110|143)"

+ Maildrop

13 – Baixe o código fonte do Maildrop

mkdir /usr/local/src/maildrop && cd /usr/local/src/maildrop
apt-get build-dep maildrop
apt-get source maildrop
cd maildrop-1.5.3

14 – Edite o arquivo ..debian/rules e modifique a seguinte parte:

vi debian/rules

# Troque isto:

# trust on the auto-detect of qmail failing (for sendmail compability)
[ -f config.status ] || CPPFLAGS="$CFLAGS" ./configure --prefix=/usr \
--mandir='${prefix}/share/man' --libexecdir='${prefix}/lib/maildrop' \
--sysconfdir=/etc \
--enable-use-dotlock=1 --enable-use-flock=1 \
--enable-sendmail=/usr/sbin/sendmail --enable-maildirquota
[ -f maildrop/maildrop ] || make

# Por isto:

[ -f config.status ] || CPPFLAGS="$CFLAGS" ./configure --prefix=/usr \
--mandir='${prefix}/share/man' --libexecdir='${prefix}/lib/maildrop' \
--sysconfdir=/etc/maildrop \
--enable-maildrop-uid=120 \
--enable-maildrop-gid=120 \
--enable-syslog=1 \
--enable-maildropmysql \
--enable-use-dotlock=1 --enable-use-flock=1 \
--enable-sendmail=/usr/sbin/sendmail --enable-maildirquota
[ -f maildrop/maildrop ] || make

15 – Compile o código fonte e prepare o ambiente para a instalação do Maildrop

apt-get install fakeroot
dpkg-buildpackage -rfakeroot -uc -b
mkdir /etc/maildrop
cp maildropmysql.config /etc/
cp maildir/quotawarnmsg /etc/maildrop

16 – Crie o grupo e usuário “maildrop” com uid e gid “120”

groupadd -g 120 maildrop
useradd -u 120 -g 120 maildrop

17 – Instalando o Maildrop

mkdir /var/spool/maildir
chown maildrop.www-data /var/spool/maildir
chmod 2770 /var/spool/maildir
cd /usr/local/src/maildrop
dpkg -i maildrop_1.5.3-1.1sarge1_i386.deb

18 – Edite o arquivo de configuração do maildrop “maildropmysql.config” assim:

vi /etc/maildropmysql.config

hostname 127.0.0.1
port 3306
socket /var/run/mysqld/mysqld.sock
database postfixdb
dbuser vmail
dbpw 123456
dbtable mailbox
default_gidnumber 120
default_uidnumber 120
uid_field username
uidnumber_field uid
gidnumber_field gid
maildir_field maildir
homedirectory_field home
quota_field quota
mailstatus_field active
where_clause ""

+ Postfix

19 – Instale os pacotes postfix postfix-pcre postfix-mysql postfix-tls

apt-get install postfix postfix-pcre postfix-mysql postfix-tls

* Não se preocupe com a configuração feita na instalação do postfix, o
arquivo “/etc/postfix/main.cf será completamente modificado.

Apenas aperte para todas as perguntas!

20 – Crie estes arquivos em “/etc/postfix” para o Postfix acessar o MySQL

vi /etc/postfix/mysql_virtual_alias_maps.cf

user = vmail
password = 123456
dbname = postfixdb
table = alias
select_field = goto
where_field = address
hosts = 127.0.0.1

vi /etc/postfix/mysql_virtual_mailbox_maps.cf

user = vmail
password = 123456
dbname = postfixdb
table = mailbox
select_field = maildir
where_field = username
hosts = 127.0.0.1

vi /etc/postfix/mysql_transport_maps.cf

user = vmail
password = 123456
dbname = postfixdb
hosts = 127.0.0.1
table = domain
select_field = transport
where_field = domain

vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf

user = vmail
password = 123456
dbname = postfixdb
table = mailbox
select_field = quota
where_field = username
hosts = 127.0.0.1

21 – Edite o arquivo /etc/postfix/master.cf para linhas abaixo ficarem assim:

vi /etc/postfix/master.cf

smtp inet n - n - - smtpd
pickup fifo n - n 60 1 pickup

# Com isto fizemos o postfix não trabalhar enjaulado, em modo: "chroot"
# DICA: copie e cole a linha abaixo, pois ela é muito diferente da original:

maildrop unix - n n - - pipe
flags=DRhu user=maildrop argv=/usr/bin/maildrop -w 90 -d ${recipient}

* A configuração da quarta linha, deve ter pelo menos 2 espaços no começo.

22 – Edite o arquivo principal do postfix “/etc/postfix/main.cf” assim:

vi /etc/postfix/main.cf

# LOCAL PATHNAME INFORMATION
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
#mail_owner = postfix
#default_privs = nobody
myhostname = mail.nickollas.com.br
mydomain = nickollas.com.br

# SENDING MAIL
myorigin = $mydomain

# RECEIVING MAIL
mydestination = $mydomain, $transport_maps

# REJECTING MAIL FOR UNKNOWN LOCAL USERS
local_recipient_maps =
default_transport = smtp
unknown_local_recipient_reject_code = 450

# TRUST AND RELAY CONTROL
mynetworks = 192.168.0.0/24, 127.0.0.0/8
#relay_domains = $mydestination

# INTERNET OR INTRANET
#relayhost = $mydomain
#relayhost = [an.ip.add.ress]

# ALIAS DATABASE
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

# DELIVERY TO MAILBOX
home_mailbox = Maildir/
mailbox_command = /usr/bin/procmail

# SHOW SOFTWARE VERSION OR NOT
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

# DEBUGGING CONTROL
debug_peer_level = 2
debugger_command =
#PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
#xxgdb $daemon_directory/$process_name $process_id & sleep 5

# INSTALL-TIME CONFIGURATION INFORMATION
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
manpage_directory = /usr/share/man
#sample_directory = /etc/postfix/sample
readme_directory = no

# SECURITY
disable_vrfy_command = yes

# MYSQL
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /var/spool/mail
virtual_mailbox_maps= mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_uid_maps = static:120
virtual_gid_maps = static:120
transport_maps = mysql:/etc/postfix/mysql_transport_maps.cf

# 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 = 1000000000
virtual_maildir_limit_message = Desculpe, Seu limite de espaço em disco excedeu!
virtual_overquota_bounce = yes

# MAILDROP
fallback_transport = /usr/bin/maildrop
maildrop_destination_recipient_limit = 1
unknown_local_recipient_reject_code = 450

23 – Crie o arquivo de aliases do Postfix

touch /etc/postfix/aliases

24 – Gere o arquivo “/etc/postfix/aliases.db” com o este comando

newaliases

25 – Reinicie o postfix

/etc/init.d/postfix restart

26 – Crie um dominio no MySQL

mysql> USE postfixdb;
mysql> INSERT INTO domain VALUES
       ('nickollas.com.br','nickollas','maildrop',now(),now(),1);

27 – Crie o diretório deste domínio

[root]# mkdir /var/spool/maildir/nickollas.com.br

28 – Crie uma conta de e-mail no MySQL

mysql> USE postfixdb;
mysql> INSERT INTO mailbox (username,password,name,home,maildir,quota,domain,
       create_date,change_date,active,passwd_expire,uid,gid,complete_home)
       VALUES ('nickollas@nickollas.com.br', encrypt('123mudar'),
       'Nickollas Carvalho', '/var/spool/maildir/',
       'nickollas.com.br/nickollas/Maildir','100000000S',
       'nickollas.com.br',now(),now(),'1','N',120,120,
       '/var/spool/maildir/nickollas.com.br/nickollas/Maildir');

29 – Prepare o ambiente da conta criada

mkdir /var/spool/maildir/nickollas.com.br/nickollas/
maildirmake /var/spool/maildir/nickollas.com.br/nickollas/Maildir
chown maildrop.maildrop /var/spool/maildir/nickollas.com.br/ -R
chmod 2770 /var/spool/maildir/nickollas.com.br/ -R

30 – TESTANDO: Envio de e-mail

– Enviando um e-mail…

echo "corpo do e-mail" | mail -s "assunto" nickollas@nickollas.com.br

– Vendo se a mensagem foi enviada…

tail -f /var/log/mail.log

Oct 10 23:09:51 localhost postfix/pickup[19193]: 6C45A5F801: uid=0 from=
Oct 10 23:09:51 localhost postfix/cleanup[19576]: 6C45A5F801: message-id=
Oct 10 23:09:51 localhost postfix/qmgr[19194]: 6C45A5F801: from=, size=317, nrcpt=1 (queue active)
Oct 10 23:09:51 localhost postfix/pipe[19582]: 6C45A5F801: to=, relay=maildrop, delay=0, status=sent (nickollas.com.br)
Oct 10 23:09:51 localhost postfix/qmgr[19194]: 6C45A5F801: removed

– Vendo se a mensagem foi entregue para o destinatário….

ls /var/spool/maildir/nickollas.com.br/nickollas/Maildir/new/11605...

31 – TESTANDO: Acesso POP

telnet 127.0.0.1 110

user nickollas@nickollas.com.br
pass 123mudar

+OK logged in.

32 – TESTANDO: Acesso IMAP

telnet 127.0.0.1 143

0 login nickollas@nickollas.com.br 123mudar

0 OK LOGIN Ok.

– Vendo a tentativa de conexão no log do MySQL…

tail -f /var/log/mysql.log

061010 23:35:53 15 Connect postfix@localhost on
15 Init DB postfixdb
15 Query SELECT username, password,
“”, uid, gid, home, maildir, quota, name,
“” FROM mailbox WHERE username =
“nickollas@nickollas.com.br” AND (active=1)

33 – Enviando e-mail via telnet

telnet 127.0.0.1 25

Escape character is '^]'.
220 mail.nickollas.com.br
HELO nickollas
250 mail.nickollas.com.br
MAIL FROM:
250 Ok
RCPT TO:
250 Ok
DATA
354 End data with .
Aqui vai o corpo da mensagem
.

250 Ok: queued as E4A9632BD

Quit

221 Bye
Connection closed by foreign host.

+ DICAS

– Visualizando mensagens na fila de espera

postqueue -q

– Modificando a senha de uma conta de e-mail

mysql> USE postfixdb;
mysql> UPDATE mailbox SET password=encrypt('novasenha') WHERE
       username='nickollas@nickollas.com.br';

* O comando acima pode ser digitado todo na mesma linha ou ser quebrado como mostrado acima, pois para o MySQL isso não faz diferença

– Apagando uma conta de e-mail no MySQL

mysql> USE postfixdb;
mysql> DELETE FROM mailbox WHERE username='nickollas@nickollas.com.br';

– Apagando tudo que foi feito no MySQL

mysql> USE mysql;
mysql> DELETE FROM user WHERE user='vmail';
mysql> USE postfixdb
mysql> DROP TABLE alias;
mysql> DROP TABLE domain;
mysql> DROP TABLE mailbox;
mysql> DROP DATABASE postfixdb;
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s