SeLinux + FTP

December 28th, 2011

Fala Galera,

 

Ontem ajudei um amigo ( Roberli ), a resolver um problema de FTP, o servidor que era um CentOS 6, com o SeLinux no modo Enforcing, e com isso o cliente conectava no FTP porém não conseguia  fazer upload de arquivo, muito menos deletar os existentes. Por este motivo após ajudá-lo resolvi escrever este post, antes de tudo um esclarecimento público sobre o SeLinux:

SeLinux é um serviço nativo no CentOS e  RHEL5 em diante ( são as versões que mais trabalho), ao contrário do que todos pensam sobre o SeLinux, ele não protege seu servidor contra invasão de hackers. A funcionalidade é de proteger o seu SO dos serviços nele instalado, ou seja, ele evita que o hacker invada seu SO e faça um grande estrago, a invasão vai ficar restrita ao serviço, o que podemos facilmente restabelecer caso haja uma política de backup previamente configurada para seu servidor.

Tentei feito este pequeno esclarecimento, vamos colocar mão na massa.

Levando em contato o SO que neste caso é o CentOS, o DocumentRoot default do serviço Apache ( httpd ) seria o diretório: /var/www/html/, fazendo uma verificação rápida no Contexto do SeLinux para o diretório a cima, verificamos o seguinte:

OBS.: Para verificar o contexto de um diretório ou arquivo, basta utilizar a opção “Z” juntamente como comando “ls”.

 

  [root@sp3 ~]# ls -ldZ /var/www/html/

  drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

  [root@sp3 ~]#

 

Neste caso o contexto do diretório é “httpd_sys_content_t”, diz que o serviço Apache    ( httpd ) é o dono desta área de trabalho (/var/www/html/ ). E é ai que está o problema pois queremos que o FTP também tenha direito sobre esta área de trabalho, queremos que este diretório se torne uma área de trabalho comum aos serviços Apache e FTP, e para fazermos isso temos que modificar o contexto de trabalho deste diretório, da seguinte forma:

OBS.: O comando “chcon” modifica o contexto de arquivo e diretórios.

[root@sp3 ~]# chcon -R -t public_content_t /var/www/html/

[root@sp3 ~]# ls -ldZ /var/www/html/

drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /var/www/html/

[root@sp3 ~]#

 

Como podemos verificar com o comando a cima o diretório /var/www/html/ teve seu  contexto modificado, e agora ele se tornou uma área comum aos serviços Apache e FTP.

Porém ainda temos que habilitar alguns atributos de controle do ambiente para permitir a escrita do FTP nesta área comum.

OBS.: O comando “getsebool” ele pega todos os atributos de sistema, referentes ao SeLinux.

 

[root@sp3 ~]# getsebool -a | grep ftp

allow_ftpd_anon_write –> off

allow_ftpd_full_access –> off

allow_ftpd_use_cifs –> off

allow_ftpd_use_nfs –> off

ftp_home_dir –> off

ftpd_connect_db –> off

httpd_enable_ftp_server –> off

sftpd_anon_write –> off

sftpd_enable_homedirs –> off

sftpd_full_access –> off

sftpd_write_ssh_home –> off

tftp_anon_write –> off

[root@sp3 ~]#

 

Podemos observar que todos os atributos referentes ao FTP está desativada, necessitamos habilitar algumas deles para que possamos ter acesso de escrita via FTP.

 

[root@sp3 ~]# setsebool -P allow_ftpd_full_access=1

[root@sp3 ~]# setsebool -P ftp_home_dir=1

[root@sp3 ~]# setsebool -P allow_tftp_anon_write=1

[root@sp3 ~]# setsebool -P allow_ftpd_anon_write=1

[root@sp3 ~]# setsebool -P ftpd_connect_db=1

 

Com isso conseguimos fazer o FTP escrever na pasta de área comum com o Apache, porém ainda não terminarmos, pois caso o servidor seja rebootado, o SeLinux vai modificar as permissões de pasta novamente, pois ele guarda em seu banco de dados uma lista de diretórios e seus respectivos contextos, por isso ainda necessitamos criar o contexto para nossa área comum.

OBS.:  O comando “semanage” irá listar todos os diretório e seus contextos.

 

[root@sp3 ~]# semanage fcontext -l | grep www

/srv/([^/]*/)?www(/.*)?     all files          system_u:object_r:httpd_sys_content_t:s0

/var/www(/.*)?                  all files          system_u:object_r:httpd_sys_content_t:s0

/var/www(/.*)?/logs(/.*)?      all files          system_u:object_r:httpd_log_t:s0

[root@sp3 ~]#

 

O diretório /var/www/html não tem nenhum contexto configurado, porém o diretório a cima tem, que é o /var/www e em caso de reboot o SeLinux irá restaurar o contexto do diretório para “httpd_sys_content_t”, por isso devemos criar um contexto para este diretório.

 

[root@sp3 ~]# semanage fcontext -a -t public_content_t ‘/var/www/html(/.*)?’

 

Pronto com isso você terá persistência nas configurações realizada, bem como escrita via FTP no DocumentRoot do Apache.

 

Valeu múmias, estou a disposição para quaisquer esclarecimentos.

Share

Assuntos Sobre RHCSA

December 20th, 2011

Fala Galera,

 

Sumi um tempo, porém agora estou de volta….

Nos posts seguintes irei falar sobre os assuntos que caem na prova para RHCSA (RHEL 6), e para isso conto com a ajuda de vocês, da seguinte forma, perguntem caso tenham alguma dúvida, responderei a vocês, peço só que tenham paciência se demorar um pouquinho para responder, mas responderei.

 

Bom vamos lá, vou posta os assuntos que abordaremos:

 

 - Gerenciamento de Serviços Instalados

 - Analise e Armazenamento de Logs

 - Gerenciando Processos

 - Técnicas de Recuperação do Sistema

 - Autenticando no SO com usuário em base LDAP

 - Gerenciando Contas de Usuários

 - Restringindo Acesso a Arquivos

 - Gerenciando SeLinux

 - Instalando e Gerênciando Software

 - Configuração e Troubleshooting de Rede

 - Gerenciando LVM ( Logical Volume Manager )

 - Expressão Reguláres, Pipelines   e     I/O Redirection

 

Bom é isso, estes são os tópicos que iremos abordar aqui no blog. Aguardarei a interatividade de vocês.

Valeu MÚMIAS…..

Share

Certificado – RHCSA

May 23rd, 2011

Fala galera,

Aqueles que estão acompanhando meu blog, segue a nova certificação:

Estou finalizando a descrição do curso RH135 na Red Hat no blog:

- rhcsa.dheykson.com.br

Share

São Paulo – RedHat – Estudando para RHCSA

May 16th, 2011

Fala galera,

Estou em São Paulo fazendo o curso RH135 para fazer a prova RHCSA ( para versão RHEL 6 ), por enquanto o curso está facil, vamos ver com o passar do dia….

No final do curso vou dizer minha visão geral do curso, e da prova….

Vlw, Abraços….

Share

Bloqueando Conta/Dominio a enviar e Receber

April 26th, 2011

Configurado em um servidor Centos 5.3 + Zimbra 6.0, testado também com Debian Lenny e Zimbra 6.0.

Domínio 1: empresa.com.br – envia e recebe e-mail externo e interno
Domínio 3: empresa.intranet – só envia e recebe e-mail interno e para os dois domínios acima (dominio1 e dominio2)

Nesse caso não teremos problemas do domínio 3 receber e-mail externo pois ele não é um domínio válido externamente somente interno, então não precisamos nos preocupar com isso.

No Zimbra se você alterar na mão o arquivo main.cf do Postfix (/opt/zimbra/postfix/conf/main.cf), toda vez que reiniciar o Zimbra ele volta as configurações que estão configuradas padrão.

Mãos a obra, a modificação do arquivo zmmta.cf deve ser feita como root o resto pode ser com o usuário zimbra.

1. Vamos criar o arquivo dominio_restrito, que conterá o domínio ou domínios a bloquear o envio externo.

# su zimbra
$ cd /opt/zimbra/conf
$ echo “empresa.intranet restrict_tpmail” > dominio_restrito

Depois de criado o arquivo, dê esse comando para reconfiguração do Postfix:

$ postmap dominio_restrito

2. Vamos criar agora um arquivo com os domínios onde o domínio empresa.intranet (dominio_restrito) poderá enviar e receber e-mail.

$ cd /opt/zimbra/conf
$ echo “empresa.com.br OK” > dominios

E rodar novamente o comando, mas agora no arquivo “dominios”:

$ postmap dominios

3. Inserir no arquivo zmmta.cf as linhas abaixo como root.

# vi /opt/zimbra/conf/zmmta.cf

Abaixo da linha: POSTCONF virtual_transport    LOCAL postfix_virtual_transport

Inserir essas linhas:

POSTCONF smtpd_sender_restrictions   FILE postfix_sender_restrictions.cf
POSTCONF smtpd_restriction_classes   restrict_tpmail
POSTCONF restrict_tpmail             FILE postfix_restrict_tpmail.cf

4. Passar as configurações ao Postfix.

# su zimbra
$ cd /opt/zimbra/conf

$ echo “check_sender_access hash:/opt/zimbra/conf/dominio_restrito” > postfix_sender_restrictions.cf

$ echo “check_recipient_access hash:/opt/zimbra/conf/dominios, reject” >> postfix_restrict_tpmail.cf

5. Dar um “zmcontrol stop” e “zmcontrol start” para validar as configurações, e tudo OK é so testar.

Conclusão

O domínio empresa.intranet só poderá enviar e-mails para os domínios contidos no arquivo dominios, para restringir outros domínios é só adicionar no arquivo dominio_restrito.

Share

Aumentando o numero de destinatarios por envio

March 15th, 2011

Acesse o servidor, se logue como usuario zimbra:

No Zimbra:

Adicione o parametro:

POSTCONF smtpd_client_recipient_rate_limit 20

no arquivo zmmta.cf , onde 20 eh o numero de destinatarios por email, e faça o reload:

zimbra@zimbra-mail01:~/conf$ zmmtactl reload

No Postfix:

Adicione a linha com o parametro no arquivo main.cf

smtpd_client_recipient_rate_limit = 20

É isso vlw galera…

Share

Zimbra: Compartilhando GAL entre domínios

March 15th, 2011

Por default, quando se cria um dominio no Zimbra, os usuarios desse dominio so falam entre entre eles.

Por exemplo:  Se você tem os domínios @itv6.com.br@dheykson.com.br, e os usuarios:

root@dheykson.com.br
admin@dheykson.com.br
root@itv6.com.br
admin@itv6.com.br

O usuario root@itv6.com.br só vai enxergar quem estiver no domínio: @itv6.com.br.

E a conta root@dheykson.com.br so vai enxergar quem estiver no @dheykson.com.br.

Isso acontece porque nas configuraçoes do zimbra está setado para Domain, como pode ser visto abaixo:

[zimbra@mail ~]$ zmprov gacf | grep zimbraGal
zimbraGalAutoCompleteLdapFilter: externalLdapAutoComplete
zimbraGalInternalSearchBase: DOMAIN

Para fazer com que todos os domínios se enxerguem basta alterar o atributo:  zimbraGalInternalSearchBase para ROOT:

[zimbra@mail ~]$ zmprov mcf zimbraGalInternalSearchBase ROOT
[zimbra@mail ~]$ zmprov gacf | grep zimbraGal
zimbraGalAutoCompleteLdapFilter: externalLdapAutoComplete
zimbraGalInternalSearchBase: ROOT

É isso ae vlw…

Share

Exportando listas e contas, da base do Zimbra, em XML.

December 28th, 2010

By Fininho (Bruno Souza)

Olá pessoal!

A algum tempo recebi um problema pra resolver de um cliente. Se tratava de uma integração do sistema GED do cliente ao sistema de emails da empresa.

A empresa utiliza o Zimbra que tem sua base em LDAP.

Logo sugeri ao cliente a seguinte solução: Criar um script que realizaria a consulta na base do Zimbra, escrevendo os resultados em um documento XML padrão e publicando de maneira restrita o documento XML, que contem as listas e os emails de todos os usuários.

O cliente gostou da idéia e o resto foi mão na massa.

Primeiro analisei quais as queries que deveria usar e para isso utilizei um utilitário de linha de comando chamado zmprov, que contém comandos que executam entre outras coisas queries a base LDAP.

Utilizei os comandos “gadl” e “gdl”:

1- gadl (getAlldistributionLists) => Retorna todas as listas de distribuição.

zmprov -l gadl DOMINIO

2- gdl (getDistributionList) => Retorna todas as contas inscritas na lista.

zmprov -l gdl LISTA


Agora vamos ao script shell.

Neste script coloquei comentários que explicam cada passo.

#!/bin/bash
############################################################
#   Script Shell para gerar um arquivo XML para o sistema  #
#   GED do cliente acessar os                              #
#   dados com seguranca, dados estes: uma lista de grupos  #
# de distribuicao e suas contas #
#                                                          #
#   Por Bruno Souza – Analista de Suporte N2 #
# sZazz.com – e-mail: bs@szazz.com.br       #
############################################################
#Constantes
#Date get
Date=`date “+%d/%m/%Y %H:%M:%S”`
#Dominio a ser pesquisado.
DOMINIO=’szazz.com.br’
#Retorna todas as listas de distribuicao.
CMD_List=`/opt/zimbra/bin/zmprov -l gadl $DOMINIO`
#Inicia a estrutura XML
echo -e ‘<?xml version=”1.0″ encoding=”ISO-8859-1″?>’
echo -e “\t<Dominio>”
echo -e “\t\t<NomeDomino>$DOMINIO</NomeDomino>”
echo -e “\t\t\t<Listas>”
#Percerro o array de listas
for x in $CMD_List
do
echo -e “\t\t\t\t<NomeLista>$x</NomeLista>”
echo -e “\t\t\t\t\t<Contas>”
#Retorna a segunda coluna do resultado filtrado
#pelo campo “zimbraMailForwardingAddress”,
#que são as contas inscritas na lista.
ListOfAccounts=`/opt/zimbra/bin/zmprov -l gdl $x | grep “zimbraMailForwardingAddress:” | cut -d ‘ ‘ -f2`
#Organiza em ordem alfabética
ListOfAccountsSort=`echo $ListOfAccounts | sort`
#percorre o array de contas
for i in $ListOfAccountsSort
do
echo -e “\t\t\t\t\t\t<Conta>$i</Conta>”
done
echo -e “\t\t\t\t\t</Contas>”
done
echo -e “\t\t\t</Listas>”
echo -e “\t\t\t<UltimaAtualizacao>$Date</UltimaAtualizacao>”
echo -e “\t</Dominio>”

Para que o cliente não se preocupe com a execução do script, incluí o mesmo na cron:

~# crontab -e

Inclua:

05 * * * * /opt/zimbra/ListMembersGroupsXML > /var/www/lista.xml

Todos os dias de 5 em 5 minutos o arquivo lista.xml será atualizado.

Configurando o acesso ao documento lista.xml.

Com os dados sendo carregados no arquivo XML, vamos à publicação do mesmo.

Utilizando o Apache2, como o encontrado no ambiente do cliente, no site default (normalmente em “/etc/apache2/sites-enabled/000-default”), vamos inserir os seguintes parâmetros para virtualhost, utilizando autenticação básica do Apache2:

<VirtualHost _default_:8081>

ServerAdmin webmaster@localhost

DocumentRoot /var/www/

<Directory />

Options FollowSymLinks

AllowOverride None

</Directory>

<Directory /var/www/>

Options -Indexes FollowSymLinks MultiViews

AllowOverride none

DirectoryIndex lista.xml

Order deny,allow

Deny from all

Allow from 127.0.0.1

# Security

AuthType Basic

AuthName “Entre com as credenciais.”

AuthUserFile /etc/apache2/conf.d/.userAuth

Require valid-user

Satisfy Any

</Directory>

ErrorLog /var/log/apache2/error.log

LogLevel warn

CustomLog /var/log/apache2/access.log combined

</VirtualHost>

Como utilizamos autenticação, temos que criar o arquivo que irá conter os logins e as senhas para acesso.

Este arquivo tem que ser o mesmo referenciado em AuthUserFile, na configuração acima.

Para isso utilizamos o comando htpasswd:

htpasswd -c /etc/apache2/conf.d/.userAuth USUARIO

Em seguida será solicitada a senha para o login, sua confirmação e pronto.

Ao acessar o endereço que publica o arquivo lista.xml, será solicitada a autenticação.

O resultado será como este:

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<Dominio>
<NomeDomino>szazz.com.br</NomeDomino>
<Listas>
<NomeLista>lista@szazz.com.br</NomeLista>
<Contas> <Conta>cicrano@szazz.com.br</Conta><Conta>fininho@szazz.com.br</Conta>

<Conta>fulano@szazz.com.br</Conta>

Espero que tenham gostado.

Até a próxima!

Share

Servidor de Email Com Postfix + PostfixAdmin + Roundcube + MySQL + POP, SMTP e IMAP Autenticado

December 28th, 2010

Neste post iremos aprender configurar um servidor de e-mail completo, veremos cada passo detalhadamente.

Este post surgiu devido durante muito tempo eu ter tentado criar um servidor de e-mail, e não encontrar material em português com tanta facilidade, então com essa dificuldade toda eu resolvi junta vários tutoriais em um único post.

Espero que gostem, e qualquer dúvida é só enviar um e-mail para linux@dheykson.com.br.

Mãos a obra.

1. Instalando o Postfix

Este serviço é responsável pelo serviço conhecido como SMTP.

$ sudo apt-get install -y postfix postfix-mysql

Aparecerá alguns questionamento, basta apenas selecionar as opçãoes.

- OK

- Site Internet

- linux@dheykson.com.br ( coloque aqui seu e-mail do domínio para qual você está criando seu servidor ).

$ sudo cp -p /usr/share/postfix/main.cf.debian /etc/postfix/main.cf

Estamos copiando um arquivo padrão de configuração do postfix, arquivo chamado main.cf.

2. Pacotes de Autenticação POP3/IMAP

Estes pacotes são para estabelecer conexão segura entre o cliente pop3/imap e o servidor de e-mails.

$ sudo apt-get install -y courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl

3. Pacotes de Autenticação SMTP

Já estes pacotes serão utilizados para autenticar usuários para envio de e-mails não deixando que um spammer fique enviando e-mail a partir do nosso servidor.

$ sudo apt-get install -y libsasl2-modules libsasl2-modules-sql openssl sasl2-bin libpam-mysql

4. Criando o Banco de Dados para o Postfix

4.1. Baixo o arquivo .sql abaixo para criarmos a database e as tabelas.

wget http://www.dheykson.com.br/downloads/Postfix.sql

OBS.: Não esquecer de editar o arquivo com o comando “ vim “ e trocar a senha ( SENHA ).

4.2 Vamos instalar o Mysql-server

$ sudo apt-get install -y mysql-server

4.3 Vamor importar para o myslq, o banco responsável pelos mapas do postfix.

$ mysql -uroot -p < Postfix.sql

OBS.: Digite a senha cadastrada na instalação do mysql.

5. Configurando os mapas do Postfix
Uma vez que as tabelas foram criadas, configura o postfix para realizar
o mapeamento editando cada um dos arquivos, e não esquecendo de alterar as
credenciais de acesso ao banco de dados.

$ sudo vi /etc/postfix/mysql_virtual_alias_maps.cf

user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address

$ sudo vi /etc/postfix/mysql_virtual_domains_maps.cf
user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = ‘0′ and active = ‘1′

$ sudo vi /etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = ‘1′

$ sudo vi /etc/postfix

/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = ‘1′

$ sudo vi /etc/postfix/mysql_relay_domains_maps.cf
user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = ‘1′

Alterar permissão dos mapas para somente root alterar e o postfix poder ler,

visto que temos credenciais de acesso ao banco nos arquivos.

$ sudo chgrp postfix /etc/postfix/mysql_*.cf
$ sudo chmod 640 /etc/postfix/mysql_*.cf

Criar usuário vmail para armazenar os e-mails de todos os vhosts, não necessitando assim uma conta no sistema para cada usuário

$ sudo groupadd -g 5000 vmail
$ sudo useradd -m -g vmail -u 5000 -d /home/vmail -s /bin/bash vmail

6. Configura o Postfix para Utilizar os Mapa

Uma vez que temos o banco de dados criados, os arquivos que fazem o mapeamento, temos que configurar no Postfix para o mesmo utilizar cada um dos mapeamentos para determinada tarefa, como segue:

$ sudo vi /etc/postfix/main.cf

# Virtual Mailbox Domain Settings
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit = 51200000
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_transport = virtual

# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the your maildir has overdrawn your diskspace quota,
please free up some of spaces of your mailbox try again.
virtual_overquota_bounce = yes

# TLS parameters
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

#The host name where your MX for virtual domains will point to
myhostname = mail.domain.com
mydestination = #Remains blank since we are going to host virtual domains
relayhost = #Remains blank unless you are going to use your ISP’s SMTP server mail sending out mails.
In which case it would be set to the host name of the ISP’s SMTP server

#Deixe esses parâmetros com seus valores padrão

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mynetworks = /32 127.0.0.1/32
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, permit
# modify the existing smtpd_sender_restrictions
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_pipelining, permit
# then add these
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =

OBS.: Modificar para os IP’s que vão enviar e-mail o parametro , e também o mail.domain.com.

8. Autenticação de IMAP

Configuramos este arquivo para o IMAP realizar a conexão ao banco de dados para validar cada tentativa de conexão dos usuários.

Alteração para usar o módulo mysql no courier authdaemon

$ sudo vi /etc/courier/authdaemonrc

authmodulelist=”authmysql authpam”

$ sudo vi /etc/courier/authmysqlrc

————————————————————
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME postfix
MYSQL_PASSWORD SENHA(cadastrada no arquivo Postfix.sql)
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD ’5000′
MYSQL_GID_FIELD ’5000′
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD ’/home/vmail’
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD concat(quota,’S’)

OBS.: Trocar USUARIO e SENHA, no qual você configurou no dump.sql lá em cima.

Reinicie os serviços e cheque os logs:

$ sudo /etc/init.d/courier-authdaemon restart

$ sudo /etc/init.d/courier-imap restart

$ sudo /etc/init.d/courier-imap-ssl restart

$ sudo /etc/init.d/courier-pop restart

$ sudo /etc/init.d/courier-pop-ssl restart

$ sudo tail -f /var/log/mail.info

9. Autenticação de SMTP

Antes de mais nada para habilitar o saslauthd fazemos:

$ sudo vi /etc/default/saslauthd
START=yes

e verifique neste arquivo se os mecanismos estão configurados como:

MECHANISMS=”pam”

e altere a opção OPTIONS:

OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”

e então habilite o servico:

$ sudo /etc/init.d/saslauthd start

Configuramos o Postfix para o mesmo somente aceitar envio de e-mails de usuários autenticados via sasl

Cria o arquivo que diz para o Postfix como será a checagem da senha, no caso, via saslauthd

$ sudo vi /etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
log_level: 5

Configura o módulo ’smtp’ no pam para que o sasl use este método para autenticar através do mesmo.

$ sudo vi /etc/pam.d/smtp

auth required pam_mysql.so user=postfix passwd=SENHA(cadastrada no arquivo Postfix.sql) host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=postfix passwd=SENHA(cadastrada no arquivo Postfix.sql) host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1

Como estamos utilizando nosso smtp em uma jail, temos que realizar as seguintes alterações:
Crie o grupo sasl e adicione o usuário postfix ao mesmo adicionando esta linha no arquivo /etc/group

$ sudo vi /etc/group
sasl:x:45:postfix

Crie os arquivos/diretórios que ficarão dentro da jail para o postfix autenticar no sasl

$ sudo mkdir -p /var/spool/postfix/var/run/
$ sudo mv /var/run/saslauthd /var/spool/postfix/var/run/saslauthd
$ sudo ln -ns /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
$ sudo cp /etc/sasldb2 /var/spool/postfix/etc/
$ sudo chgrp sasl /var/spool/postfix/etc/sasldb2
$ sudo chmod g+w /var/spool/postfix/etc/sasldb2

