Instalação - Servidor de e-mail

Publicado por Anderson Leite 07/12/2006

[ Hits: 14.226 ]

Homepage: www.andersonleite.net

Download servidor_email_v5.0.2.sh




Ainda é um trabalho em andamento, as primeiras versões foram escritas pelo Clovis Sena, entrei em contato com ele, e como o mesmo anda sem tempo, estou tocando o projeto.

É um script de instalação baseado no tutorial do Marco Máximo (que fiz a revisão e publiquei aqui no VoL), erros ainda podem existir no código, caso ocorram, não deixem de me informar, para que possa melhorar cada vez mais o mesmo.

  



Esconder código-fonte

#!/bin/bash
########################################################################################
#
#Artigos SecForum: Instalando um servidor de e-mail completo utilizando Debian Sarge
#http://www.secforum.com.br/article.php?sid=3402
#
#Artigo escrito por Anderson Leite para o SecForum abordando a instalacao de um servidor de e-#mail completo utilizando Debian Sarge e postfix, com suporte a dominios virtuais, cota de e-#mail, anti-virus, anti-spam, ferramentas de relatorio, graficas e em modo texto, #autenticacao SMTP, acesso POP3 e IMAP, e ferramenta de gerenciamento web do Postfix - #Postfixadmin.
#
#Este tutorial foi totalmente baseado no tutorial do Marco Maximo, disponivel no site do
#Viva O Linux (http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=526), foram #realizadas algumas correcoes, e algumas modificacoes para que o mesmo pudesse ser totalmente #compativel com o Debian Sarge, rodando SASL2 para a autenticacao SMTP. Tambem foram #adicionados passos de instalacao de ferramentas para geracao de relatorios gerenciais, como #o Mailgraph, Isoqlog e o Pflogsumm, correcoes e melhorias sao muito bem vindas.
#
#
########################################################################################

#######################################
# Definindo algumas coisas basicas:   #
#######################################
TMPDIR=/tmpinstall
SENHA_EMAIL_UTESTE01="acucar"
SENHA_EMAIL_UTESTE02="mel"
EMAIL_SUPORTE="equipedeti@meudominio.com.br"
# Estas variaveis vão sair daqui. Serão declaradas mais abaixo, vou deixa-las aqui por enquanto
#IP_SERVIDOR="192.168.100.120"
#MINHA_REDE="192.168.100.0"
#SENHA_ROOT_MYSQL="saladamixta"
#SENHA_USUARIO_DB_POSTFIX="laranja"
#SENHA_USUARIO_DB_MAILDROP="beterraba"
#SENHA_USUARIO_POSTFIXADMIN="limao"
#SENHA_USUARIO_SILVA="acucar"
#MEU_DOMINIO="meudominio.com.br"
VERSAO_SCRIPT="0.1.2-vakao - 21/11/2006, originalmente por csena2k2@gmail.com, esteroides adicionados por asleite@velonet.net :)"

######################
# AVISOS IMPORTANTES #
######################

echo -e \\n
echo -e "Este script irá instalar e configurar um servidor de emails completo no seu Debian Sarge, com suporte a domínios virtuais, cota de e-mail, anti-vírus, anti-spam, ferramentas de relatório, gráficas e em modo texto, autenticação SMTP, acesso POP3 e IMAP, também com a ferramenta de gerenciamento web do Postfix - Postfixadmin."\\n

echo -e "Este script baseou-se no artigo do SecForum: Instalando um servidor de e-mail completo utilizando Debian Sarge, em http://www.secforum.com.br/article.php?sid=3402 . Recomendamos sua leitura para entender melhor os detalhes envolvidos."\\n

echo -e "Tabém recomendamos ler este outro artigo: http://www.howtoforge.com/fedora_virtual_postfix_mysql_quota_courier "\\n

echo -e "ATENÇÂO:"  
echo -e "Este script ainda é EXPERIMENTAL, então use por sua conta e risco, mas dicas e sugestões são bem vindas." 
echo -e "E por favor nao deixe de nos avisar das suas instalações bem sucedidas!"\\n

echo "Versão: $VERSAO_SCRIPT"
echo -e \\n

echo "Pressione ENTER para continuar ou CONTROL+C para abortar!"
read p

#############################
# Aqui comeca a brincadeira #
#############################

# Cria o diretorio temporario
mkdir $TMPDIR

# Mudando o release do Debian para testing (mais atualizações, versões mais novas, etc):
echo -e "Alterando o release do Debian para testing... aguarde"
cp /etc/apt/sources.list /etc/apt/sources.list.orig
cat <<EOF > /etc/apt/sources.list
deb http://security.debian.org/ stable/updates main contrib non-free

deb http://ftp.uk.debian.org/debian/ testing main non-free contrib
deb-src http://ftp.uk.debian.org/debian/ testing main non-free contrib
EOF

# instalando o iproute (que será usado para definirmos a interface de rede inicial a ser utilizada na configuração e testes):
echo "Atualizando a lista de pacotes disponiveis, isso pode demorar um pouco, dependendo da velocidade de sua conexão à internet"
apt-get update

echo "Instalando o pacote iproute"
apt-get install iproute

# Definir qual interface será utilizada na configuração do servidor de e-mail (isto supre a necessidade das variaveis IP_SERVIDOR e MINHA_REDE)
# Pego as interfaces instaladas no servidor, e com status UP
ip addr | grep -v link | grep -v LOOP | grep -v 127.0. | grep UP > $TMPDIR/ifaces.txt

echo "As interfaces de rede abaixo estão configuradas no servidor, e com status UP neste momento:"
# Faço um for para listar as interfaces, com seus respectivos IP's
for i in `cat $TMPDIR/ifaces.txt | cut -f 2 -d " "`; 
   do 
   z=`echo $i| cut -f 1 -d ":"`
   echo "Inteface $z, com o IP `ifconfig $z| grep inet`"; 
   done

echo "Digite o nome da interface a ser utilizada nos testes (ex: eth0) e tecle enter para continuar"
echo "Dica: utilize para a instalação e testes a sua interface de rede interna"
echo " "
read iface

# Faz a declaracao das variaveis de acordo com a interface informada pelo usuario
IP_SERVIDOR=`ifconfig $iface | grep inet| cut -f 2 -d ":" | cut -f 1 -d " "`

# Para definir qual a rede, iremos fazer um case com a mascara de rede
# Estamos utilizando os dois ultimos octetos
# Só fiz os cases para os exemplos mais comuns, outros podem ser adicionados
echo " "
echo "Tentando detectar a mascara de rede automaticamente..."
MASCARA=`ifconfig $iface | grep inet| cut -f 4 -d ":" | cut -f 1 -d " "| cut -f 3,4 -d "."`
case "$MASCARA" in
    0.0)
        echo -n "Mascara de rede classe B"
   echo " "
   REDE_TMP=`echo $IP_SERVIDOR | cut -f 1,2 -d "."`
        MINHA_REDE=`echo "$REDE_TMP.$MASCARA" `
   echo "IP da minha rede: $MINHA_REDE"
        ;;
    255.0)
        echo -n "Mascara de rede classe C"
   echo " "
   REDE_TMP=`echo $IP_SERVIDOR | cut -f 1,3 -d "."`
        MINHA_REDE=`echo "$REDE_TMP.0" `
   echo "IP da minha rede: $MINHA_REDE"
        ;;

    255.128)
        echo -n "Mascara de subrede 128"
   echo " "
   # Neste caso, precisamos do endereço de broadcast, para definirmos se o host está na primeira ou na segunda metade da rede
   BCAST=`ifconfig $iface | grep inet| cut -f 3 -d ":" | cut -f 1 -d " "`
   if [ $BCAST <> 127 ]
      then
   REDE_TMP=`echo $IP_SERVIDOR | cut -f 1-3 -d "."`
   MINHA_REDE=`echo "$REDE_TMP.0"`
   echo "IP da minha rede: $MINHA_REDE"
      else
   REDE_TMP=`echo $IP_SERVIDOR | cut -f 1-3 -d "."`
   MINHA_REDE=`echo "$REDE_TMP.128"`
   echo "IP da minha rede: $MINHA_REDE"
   fi
   ;;
    *)
        echo "Deteccao automatica do IP de rede falhou, por favor, informe-o abaixo"
        read MINHA_REDE
        ;;
esac

