Instalação - Servidor de e-mail
Publicado por Anderson Leite 07/12/2006
[ Hits: 14.575 ]
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.
#!/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;
Monitoração e coleta de dados de performance de servidores GNU/Linux
shradio.sh - ouça rádios online
Kit de Scripts para Backup (Full + Diferencial + SMBmount + Rede) - Atualizado
consistir variável numérica ou alfa-numérica
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (8)