Reinicie os serviço e cheque o log

$ sudo /etc/init.d/courier-authdaemon restart

$ sudo /etc/init.d/saslauthd restart

$ sudo /etc/init.d/postfix restart

$ sudo tail -f /var/log/mail.info

10 Instalar o Postfixadmin

Baixe o postfixadmin na sua última versão.

$ sudo apt-get install -y apache2 php5 php5-imap php5-mysql

$sudo a2enmod php5

$sudo /etc/init.d/apache2 restart

$ wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin_2.3rc5.tar.gz

Descompacte o arquivo e copie para dentro do seu webroot

$ tar xvzf postfixadmin_2.3rc5.tar.gz
$ sudo mv postfixadmin-2.3rc5/ /var/www/postfixadmin/

Altere o arquivo de configuração para configurar o sistema de deixá-lo pronto para o setup

$ sudo vi /var/www/postfixadmin/config.inc.php

$CONF['configured'] = true;

$CONF['database_type'] = ‘mysqli’;

$CONF['database_host'] = ‘localhost’;

$CONF['database_user'] = ‘postfix’;

$CONF['database_password'] = ‘ SENHA(cadastrada no arquivo Postfix.sql) ‘;

$CONF['database_name'] = ‘postfix’;

$CONF['domain_path'] = ‘YES’;

$CONF['domain_in_mailbox'] = ‘NO’;

Acesse o setup.php em http://seudominio.com.br/postfixadmin/setup.php
Você vai criar uma senha para o setup quando em clicar em gerar a senha, ele vai lhe dar um hash:

$CONF['setup_password'] = ‘09f7acdd93b6c11b:0c68a098ba0940acec16cf36f784f7551e019852′;

Copie ele e substitua a variável abaixo no arquivo config.inc.php

$CONF['setup_password'] = ‘changeme’

Novamente acesse o setup.php em http://seudominio.com.br/postfixadmin/setup.php, informe a senha de setup que acabou de cadastrar, um e-mail válido e uma senha, este e-mail e a senha será seus dados de acesso, pois cadastrá-los, basta acessar http://seudominio.com.br/postfixadmin/ e logar.

11 Instalando o RoundCube

Agora vamos baixar e instalar o roundcube, seu webmail.

wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.3.1/roundcubemail-0.3.1.tar.gz

tar zxvf roundcubemail-0.3.1.tar.gz

mv roundcubemail-0.3.1 /var/www/webmail

chmod 777 /var/www/webmail/temp

chmod 777 /var/www/webmail/logs

Agora vamos criar o banco para o RoundCube, não esqueça de trocar a SENHA do arquivo abaixo.

wget http://www.dheykson.com.br/downloads/Roundcube.sql

Agora vamos importar o banco para o mysql.

$ sudo mysql -u root -p < Roundcube.sql

Agora vamos configurar o roundcube, copie os arquivo db.inc.php.dist e main.inc.php.distpara db.inc.php e main.inc.php

$ cp /var/www/webmail/config/db.inc.php.dist /var/www/webmail/config/db.inc.php

$ cp /var/www/webmail/config/main.inc.php.dist /var/www/webmail/config/main.inc.php

Em db.inc.php modifique as variáveis:

$rcmail_config ['db_dsnw'] = ‘mysql://roundcube:SENHA(utilizada no arquivo Roudcube.sql)@localhost/roundcubemail’;

$rcmail_config ['mail_domain'] = ‘SEU_DOMINIO’;

PRONTO, seu servidor de e-mail está configurado.

Qualquer erro por favor me envie um e-mail que lhe respondo.

Abraços até a próxima, sugestões de post envie para linux@dheykson.com.br.

Share

Blog Dheykson Santos

December 23rd, 2010

Em breve termos um post sobre servidor de e-mail com Mysql, Postfix, Vhost, Courier, Sasl2, Roundcube e Postfixadmin.

Qualquer dúvida, sugestão enviar um e-mail para:

linux@dheykson.com.br

Share