echo -e "1 - Instalar os pacotes necessários disponíveis no repositório APT:"\\n
echo " "
echo "Após o download, você poderá precisar responder algumas perguntas durante a instalação dos pacotes, no momento as opções padrão são boas para nós"

apt-get install hddtemp nail mysql-server mysql-client libmysqlclient14-dev courier-imap courier-authmysql courier-imap-ssl courier-pop courier-pop-ssl gcc libc6-dev g++ libgdbm-dev gcc-3.4 cpp make postfix postfix-mysql postfix-tls sasl2-bin libsasl2-modules-sql libpam-mysql clamav-daemon clamav-freshclam amavisd-new phpmyadmin php4 apache2 php4-mysql libapache2-mod-php4 libgsasl7 libsasl2 libsasl2-dev libsasl2-modules libfile-mmagic-perl libconfig-inifiles-perl libconvert-tnef-perl libconvert-uulib-perl libio-zlib-perl libarchive-tar-perl libarchive-zip-perl libparse-syslog-perl libunix-syslog-perl libmime-perl libmime-base32-perl libfile-scan-perl libnet-server-perl libnet-smtp-server-perl libmd5-perl ncftp unzip ftp gnupg arj cabextract unrar-free

echo "Instalando mais alguns pacotes extras"

# Remover o webmail da instalação agora, será instalado mais tarde, de acordo com a escolha do usuário
# apt-get install mc mondo mindi nmap phpmyadmin squirrelmail squirrelmail-locales spamassassin ntpdate sudo unrar lha arc zoo 
apt-get install mc mondo mindi nmap phpmyadmin spamassassin ntpdate sudo unp arc zoo 

echo -e \\n

# Trabalhar com um diretorio para instalacao, tudo dentro do $TMPDIR é removido em caso de boot (acidental, por falta de energia, ou para testes)
echo -e "2 - Baixar o postfixadmin e maildrop em $TMPDIR:"\\n

cd $TMPDIR

wget -c http://www.servtec.eti.br/downloads/ServidorEmailDebianSarge/postfixadmin-2.1.0-MODIFICADO.tar.gz
wget -c http://umn.dl.sourceforge.net/sourceforge/courier/maildrop-1.6.3.tar.bz2

echo -e "Descompactando PostfixAdmin em /var/www:"\\n

cd /var/www
tar -zxvf $TMPDIR/postfixadmin-2.1.0-MODIFICADO.tar.gz


chown -R www-data.www-data /var/www/postfixadmin-2.1.0

cd /var/www/postfixadmin-2.1.0
chmod 640 *.php *.css
cd /var/www/postfixadmin-2.1.0/admin/
chmod 640 *.php .ht*
cd /var/www/postfixadmin-2.1.0/images/
chmod 640 *.gif *.png
cd /var/www/postfixadmin-2.1.0/languages/
chmod 640 *.lang
cd /var/www/postfixadmin-2.1.0/templates/
chmod 640 *.tpl
cd /var/www/postfixadmin-2.1.0/users/
chmod 640 *.php  

#voltando para o $TMPDIR
cd $TMPDIR

echo -e "Baixando o PHPSysinfo"\\n
wget -c http://optusnet.dl.sourceforge.net/sourceforge/phpsysinfo/phpsysinfo-2.5.2-rc3.tar.gz

echo -e "Instalando o PHPSysinfo"
cd /var/www
tar -zxvf $TMPDIR/phpsysinfo-2.5.2-rc3.tar.gz
mv /var/www/phpsysinfo /var/www/info

cat <<EOF > /var/www/info/config.php
<?php
$webpath = "";
$default_lng='pt-br';
$default_template='black';
$hide_picklist = true;
$sensor_program = "";
$show_mount_point = true;
$show_bind = false;
$show_inodes = true;
$loadbar = false;
$addpaths = array();
$showerrors = true;
$temperatureformat = "c";
$hddtemp_avail = "tcp";      // read data from hddtemp deamon (localhost:7634)
$hddtemp_avail = "suid";     // read data from hddtemp programm (must be set suid)
$hide_mounts[] = '/dev/shm';
?>

EOF

#voltando para o $TMPDIR
cd $TMPDIR

echo -e \\n
echo -e "3 - Configurações"\\n

echo -e "3.1 - Definir a senha do usuário root do MySQL:"\\n
echo " "
echo "Informe a senha a ser utilizada pelo usuário root"
read -p SENHA_ROOT_MYSQL
mysqladmin -u root password '$SENHA_ROOT_MYSQL'
# Zera o arquivo de senhas, serão apresentadas ao usuário no fim da instalação
> $TMPDIR/senhas.sistema.txt
# Grava a senha do root no arquivo de senhas (zera o arquivo novamente, só pra garantir)
echo "Senha do usuário root no MySQL: $SENHA_ROOT_MYSQL" > $TMPDIR/senhas.sistema.txt

echo " "
echo -e "3.2 - Ativando o log do MySQL:"\\n


#echo "log = /var/log/mysql.log" >> /etc/mysql/my.cnf

# A forma abaixo é um pouco mais "estilosa" :)
# Backup do original
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.orig
# Fazendo o trabalho sujo
cat /etc/mysql/my.cnf | sed “s/#log            = /var/log/mysql.log/log            = /var/log/mysql.log/g” > /tmp/tmp_mycnf
cp -f /tmp/mycnf /etc/mysql/my.cnf


echo -e "Reiniciar o serviço do MySQL para ativar as mudanças:"\\n

/etc/init.d/mysql restart

echo -e "3.3 - Adicionar um usuário e grupo para o maildrop no sistema"\\n

echo -e "Criando usuário e grupo com uid=128, gid=128"\\n

groupadd -g 128 maildrop
useradd -d /var/spool/mail -g 128 -u 128 -s /bin/false maildrop

echo -e "3.4 - Criar o banco do postfix no MySQL:"\\n

echo "Precisamos definir tres senhas: uma para o usuário do maildrop, uma para o usuario do postfixadmin, e uma para o usuário do postfix no MySQL"
echo " "
echo "Informe a senha para o usuário do Postfix"
read SENHA_USUARIO_DB_POSTFIX
echo " "
echo "Informe agora a senha para o usuário do Maildrop"
read SENHA_USUARIO_DB_MAILDROP
echo " "
echo "Informe agora a senha para o usuário do PostfixAdmin"
read SENHA_USUARIO_POSTFIXADMIN
echo " "

# Salva as senhas num arquivo texto, para referencia no fim da configuração.
echo "Senha do usuário postfix no MySQL: $SENHA_USUARIO_DB_POSTFIX" >> $TMPDIR/senhas.sistema.txt
echo "Senha do usuário maildrop no MySQL: $SENHA_USUARIO_DB_MAILDROP" >> $TMPDIR/senhas.sistema.txt
echo "Senha do usuário postfixadmin no MySQL: $SENHA_USUARIO_POSTFIXADMIN" >> $TMPDIR/senhas.sistema.txt

mysql -u root -p$SENHA_ROOT_MYSQL <<EOF
# INICIO DO postfix_mysql.db =================
#
# Postfix / MySQL
#
# Cria o usuário e senha do Postfix e Maildrop para
# acesso ao banco
#

USE mysql;

INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('$SENHA_USUARIO_DB_POSTFIX'));
INSERT INTO user (Host, User, Password) VALUES ('localhost','maildrop',password('$SENHA_USUARIO_DB_MAILDROP'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','maildrop','Y');

FLUSH PRIVILEGES;

#
# Cria o usuario de administração do PostfixAdmin
#

USE mysql;

INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('$SENHA_USUARIO_POSTFIXADMIN'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv)
VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');

FLUSH PRIVILEGES;


#
# Cria o banco postfix
#

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 '',
  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(1) NOT NULL default '1',
  PRIMARY KEY  (username),
  KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Admins';
         
#
# Table structure for table alias
#
USE postfix;

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(1) NOT NULL default '1',
  PRIMARY KEY  (address),
  KEY address (address)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';
               
#
# Table structure for table domain
#
USE postfix;

CREATE TABLE domain (
  domain varchar(255) NOT NULL default '',
  description varchar(255) NOT NULL default '',
  aliases int(10) NOT NULL default '0',
  mailboxes int(10) NOT NULL default '0',
  maxquota int(10) NOT NULL default '0',
  transport varchar(255) NOT NULL default 'maildrop',
  backupmx tinyint(1) NOT NULL default '0',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (domain),
  KEY domain (domain)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains';
                        
#
# Table structure for table domain_admins
#
USE postfix;

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(1) NOT NULL default '1',
  KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Domain Admins';
                        
#
# Table structure for table log
#
USE postfix;

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
#
USE postfix;

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 '/postfix/',  maildir varchar(255) NOT NULL default '',  quota int(10) NOT NULL default '0',  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(1) NOT NULL default '1',
  passwd_expire enum('N','Y') default 'Y',
  uid int(10) unsigned default '128',
  gid int(10) unsigned default '128',   
  PRIMARY KEY  (username),
  KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';
                          
#
# Table structure for table vacation
#
USE postfix;

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(1) NOT NULL default '1',
  PRIMARY KEY  (email),
  KEY email (email)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation';                                        

EOF

# Fim da criacao de bancos e tabelas no mysql

echo -e "O banco e as tabelas, bem como o usuário do postfix foram criados."\\n

echo -e "Verifique a criação das tabelas usando o PHPMyAdmin, acesando o http://$IP_SERVIDOR/phpmyadmin pelo seu navegador"\\n

echo "Pressione ENTER para continuar"
read p

# Essas mensagens são dispensaveis... for now
#echo -e "Na tabela alias é onde serão criados os redirecionamentos de e-mail."\\n
#echo "Descrição: Na tabela domain é aonde você cria e indica o domínio."

echo -e \\n
echo "Descrição: A tabela mailbox é a principal tabela, onde serão criados os usuários e suas configurações como senha, diretório, cota de disco, etc."
echo -e \\n
echo "Descrição: tabela admin. Essa tabela é usado pelo PostfixAdmin para criar os administradores que irão ser responsáveis pela administração das contas dos respectivos domínios."
echo -e \\n
echo "O nosso banco de email está criado. O que temos que fazer, é "ensinar" ao Postfix a conectar-se no MySQL e pegar os dados que ele precisa sobre o usuario, mas antes, vamos configurar o Courier-IMAP."
echo -e \\n
echo "Pressione ENTER para continuar"
read p

echo -e "3.5 - Copiando o arquivo de exemplo de warning de cota:"\\n
cd /etc/courier
cp /usr/share/doc/courier-base/examples/quotawarnmsg.example quotawarnmsg

echo -e "3.6 - Configurar o courier para autenticar no MySQL:"\\n
echo "As configurações default dos arquivos imapd e pop3d, ao meu ver, já são boas."
echo "Altere caso você sinta necessidade."
echo "Criaremos /etc/courier/authmysqlrc. Esse arquivo é responsável pelas configurações do Courier para que ele conecte no MySQL e autentique os usuários. Edite-o conforme as suas configurações. "
echo -e \\n

# vim /etc/courier/authmysqlrc

cat <<EOF > /etc/courier/authmysqlrc
MYSQL_SERVER            localhost
MYSQL_USERNAME          postfix
MYSQL_PASSWORD          $SENHA_USUARIO_DB_POSTFIX
MYSQL_SOCKET            /var/run/mysqld/mysqld.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
EOF

echo -e "Fazendo backup do /etc/courier/authdaemonrc para /etc/courier/authdaemonrc_OLD"\\n

if (test -f /etc/courier/authdaemonrc_OLD)
 then
    echo "Arquivo de backup já Existe"
 else 
    echo "Criando backup:"
    mv /etc/courier/authdaemonrc /etc/courier/authdaemonrc_OLD
fi

echo -e "Adicionando novo conteúdo ao /etc/courier/authdaemonrc"\\n 

cat <<EOF > /etc/courier/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authcustom authcram authuserdb authldap authpgsql authmysql authpam"
daemons=5
version=""
authdaemonvar=/var/run/courier/authdaemon
EOF

echo "Pressione ENTER para continuar"
read p

echo -e "3.7 - Reiniciar os serviços, e testar se estão ativos:"\\n

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart

echo -e \\n
echo -e "Testando o IMAP e POP 3com o Telnet:"\\
echo "Para testar com o telnet, abra uma outra janela e use os seguinte comandos:"
echo "\"telnet 0 143\" para  testar o IMAP"
echo "\"telnet 0 110\" para  testar o POP3"
echo "para desconectar do IMAP (porta 143), digite \"0 logout\""
echo "e para desconectar do POP (porta 110), digite simplesmente \"quit\""
echo -e \\n

echo "Pressione ENTER para continuar"
read p

echo -e "3.8 - Configurando o maildrop:"\\n
echo -e "Iremos criar um arquivo, chamado /etc/maildropmysql.config"\\n

cat <<EOF > /etc/maildropmysql.config
hostname        localhost
port            3306
socket          /var/run/mysqld/mysqld.sock
database        postfix
dbuser          maildrop
dbpw            $SENHA_USUARIO_DB_MAILDROP
dbtable         mailbox
default_gidnumber       128
default_uidnumber       128
uid_field               username
uidnumber_field         uid
gidnumber_field         gid
maildir_field           maildir
homedirectory_field     home
quota_field             quota
mailstatus_field        active
where_clause            ""
EOF

echo -e \\n
echo -e "Decompactar o maildrop em $TMPDIR e preparar para compilar:"\\n

cd $TMPDIR
tar xvjf maildrop-1.6.3.tar.bz2

echo -e \\n
echo -e "Configurar para compilação..."\\n
cd maildrop-1.6.3
./configure --prefix=/usr --sysconfdir=/etc/maildrop --enable-maildrop-uid=128 --enable-maildrop-gid=128 --enable-syslog=1 --enable-maildropmysql --enable-maildirquota

echo -e \\n
echo -e "Compilando...:"\\n
make

echo -e \\n
echo -e "Instalando...:"\\n
make install

echo -e \\n
echo -e "Obs: o download e compilação do maildrop vem propositamente após a criação do arquivo de configuração, pois este arquivo é usado durante o ./configure."\\n
echo -e "DICA: O Maildrop possui um recurso de aviso de email para o usuario caso a sua caixa postal ultrapasse a porcentagem de utilização de um valor especificado. Aqui usaremos 90%"\\n
echo -e "Sendo assim, você pode personalizar a mensagem de aviso que o usuario ira receber, bastando para isso editar o arquivo /etc/courier/quotawarnmsg."\\n

mkdir /etc/maildrop
echo "AVISO: Sua Caixa Postal está acima de 90%. Por favor delete alguns emails para liberar espaço." > /etc/courier/quotawarnmsg 
cd $TMPDIR

echo -e "3.9 - Configurando o Postfix:"\\n

echo -e "Criando arquivos de conexão do Postfix com MySQL..."\\n

cat <<EOF > /etc/postfix/mysql_virtual_alias_maps.cf
# mysql_virtual_alias_maps.cf
# -----------------------------
user = postfix
password = $SENHA_USUARIO_DB_POSTFIX
dbname = postfix
table = alias
select_field = goto
where_field = address
hosts = localhost
EOF

cat <<EOF > /etc/postfix/mysql_virtual_mailbox_maps.cf
# mysql_virtual_mailbox_maps.cf
# ------------------------------
user = postfix
password = $SENHA_USUARIO_DB_POSTFIX
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
hosts = localhost
EOF

cat <<EOF > /etc/postfix/mysql_transport_maps.cf
# mysql_transport_maps.cf
# --------------------------
user = postfix
password = $SENHA_USUARIO_DB_POSTFIX
hosts = localhost
dbname = postfix
table = domain
select_field = transport
where_field = domain
EOF

cat <<EOF > /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
# mysql_virtual_mailbox_limit_maps.cf
# ------------------------------------
user = postfix
password = $SENHA_USUARIO_DB_POSTFIX
dbname = postfix
table = mailbox
select_field = quota
where_field = username
hosts = localhost
EOF

echo "Arquivos criados... Pressione ENTER para prosseguir"
read p

echo -e "Fazendo backup do master.cf..."\\n

if (test -f /etc/postfix/master.cf_OLD)
 then
    echo "Arquivo de backup já existe, criando master.cf_OLD1"
    mv /etc/postfix/master.cf /etc/postfix/master.cf_OLD1
 else 
    echo "Criando backup:"
    mv /etc/postfix/master.cf /etc/postfix/master.cf_OLD
fi

echo -e "Adicionando novo conteúdo ao /etc/postfix/master.cf"\\n 

cat <<EOF > /etc/postfix/master.cf
# Arquivo somente com as linha habilitadas, sem os comentarios
#
smtp      inet  n       -       n       -       -       smtpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=maildrop argv=/usr/bin/maildrop -w 90 -d \${recipient}
old-cyrus unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/lib/cyrus/deliver -e -m \${extension} \${user}
cyrus     unix  -       n       n       -       -       pipe
  user=cyrus argv=/usr/lib/cyrus/deliver -e -r \${sender} -m \${extension} \${user}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a\$sender - \$nexthop!rmail (\$recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r \$nexthop (\$recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f \$sender \$nexthop \$recipient
#
#
EOF


echo -e "Fazendo uma copia backup do arquivo /etc/postfix/main.cf:"\\n

if (test -f /etc/postfix/main.cf_OLD)
 then
    echo "Arquivo de backup já existe, criando main.cf_OLD1"
    mv /etc/postfix/main.cf /etc/postfix/main.cf_OLD1
 else 
    echo "Criando backup:"
    mv /etc/postfix/main.cf /etc/postfix/main.cf_OLD
fi

echo -e "Por favor, informe o host do servidor e o nome do seu dominio (ex. mail.meudominio.com.br)"
read HOSTNAME
echo $HOSTNAME > /etc/hostname
DOMINIO=`echo $HOSTNAME |cut -f 2-10 -d "."`

echo -e \\n
echo -e "Fazendo as alteracoes necessárias no /etc/postfix/main.cf:"\\n

cat <<EOF > /etc/postfix/main.cf
#======== CONFIGURACOES BASICAS ===============
queue_directory = /var/spool/postfix/
program_directory=/usr/sbin
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
default_privs=nobody
default_transport=smtp
local_recipient_maps =
delay_warning_time = 1m
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=\$myhostname ESMTP
disable_vrfy_command=yes
home_mailbox=Maildir/

# ========== NOME DO DOMÃNIO ===========
myhostname=$HOSTNAME
mydomain=$DOMINIO
myorigin= \$mydomain
mydestination= \$mydomain, \$transport_maps

#=====REDES p/ Relay======
mynetworks=127.0.0.0/8 $MINHA_REDE

#======== MYSQL ==============
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /postfix
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_uid_maps = static:128
virtual_gid_maps = static:128
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 = 100000000
virtual_maildir_limit_message = Desculpe, este usuario esta com a caixa postal lotada, tente enviar o e-mail novamente mais tarde.
virtual_overquota_bounce = yes

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


EOF

echo -e "Arquivos foram gerados e configurados, agora vamos reiniciar o serviço do Postfix."\\n
echo "Pressione ENTER para prosseguir"
read p

# Rodando newaliases
touch /etc/postfix/aliases
newaliases

# Parando
/etc/init.d/postfix restart

echo -e \\n
echo -e "3.10 - Inserindo parametros para testes"\\n
echo -e "Dica: o usuário postfix não precisa de permissão para inserir dados, isto cabe ao postfixadmin; "
echo -e "Neste momento, vamos logar no banco MySQL e inserir um domínio e dois "
echo -e "usuários de email para testes: uteste01@dominio1.com.br e uteste02@dominio1.com.br."\\n
echo -e "Logando como root no MySQL..."\\n

mysql -u root -p$SENHA_ROOT_MYSQL <<EOF
USE postfix;

INSERT INTO domain (domain,description,transport,active) VALUES ('dominio1.com.br','Dominio de Teste','maildrop','1');
INSERT INTO mailbox (username,password,name,home,maildir,quota,domain) VALUES ('uteste01@dominio1.com.br' ,encrypt('$SENHA_EMAIL_UTESTE01') , 'Usuario Teste 001' ,
                '/postfix/' ,'dominio1.com.br/uteste01/Maildir/' , '10000000S' ,'dominio1.com.br');
INSERT INTO mailbox (username,password,name,home,maildir,quota,domain) VALUES ('uteste02@dominio1.com.br' ,encrypt('$SENHA_EMAIL_UTESTE02') , 'Usuario Teste 002' ,
                '/postfix/' ,'dominio1.com.br/uteste02/Maildir/' , '10000000S' ,'dominio1.com.br');
EOF

#
echo -e \\n
echo "Pressione ENTER para prosseguir"
read p

echo -e "Criando o HOME dos usuários:"\\n
mkdir -p /postfix/dominio1.com.br/uteste01
maildirmake /postfix/dominio1.com.br/uteste01/Maildir
mkdir -p /postfix/dominio1.com.br/uteste02
maildirmake /postfix/dominio1.com.br/uteste02/Maildir
chown maildrop:www-data /postfix/ -R
chmod 770 /postfix/ -R

echo -e "3.11 - Testar a entrega de mensagens para o usuário:"\\n
echo -e "Será enviado um email para o uteste01@dominio1.com.br para testar."\\n
echo "Pressione ENTER para prosseguir"
read p

cat /etc/modules.conf | maildrop -d uteste01@dominio1.com.br
echo -e "Conferindo se a mensagem foi entregue:"\\n
cd /postfix/dominio1.com.br/uteste01/Maildir/new
ls -lha
cd $TMPDIR
echo -e \\n
echo "Pressione ENTER para prosseguir"
read p

echo -e "Testar autenticação IMAP e POP3 via banco usando telnet:"\\n
echo "Para testar com o telnet, abra uma outra janela e use os seguinte comandos:"
echo "\"telnet 0 143\" para  testar o IMAP"
echo "\"telnet 0 110\" para  testar o POP3"
echo "para desconectar do IMAP (porta 143), digite \"0 logout\""
echo "e para desconectar do POP (porta 110), digite simplesmente \"quit\""
echo " "
echo "Pressione ENTER para continuar"
read p

echo -e "Até agora provavelmente tudo funcionou corretamente. Caso tenha tido problemas, verifique no log do MySQL como a query está sendo feita, isso pode te poupar muito tempo de dor de cabeça."\\n
echo "Pressione ENTER para prosseguir"
read p

echo -e "3.12 - Cota de e-mails"\\n
echo -e "Quem vai ser responsável pelo controle de cota de disco nesse ambiente é o Maildrop."\\n
echo -e "Os valores de cotas serão cadastrados no banco de dados, sendo independente para cada usuário. O Maildrop irá ler as tabelas do MySQL e conforme o valor especificado, ele irá fazer o controle de tal cota."\\n
echo -e "Para fazer o teste, instalamos no primeiro passo o nail, que é um cliente de e-mail na console, que permite o envio de anexos, com o parametro -a:"\\n

echo -e \\n
echo "Pressione ENTER para testar o nail ( se demorar demais, CONTROL+D para sair do nail )"
read p

cat /etc/fstab | nail -s "Teste de envio de email com anexo" -a $TMPDIR/maildrop-1.6.3.tar.bz2 uteste01@dominio1.com.br

echo -e "Após isto, vamos verificar o que o log do servidor de e-mail nos diz:"\\n
tail -n 10 /var/log/mail.log
echo -e \\n
echo "pressione ENTER para prosseguir"
read p

echo -e "3.13 - SASL2 no Postfix:"\\n
echo -e "O SASL permite que um usuário consiga enviar email pelo servidor smtp (relay) sem que o seu IP esteja na lista de IP's "
echo -e "liberados para relay, no postfix é configurado na linha \"mynetworks\" no arquivo main.cf."\\n
echo -e "O requisito para enviar email é que o usuário exista no sistema. Isso é um ótimo recurso, pois o usuário onde "
echo -e "estiver pode enviar email pelo seu servidor, sem que você precise liberar o \"relay\" para todo mundo."\\n

cat <<EOF >> /usr/lib/sasl2/smtpd.conf
# /usr/lib/sasl2/smtpd.conf
# -----------
pwcheck_method: saslauthd
mech_list: plain login
log_level: 7
EOF

cat <<EOF >> /etc/postfix/sasl/smtpd.conf
# /usr/lib/sasl2/smtpd.conf
# -----------
pwcheck_method: saslauthd
mech_list: plain login
log_level: 7
EOF

cat <<EOF >> /etc/pam.d/smtp
# /etc/pam.d/smtp
# ------------------------
#%PAM-1.0

auth     sufficient   /lib/security/pam_unix_auth.so try_first_pass
auth     optional   /lib/security/pam_mysql.so user=postfix passwd=$SENHA_USUARIO_DB_POSTFIX host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
account  sufficient   /lib/security/pam_unix_acct.so
account  required   /lib/security/pam_mysql.so user=postfix passwd=$SENHA_USUARIO_DB_POSTFIX host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
EOF

echo -e "Habilitando o SASL no Postfix:"\\n
cat <<EOF >> /etc/postfix/main.cf

# ====== SASL ================
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
   permit_sasl_authenticated,
   permit_mynetworks,
   check_relay_domains
EOF

echo "START=yes" >> /etc/default/saslauthd
echo "PARAMS=\" -r\"" >> /etc/default/saslauthd

echo -e "Adicionando o postfix no grupo do sasl"\\n
adduser postfix sasl
echo -e "Startando os serviços de autenticação SASL, e reiniciando o postfix:"
/etc/init.d/saslauthd start
/etc/init.d/postfix restart

echo -e \\n
echo -e "3.14 - Configurar o amavis"\\n

echo "Instalando modulos adicionais do perl..."
apt-get install libconvert-tnef-perl libio-zlib-perl libarchive-tar-perl libsys-syslog-perl libemail-mime-perl libmime-explode-perl libmime-perl libmd5-perl libdatetime-perl libpsp-html-parser-perl libnet-sident-perl libwww-perl libfile-mmagic-perl libconfig-inifiles-perl libconvert-uulib-perl libevtlog0 libmime-base32-perl perl-modules  libvalidate-net-perl libnet-smtp-server-perl libnet-server-perl libdbix-profile-perl libdigest-sha1-perl libhtml-parser-perl libnet-dns-perl libwww-perl 

echo "Alguns modulos do perl não existem no repositorio APT do Debian, por conta disto, os instalaremos via CPAN, o processo é automatizado, ele já baixa, descompacta e compila os pacotes necessários, você precisará responder a algumas questões, em sua grande maioria (99%) as respostas padrão são as recomendadas, de toda forma, se preferir leia cada uma delas antes de responder..."
echo " "
echo "Pressione enter para prosseguir com a instalação dos modulos via CPAN"
read p
perl -MCPAN -e "install Archive::Zip"
perl -MCPAN -e "install Unix::Syslog"
perl -MCPAN -e "install MIME::Base64"
perl -MCPAN -e "install Time::HiRes"
perl -MCPAN -e "install Mail::SpamAssassin"
perl -MCPAN -e "install IP::Country"
perl -MCPAN -e "install LWP::UserAgent"
perl -MCPAN -e "install HTTP::Date"

echo " "
clear
echo "Modulos do perl (provavelmente) instalados com sucesso..."
echo " "
echo "Pressione enter para continuar..."
read p

echo -e "Preparando o SpamAssassin"\\n

cat <<EOF > /etc/default/spamassassin
# /etc/default/spamassassin
# Duncan Findlay

# WARNING: please read README.spamd before using.
# There may be security risks.

# Change to one to enable spamd
#ENABLED=0
ENABLED=1

# Options
# See man spamd for possible options. The -d option is automatically added.

# NOTE: version 3.0.x has switched to a "preforking" model, so you
# need to make sure --max-children is not set to anything higher than
# 5, unless you know what you're doing.

OPTIONS="--create-prefs --max-children 5 --helper-home-dir"

# Pid file
# Where should spamd write its PID to file? If you use the -u or
# --username option above, this needs to be writable by that user.
# Otherwise, the init script will not be able to shut spamd down.
PIDFILE="/var/run/spamd.pid"

# Set nice level of spamd
#NICE="--nicelevel 15"

EOF

cat <<EOF > /etc/spamassassin/local.cf
# This is the right place to customize your installation of SpamAssassin.
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
###########################################################################
#
# rewrite_header Subject *****SPAM*****
# report_safe 1
# trusted_networks 212.17.35.
# lock_method flock

# Nível de sensibilidade do spamassassin
required_score 4.5

# que linguas o Spamassasin pode receber e-mails
ok_languages pt en

# Sobreescreve o subject
rewrite_header Subject ****SPAM(_SCORE_)***

EOF


#echo "Adicionando no /etc/postfix/master.cf o seguinte bloco de texto:"

cat <<EOF >> /etc/postfix/master.cf

# AMAVIS-NEW+SpamAssassin
smtp-amavis unix -     -       n       -       2  smtp
        -o smtp_data_done_timeout=1200
        -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 mynetworks=127.0.0.0/8
EOF

cat <<EOF >> /etc/amavis/conf.d/15-content_filter_mode
@bypass_virus_checks_maps = (
   %bypass_virus_checks, @bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
   %bypass_spam_checks, @bypass_spam_checks_acl, \$bypass_spam_checks_re);
EOF

echo -e "Adicionando o amavis no grupo do clamav, e vice-versa, isso é necessário para que eles possam acessar uns os arquivos do outro:"\\n
adduser clamav amavis
adduser amavis clamav

echo -e "Iniciando o serviço do amavis:"\\n
/etc/init.d/amavis start

echo -e "Reiniciando o serviço do clamav:"\\n
/etc/init.d/clamav-daemon restart

echo " "  >> /etc/postfix/main.cf
echo "#===== AMAVIS ==============" >> /etc/postfix/main.cf
echo "content_filter = smtp-amavis:[127.0.0.1]:10024" >> /etc/postfix/main.cf

echo -e "Reiniciando o serviço do postfix:"\\n
/etc/init.d/postfix restart

echo -e \\n
echo -e "Vamos agora fazer um teste, para saber se nosso servidor realmente está evitando vírus, "
echo -e "vamos utilizar para isto o arquivo de teste do EICAR:"\\n

echo "Pressione ENTER para prosseguir"
read p

cd $TMPDIR
wget -c http://www.eicar.org/download/eicar.com

MENSSAGEM="X5O!P%@AP[4PZX54(P^)7CC)7}\$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!\$H+H* "

echo "enviando \"virus\" no corpo da mensagem"
# teste 1
echo -e $MENSSAGEM | mail -s "Teste de email com vírus" uteste01@dominio1.com.br 

echo "enviando \"virus\" como anexo"
# teste 2
cat /etc/fstab | nail -s "Testando o envio de anexo" -a $TMPDIR/eicar.com uteste01@dominio1.com.br

echo "Verificando no log se os virus foram detectados e dropados"
cd $TMPDIR
tail -n 10 /var/log/mail.log 

echo -e \\n
echo "Pressione ENTER para prosseguir"
read p

echo -e "3.15 - Configurar o postfixadmin"\\n

echo "Baixando arquivo do postfixAdmin em $TMPDIR"
cd $TMPDIR
wget -c www.andersonleite.net/files/postfix.rar
cd /var/www
rar x $TMPDIR/postfix.rar

echo "pressione ENTER"
read p

echo -e "3.16 - Configurar o pflogsumm/mailgraph/isoqlog"\\n
echo -e "Instalar os pacotes necessários:"\\n

apt-get install pflogsumm procmail

echo "Configurando o rotacionamento do log de e-mail"
cat <<EOF >>/etc/logrotate.conf
/var/log/mail.log {
    missingok
    daily
    rotate 7
    create
    compress
    start 0
}
EOF

echo -e "Isso garante o rotacionamento do log uma vez por dia, compactando os arquivos antigos do log."\\n
echo -e "Será criado o arquivo /usr/local/sbin/postfix_report.sh, que utilizaremos para a geração dos relatórios, " 
echo -e "e envio dos mesmos via e-mail. Este arquivo sera acionado pelo crontab."\\n

cat <<EOF > /usr/local/sbin/postfix_report.sh
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
gunzip /var/log/mail.log.0.gz
pflogsumm /var/log/mail.log.0 | formail -c -I"Subject: Estatisticas de e-mail $DOMINIO"
-I"From: pflogsumm@meudominio.com.br" -I"To: $EMAIL_SUPORTE" 
-I"Received: from $DOMINIO ([$IP_SERVIDOR])" | sendmail $EMAIL_SUPORTE
gzip /var/log/mail.log.0
exit 0
EOF

# Tornando o script executavel
chmod 755 /usr/local/sbin/postfix_report.sh

# Adicionando entrada da geracao de relatorio na cron do root
echo "0 7 * * * root /usr/local/sbin/postfix_report.sh &> /dev/null" >>/etc/crontab

echo -e "Instalar os pacotes isoqlog / mailgraph:"\\n

apt-get install isoqlog mailgraph 

# crontab para o isoqlog
echo -e "Criando uma entrada no crontab para o isoqlog"\\n

echo "# Entrada no crontab para o isoqlog" >> /etc/crontab
echo "58 * * * * root /usr/bin/isoqlog 1 >/dev/null 2>/dev/null" >> /etc/crontab

echo "Umas coisinhas a mais..."

# informaçoes do php
echo "<? phpinfo(); ?>" > /var/www/phpinfo.php

# Por enquanto não vamos usar isso
#echo -e "Criando link para  SquirelMail em /var/www"\\n
#ln -s /usr/share/squirrelmail /var/www/squirrelmail

#Facilitando as coisas no Postfixadin...
#echo -e "Facilitando as coisas no Postfixadin..."\\n
#mv /var/www/postfixadmin-2.1.0/motd-admin.txt  /var/www/postfixadmin-2.1.0/motd-admin.txt_OLD
#mv /var/www/postfixadmin-2.1.0/setup.php  /var/www/postfixadmin-2.1.0/setup.php_OLD

cat <<EOF >/var/www/postfixadmin/config.inc.php
<?php
// 
// Postfix Admin 
// by Mischa Peters <mischa at high5 dot net>
// Copyright (c) 2002 - 2005 High5!
// License Info: http://www.postfixadmin.com/?file=LICENSE.TXT
//
// File: config.inc.php
//
if (ereg ("config.inc.php", \$_SERVER['PHP_SELF']))
{
   header ("Location: login.php");
   exit;
}
// Postfix Admin Path
// Set the location to your Postfix Admin installation here.
\$CONF['postfix_admin_url'] = '';
\$CONF['postfix_admin_path'] = '';
// Language config
// Language files are located in './languages'.
\$CONF['default_language'] = 'pt-br';
// Database Config
// mysql = MySQL 3.23 and 4.0
// mysqli = MySQL 4.1
// pgsql = PostgreSQL
\$CONF['database_type'] = 'mysql';
\$CONF['database_host'] = 'localhost';
\$CONF['database_user'] = 'postfixadmin';
\$CONF['database_password'] = '$SENHA_USUARIO_POSTFIXADMIN';
\$CONF['database_name'] = 'postfix';
\$CONF['database_prefix'] = '';
//
//Comando SUDO
\$CONF['sudo_path']= "/usr/bin/sudo";
//PATH do script adduser.sh e userdel.sh
\$CONF['adduser_path']= "/var/www/postfixadmin/adduser.sh";
\$CONF['userdel_path']= "/var/www/postfixadmin/userdel.sh";
// Diretório base das caixas postais dos usuários
\$CONF['home_base'] = "/postfix/";
// Final das alterações necessárias no arquivo config.inc.php
//
// Site Admin
// Define the Site Admins email address below.
// This will be used to send emails from to create mailboxes.
\$CONF['admin_email'] = 'postmaster@$MEU_DOMINIO';
// Mail Server
// Hostname (FQDN) of your mail server.
// This is used to send email to Postfix in order to create mailboxes.
\$CONF['smtp_server'] = 'localhost';
\$CONF['smtp_port'] = '25';
// Encrypt
// In what way do you want the passwords to be crypted?
// md5crypt = internal postfix admin md5
// system = whatever you have set as your PHP system default
// cleartext = clear text passwords (ouch!)
\$CONF['encrypt'] = 'md5crypt';
// Generate Password
// Generate a random password for a mailbox and display it.
// If you want to automagically generate paswords set this to 'YES'.
\$CONF['generate_password'] = 'NO';
// Page Size
// Set the number of entries that you would like to see
// in one page.
\$CONF['page_size'] = '10';
// Default Aliases
// The default aliases that need to be created for all domains.
\$CONF['default_aliases'] = array (
   'abuse' => 'abuse@$MEU_DOMINIO',
   'hostmaster' => 'hostmaster@$MEU_DOMINIO',
   'postmaster' => 'postmaster@$MEU_DOMINIO',
   'webmaster' => 'webmaster@$MEU_DOMINIO'
);
// Mailboxes
// If you want to store the mailboxes per domain set this to 'YES'.
// Example: /usr/local/virtual/domain.tld/username@domain.tld
\$CONF['domain_path'] = 'YES';
// If you don't want to have the domain in your mailbox set this to 'NO'.
// Example: /usr/local/virtual/domain.tld/username
//$CONF['domain_in_mailbox'] = 'YES';
\$CONF['domain_in_mailbox'] = 'NO';
// Default Domain Values
// Specify your default values below. Quota in MB.
\$CONF['aliases'] = '10';
\$CONF['mailboxes'] = '10';
\$CONF['maxquota'] = '10';
// Quota
// When you want to enforce quota for your mailbox users set this to 'YES'.
//$CONF['quota'] = 'NO';
\$CONF['quota'] = 'YES';
// You can either use '1024000' or '1048576'
\$CONF['quota_multiplier'] = '1024000';
// Transport
// If you want to define additional transport options for a domain set this to 'YES'.
// Read the transport file of the Postfix documentation.
\$CONF['transport'] = 'NO';
// Virtual Vacation
// If you want to use virtual vacation for you mailbox users set this to 'YES'.
// NOTE: Make sure that you install the vacation module. http://high5.net/postfixadmin/
\$CONF['vacation'] = 'NO';
// This is the autoreply domain that you will need to set in your Postfix
// transport maps to handle virtual vacations. It does not need to be a
// real domain (i.e. you don't need to setup DNS for it).
\$CONF['vacation_domain'] = 'autoreply.$MEU_DOMINIO';
// Alias Control
// Postfix Admin inserts an alias in the alias table for every mailbox it creates.
// The reason for this is that when you want catch-all and normal mailboxes
// to work you need to have the mailbox replicated in the alias table.
// If you want to take control of these aliases as well set this to 'YES'.
\$CONF['alias_control'] = 'NO';
// Special Alias Control
// Set to 'NO' if you don't want your domain admins to change the default aliases.
\$CONF['special_alias_control'] = 'YES';
// Logging
// If you don't want logging set this to 'NO';
\$CONF['logging'] = 'YES';
// Header
\$CONF['show_header_text'] = 'NO';
\$CONF['header_text'] = ':: Postfix Admin ::';
// Footer
// Below information will be on all pages.
// If you don't want the footer information to appear set this to 'NO'.
\$CONF['show_footer_text'] = 'YES';
\$CONF['footer_text'] = 'Return to $MEU_DOMINIO';
\$CONF['footer_link'] = 'http://$MEU_DOMINIO';
// Welcome Message
// This message is send to every newly created mailbox.
// Change the text between EOM.
\$CONF['welcome_text'] = <<<EOM
Hi,
Welcome to your new account.
EOM;
//
// END OF CONFIG FILE
//
?>
EOF

echo -e "Habilitando sudoers para executar os arquivos adduser.sh e userdel.sh..."\\n

cat <<EOF >/etc/sudoers
#POSTFIXADMIN
www-data ALL=NOPASSWD:/var/www/postfixadmin/adduser.sh
www-data ALL=NOPASSWD:/var/www/postfixadmin/userdel.sh
EOF

echo -e "Mudando as permissões dos arquivos adduser.sh e userdel.sh"\\n

chmod 700 /var/www/postfixadmin/*.sh
chmod 700 /var/www/*.sh


# ESTATISTICAS PARA SPAMASSASSIN
# Preparando diretorio e baixa script que gera statisticas do spamassassin

echo -e "Obtendo script para gerar estatistícas do ApamAssassin"\\n

cd $TMPDIR
mkdir /var/www/spam
wget -c http://david.hexstream.co.uk/scripts/sa-stats/sa-stats.pl
chmod +x sa-stats.pl
mv sa-stats.pl /etc/cron.hourly/

echo -e "Cria entrada no /etc/cron.hourly que gera as statisticas do SpamAssassin"\\n

#Cria a entrada no crontab
cat <<EOF > /etc/cron.hourly/spamstats
#!/bin/bash
#
HOJE=`date +%d%m%Y`

/etc/cron.hourly/sa-stats.pl -t < /var/log/mail.info >/var/www/spam/spamstats-$HOJE.txt
EOF

chmod +x /etc/cron.hourly/spamstats

# Volta ao $TMPDIR
cd $TMPDIR

#Criando a página web
echo -e "Criando o indice HTML"\\n

cat <<EOF > /var/www/index.html
<html>
<head>
   <title>Servidor de Email Completo em Debian Sarge </title>
</head>
<body>
<center>
<H3>Recursos Neste Servidor:</H3>
<HR>
<a href="">Localhost</a><BR>
<!--<a href="/squirrelmail/">WebMail </a><BR>-->
<a href="/postfixadmin/">PostFix Admin - users</a><BR>
<a href="/postfixadmin/admin/">PostFix Admin - admin</a><BR>
<a href="/phpmyadmin/">PhpMyAdmin </a><BR>
<a href="/isoqlog/">Relatórios de Email </a><BR>
<a href="/cgi-bin/mailgraph.cgi">Gráficos de Uso do Email </a><BR>
<a href="/spam/">Relatórios de Spam </a><BR>
<a href="/info/">Informações do Sistema </a><BR>
<a href="phpinfo.php">Informações do PHP </a><BR>
<BR><BR>
<HR>
<a href="http://www.postfix.org">Postfix</a>:: <a href="http://www.clamav.net">Clamav</a>:: <a href="http://spamassassin.apache.org">SpamAssassin</a>::<a href="http://www.spamhous.org">SpamHous</a>::<a href="http://www.spamcop.net">SpamCop</a>
<BR><BR>
<a href="http://www.antispam.br/">
<img
 src="http://www.antispam.br/campanha/antispam-full-banner-partic.gif" 
 border="0" alt="antispam.br">
 </a>
<BR><BR>
<HR>
Gerado automaticamente! Versão do Script: $VERSAO_SCRIPT"
</center>
<BR><BR>
</body>
</html>
EOF

echo -e \\n
echo -e "Para acessar os recursos instalados neste servidor, acesse http://$IP_SERVIDOR"\\n
echo "Primeira parte da instalação concluída. Pressione ENTER para atualizarmos o Clanav Anti-vírus"
read p

#limpa a tela antes de prosseguir
clear

##!/bin/bash

VERSAO="0.1.27 -15/09/2006"

echo -e "=================================================================================="
echo -e "================   ATENÇÂO   ====================================================="\\n
echo -e "Este script vai fazer a atualização do Clamav Anti-Vírus para versão mais recente"
echo -e "e instalar o F-prot Anti-vírus."\\n
echo -e "============================================= Versão $VERSAO =========="\\n

echo "Pressione ENTER para prosseguir"
read p

echo -e \\n
echo -e "Iremos agora fazer a atualização do Clamav Anti-virus."\\n

cat <<EOF >> /etc/apt/sources.list


#Clamav Binary packages for Debian stable/sarge:
deb http://ftp2.de.debian.org/debian-volatile sarge/volatile main
EOF

echo -e \\n
echo -e "Fazendo a atualização do anti-virus"\\n

apt-get update
apt-get install clamav clamav-daemon
freshclam

echo -e "Instalando um anti-vírus adicional, o F-Prot"\\n

cd $TMPDIR
wget http://http.us.debian.org/debian/pool/contrib/f/f-prot-installer/f-prot-installer_0.5.22_i386.deb

apt-get install libwww-perl liburi-perl libhtml-parser-perl libhtml-tree-perl libhtml-tagset-perl

dpkg -i f-prot-installer_0.5.22_i386.deb

echo -e \\n
echo -e "Gerando uma entrado no crontab para que o F-Prot se atualize"\\n

echo <<EOF >/etc/cron.d/f-prot-installer
#
27 4,16 * * * root if [ -x /usr/lib/f-prot/tools/check-updates ]; then /usr/lib/f-prot/tools/check-updates -cron; fi
#
# Uncomment to check for new version of program once a week
# 
00 12 * * 1 root if [ -x /usr/sbin/update-f-prot ]; then /usr/sbin/update-f-prot -i; fi 
EOF

echo -e "Alterando o /etc/amavis/amavisd.conf para dar suporte ao F-Prot"\\n

echo -e "Fazendo backup do /etc/amavis/amavisd.conf para /etc/amavis/amavisd.conf_OLD"\\n

if (test -f /etc/amavis/amavisd.conf_OLD)
 then
     echo "Arquivo de backup já Existe"
 else
      echo "Criando backup:"
      echo "mv /etc/amavis/amavisd.conf /etc/amavis/amavisd.conf_OLD"
      mv /etc/amavis/amavisd.conf /etc/amavis/amavisd.conf_OLD
fi
        
cat <<EOF > /etc/amavis/amavisd.conf
use strict;

# Configuration file for amavisd-new
# Defaults modified for the Debian amavisd-new package
# \$Id: amavisd.conf,v 1.27.2.2 2004/11/18 23:27:55 hmh Exp \$
#
# This software is licensed under the GNU General Public License (GPL).
# See comments at the start of amavisd-new for the whole license text.

#Sections:
# Section I    - Essential daemon and MTA settings
# Section II   - MTA specific
# Section III  - Logging
# Section IV   - Notifications/DSN, BOUNCE/REJECT/DROP/PASS destiny, quarantine
# Section V    - Per-recipient and per-sender handling, whitelisting, etc.
# Section VI   - Resource limits
# Section VII  - External programs, virus scanners, SpamAssassin
# Section VIII - Debugging

#GENERAL NOTES:
#  This file is a normal Perl code, interpreted by Perl itself.
#  - make sure this file (or directory where it resides) is NOT WRITABLE
#    by mere mortals (not even vscan/amavis; best to make it owned by root),
#    otherwise it represents a severe security risk!
#  - for values which are interpreted as booleans, it is recommended
#    to use 1 for true, undef for false.
#    THIS IS DIFFERENT FROM OLD AMAVIS VERSIONS where "no" also meant false,
#    now it means true, like any nonempty string does!
#  - Perl syntax applies. Most notably: strings in "" may include variables
#    (which start with \$ or @); to include characters @ and \$ in double
#    quoted strings, precede them by a backslash; in single-quoted strings
#    the \$ and @ lose their special meaning, so it is usually easier to use
#    single quoted strings (or qw operator) for e-mail addresses.
#    Still, in both cases a backslash needs to be doubled.
#  - variables with names starting with a '@' are lists, the values assigned
#    to them should be lists as well, e.g. ('one@foo', \$mydomain, "three");
#    note the comma-separation and parenthesis. If strings in the list
#    do not contain spaces nor variables, a Perl operator qw() may be used
#    as a shorthand to split its argument on whitespace and produce a list
#    of strings, e.g. qw( one@foo example.com three );  Note that the argument
#    to qw is quoted implicitly and no variable interpretation is done within
#    (no '\$' variable evaluations). The #-initiated comments can NOT be used
#    within a string. In other words, \$ and # lose their special meaning
#    within a qw argument, just like within '...' strings.
#  - all e-mail addresses in this file and as used internally by the daemon
#    are in their raw (rfc2821-unquoted and non-bracketed) form, i.e. 
#    Bob "Funny" Dude@example.com, not: "Bob \"Funny\" Dude"@example.com
#    and not <"Bob \"Funny\" Dude"@example.com>; also: '' and not '<>'.
#  - the term 'default value' in examples below refers to the value of a
#    variable pre-assigned to it by the program; any explicit assignment
#    to a variable in this configuration file overrides the default value;


#
# Section I - Essential daemon and MTA settings
#

# \$MYHOME serves as a quick default for some other configuration settings.
# More refined control is available with each individual setting further down.
# \$MYHOME is not used directly by the program. No trailing slash!
\$MYHOME = '/var/lib/amavis';   # (default is '/var/amavis')

# \$mydomain serves as a quick default for some other configuration settings.
# More refined control is available with each individual setting further down.
# \$mydomain is never used directly by the program.
#\$mydomain = 'example.com';      # (no useful default)
\$mydomain = '$MEU_DOMINIO';      # (no useful default)

# \$myhostname = 'host.example.com';  # fqdn of this host, default by uname(3)

# Set the user and group to which the daemon will change if started as root
# (otherwise just keeps the UID unchanged, and these settings have no effect):
\$daemon_user  = 'amavis';   # (no default (undef))
\$daemon_group = 'amavis';   # (no default (undef))

# Runtime working directory (cwd), and a place where
# temporary directories for unpacking mail are created.
# if you change this, you might want to modify the cleanup()
# function in /etc/init.d/amavisd-new
# (no trailing slash, may be a scratch file system)
\$TEMPBASE = \$MYHOME;           # (must be set if other config vars use is)
#\$TEMPBASE = "\$MYHOME$TMPDIR";     # prefer to keep home dir /var/amavis clean?

# \$helpers_home sets environment variable HOME, and is passed as option
# 'home_dir_for_helpers' to Mail::SpamAssassin::new. It should be a directory
# on a normal persistent file system, not a scratch or temporary file system
#\$helpers_home = \$MYHOME;      # (defaults to \$MYHOME)

# Run the daemon in the specified chroot jail if nonempty:
#\$daemon_chroot_dir = \$MYHOME;  # (default is undef, meaning: do not chroot)

\$pid_file  = "/var/run/amavis/amavisd.pid";  # (default: "\$MYHOME/amavisd.pid")
\$lock_file = "/var/run/amavis/amavisd.lock"; # (default: "\$MYHOME/amavisd.lock")

# set environment variables if you want (no defaults):
\$ENV{TMPDIR} = \$TEMPBASE;       # wise to set TMPDIR, but not obligatory
#...


# MTA SETTINGS, UNCOMMENT AS APPROPRIATE,
# both \$forward_method and \$notify_method default to 'smtp:127.0.0.1:10025'

# POSTFIX, or SENDMAIL in dual-MTA setup, or EXIM V4
# (set host and port number as required; host can be specified
# as IP address or DNS name (A or CNAME, but MX is ignored)
#\$forward_method = 'smtp:127.0.0.1:10025';  # where to forward checked mail
#\$notify_method = \$forward_method;          # where to submit notifications

# NOTE: The defaults (above) are good for Postfix or dual-sendmail. You MUST
#       uncomment the appropriate settings below if using other setups!

# SENDMAIL MILTER, using amavis-milter.c helper program:
# SEE amavisd-new-milter package docs FOR DEBIAN INSTRUCTIONS
#\$forward_method = undef;  # no explicit forwarding, sendmail does it by itself
# milter; option -odd is needed to avoid deadlocks
#\$notify_method = 'pipe:flags=q argv=/usr/sbin/sendmail -Ac -i -odd -f \${sender} -- \${recipient}';
# just a thought: can we use use -Am instead of -odd ?

# SENDMAIL (old non-milter setup, as relay):
#\$forward_method = 'pipe:flags=q argv=/usr/sbin/sendmail -C/etc/sendmail.orig.cf -i -f \${sender} -- \${recipient}';
#\$notify_method = \$forward_method;

# SENDMAIL (old non-milter setup, amavis.c calls local delivery agent):
#\$forward_method = undef;  # no explicit forwarding, amavis.c will call LDA
#\$notify_method = 'pipe:flags=q argv=/usr/sbin/sendmail -Ac -i -f \${sender} -- \${recipient}';

# EXIM v3 (not recommended with v4 or later, which can use SMTP setup instead):
#\$forward_method = 'pipe:flags=q argv=/usr/sbin/exim -oMr scanned-ok -i -f \${sender} -- \${recipient}';
#\$notify_method = \$forward_method;

# prefer to collect mail for forwarding as BSMTP files?
#\$forward_method = "bsmtp:\$MYHOME/out-%i-%n.bsmtp";
#\$notify_method = \$forward_method;


# Net::Server pre-forking settings
# You may want \$max_servers to match the width of your MTA pipe
# feeding amavisd, e.g. with Postfix the 'Max procs' field in the
# master.cf file, like the '2' in the:  smtp-amavis unix - - n - 2 smtp
#
\$max_servers  =  2;   # number of pre-forked children          (default 2)
\$max_requests = 10;   # retire a child after that many accepts (default 10)

\$child_timeout=5*60;  # abort child if it does not complete each task in n sec
                      # (default: 8*60 seconds)

# Check also the settings of @av_scanners at the end if you want to use
# virus scanners. If not, you may want to delete the whole long assignment
# to the variable @av_scanners, which will also remove the virus checking
# code (e.g. if you only want to do spam scanning).

# Here is a QUICK WAY to completely DISABLE some sections of code
# that WE DO NOT WANT (it won't even be compiled-in).
# For more refined controls leave the following two lines commented out,
# and see further down what these two lookup lists really mean.
#
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code
#
# Any setting can be changed with a new assignment, so make sure
# you do not unintentionally override these settings further down!

#COMENTADO PARA ATIVAR SPAMASSASSIN
#@bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin

# Lookup list of local domains (see README.lookups for syntax details)
#
# NOTE:
#   For backwards compatibility the variable names @local_domains (old) and
#   @local_domains_acl (new) are synonyms. For consistency with other lookups
#   the name @local_domains_acl is now preferred. It also makes it more
#   obviously distinct from the new %local_domains hash lookup table.
#
# local_domains* lookup tables are used in deciding whether a recipient
# is local or not, or in other words, if the message is outgoing or not.
# This affects inserting spam-related headers for local recipients,
# limiting recipient virus notifications (if enabled) to local recipients,
# in deciding if address extension may be appended, and in SQL lookups
# for non-fqdn addresses. Set it up correctly if you need features
# that rely on this setting (or just leave empty otherwise).
#
# With Postfix (2.0) a quick reminder on what local domains normally are:
# a union of domains specified in: \$mydestination, \$virtual_alias_domains,
# \$virtual_mailbox_domains, and \$relay_domains.
#
@local_domains_acl = ( ".\$mydomain" );  # \$mydomain and its subdomains
# @local_domains_acl = ( ".\$mydomain", "my.other.domain" );
# @local_domains_acl = qw();  # default is empty, no recipient treated as local
# @local_domains_acl = qw( .example.com );
# @local_domains_acl = qw( .example.com !host.sub.example.net .sub.example.net );

# or alternatively(A), using a Perl hash lookup table, which may be assigned
# directly, or read from a file, one domain per line; comments and empty lines
# are ignored, a dot before a domain name implies its subdomains:
#
#read_hash(\%local_domains, '/etc/amavis/local_domains');

#or alternatively(B), using a list of regular expressions:
# \$local_domains_re = new_RE( qr'[@.]example\.com\$'i );
#
# see README.lookups for syntax and semantics


#
# Section II - MTA specific (defaults should be ok)
#

# if \$relayhost_is_client is true, the IP address in \$notify_method and
# \$forward_method is dynamically overridden with SMTP client peer address
# (if available), which makes it possible for several hosts to share one 
# daemon.  The static port number is also overridden, and is dynamically 
# calculated  as being one above the incoming SMTP/LMTP session port number.
#
# These are logged at level 3, so enable logging until you know you got it
# right.
\$relayhost_is_client = 0;         # (defaults to false)

\$insert_received_line = 1;        # behave like MTA: insert 'Received:' header
                   # (does not apply to sendmail/milter)
                   # (default is true (1) )

# AMAVIS-CLIENT PROTOCOL INPUT SETTINGS (e.g. with sendmail milter)
#   (used with amavis helper clients like amavis-milter.c and amavis.c,
#   NOT needed for Postfix and Exim  or dual-sendmail - keep it undefined.)
#\$unix_socketname = "/var/lib/amavis/amavisd.sock"; # amavis helper protocol socket
\$unix_socketname = undef;         # disable listening on a unix socket
                                  # (default is undef, i.e. disabled)

# Do we receive quoted or raw addresses from the helper program?
# (does not apply to SMTP; 

Scripts recomendados

Trocar string A por string B em vários arquivos

Criando Autoridades Certificadoras e Certificados de Testes no Linux

Proc_del - Desinstalar programas compilados

Instagram Shell

Configuração de failover de links de internet


  

Comentários
[1] Comentário enviado por fontebon em 07/12/2006 - 22:34h

Bom trabalho...vou testar...


[2] Comentário enviado por dcyrillo em 08/12/2006 - 11:33h

Olá!
O que exatamente vc modificou do script que pegou?
Lembra qdo vc me mandou um email perguntando do autor do script?
Gostaria de saber que melhorias vc fez e de testá-lo.

Abraço, bom trabalho!!!

[3] Comentário enviado por rootkit em 08/12/2006 - 13:10h

Tentei automatizar o máximo possivel as tarefas, incluindo deteccao de parametros (ex. mascara e ip de rede do usuário, baseado na placa de rede informada pelo mesmo), instalacao dos modulos do Perl, uma limpeza geral no código, pra facilitar a leitura, e mudança na forma da alteração de alguns arquivos.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts