Instalação completa de servidor de e-mail
Publicado por Anderson Leite 12/12/2006
[ Hits: 8.655 ]
Homepage: www.andersonleite.net
Download servidor_email_v5.0.2.sh
Este script ainda está em desenvolvimento, infelizmente não tenho servidores de teste disponíveis para fazer todos os testes possíveis, se puderem, testem e reportem os erros que encontrarem.
O script é baseado no artigo que revisei e publiquei aqui no VOL, que está no seguinte link:
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5501
#!/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 apt-get upgrade apt-get -f install 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 mysql-server-4.1 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 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" # Fazendo a configuração do CPAN sem interação com o usuário: if (test -d /etc/perl/CPAN) then # O diretorio existe, prosseguimos com a criação do arquivo de configuração cat <<EOF >> /etc/perl/CPAN/Config.pm # This is CPAN.pm's systemwide configuration file. This file provides # defaults for users, and the values can be changed in a per-user # configuration file. The user-config file is being looked for as # ~/.cpan/CPAN/MyConfig.pm. $CPAN::Config = { 'build_cache' => q[10], 'build_dir' => q[/root/.cpan/build], 'cache_metadata' => q[1], 'cpan_home' => q[/root/.cpan], 'cpan_version_check' => q[1], 'dontload_hash' => { }, 'ftp' => q[/usr/bin/ftp], 'ftp_proxy' => q[], 'getcwd' => q[cwd], 'gpg' => q[/usr/bin/gpg], 'gzip' => q[/bin/gzip], 'histfile' => q[/root/.cpan/histfile], 'histsize' => q[100], 'http_proxy' => q[], 'inactivity_timeout' => q[0], 'index_expire' => q[1], 'inhibit_startup_message' => q[0], 'keep_source_where' => q[/root/.cpan/sources], 'lynx' => q[/usr/bin/lynx], 'make' => q[/usr/bin/make], 'make_arg' => q[], 'make_install_arg' => q[], 'makepl_arg' => q[INSTALLDIRS=site], 'ncftp' => q[/usr/bin/ncftp], 'ncftpget' => q[/usr/bin/ncftpget], 'no_proxy' => q[], 'pager' => q[/usr/bin/less], 'prerequisites_policy' => q[ask], 'scan_cache' => q[atstart], 'shell' => q[/bin/bash], 'tar' => q[/bin/tar], 'term_is_latin' => q[1], 'unzip' => q[/usr/bin/unzip], 'urllist' => [q[ftp://cpan.mirrors.skynet.be/pub/CPAN]], 'wget' => q[/usr/bin/wget], }; 1; __END__ EOF else # O diretorio não existe, o criamos, setamos as permissões e prosseguimos com a criação do arquivo de configuração mkdir /etc/perl/CPAN chmod 755 /etc/perl/CPAN cat <<EOF >> /etc/perl/CPAN/Config.pm # This is CPAN.pm's systemwide configuration file. This file provides # defaults for users, and the values can be changed in a per-user # configuration file. The user-config file is being looked for as # ~/.cpan/CPAN/MyConfig.pm. $CPAN::Config = { 'build_cache' => q[10], 'build_dir' => q[/root/.cpan/build], 'cache_metadata' => q[1], 'cpan_home' => q[/root/.cpan], 'cpan_version_check' => q[1], 'dontload_hash' => { }, 'ftp' => q[/usr/bin/ftp], 'ftp_proxy' => q[], 'getcwd' => q[cwd], 'gpg' => q[/usr/bin/gpg], 'gzip' => q[/bin/gzip], 'histfile' => q[/root/.cpan/histfile], 'histsize' => q[100], 'http_proxy' => q[], 'inactivity_timeout' => q[0], 'index_expire' => q[1], 'inhibit_startup_message' => q[0], 'keep_source_where' => q[/root/.cpan/sources], 'lynx' => q[/usr/bin/lynx], 'make' => q[/usr/bin/make], 'make_arg' => q[], 'make_install_arg' => q[], 'makepl_arg' => q[INSTALLDIRS=site], 'ncftp' => q[/usr/bin/ncftp], 'ncftpget' => q[/usr/bin/ncftpget], 'no_proxy' => q[], 'pager' => q[/usr/bin/less], 'prerequisites_policy' => q[ask], 'scan_cache' => q[atstart], 'shell' => q[/bin/bash], 'tar' => q[/bin/tar], 'term_is_latin' => q[1], 'unzip' => q[/usr/bin/unzip], 'urllist' => [q[ftp://cpan.mirrors.skynet.be/pub/CPAN]], 'wget' => q[/usr/bin/wget], }; 1; __END__ EOF fi # Configuração do CPAN ok, vamos agora criar o MIRRORED.BY: if (test -d /root/.cpan/sources) then # Diretorio existe, vamos criar o MIRRORED.BY cat <<EOF >> MIRRORED.BY # Explanation of the syntax: # # hostname.of.the.CPAN.mirroring.site: # frequency = "daily/bidaily/.../weekly" # dst_ftp = "ftp://the.same.host.name:/CPAN/mirror/directory/" # dst_http = "http://the.same.host.name:/CPAN/mirror/directory/" # dst_rsync = "the.same.host.name::CPAN" # dst_location = "city, (area?, )country, continent (lat long)" # dst_organisation = "full organisation name" # dst_timezone = "GMT[+-]n" # dst_bandwidth = "Approximate connection speed,e.g. T1, E3, etc." # dst_contact = "email.address.to.contact@for.this.mirror" # dst_src = "host.that.you.mirror.from" # dst_loadbal = "Y" or "N" Join the load balancing pool for ftp.cpan.org # dst_notes = "(optional field) access restrictions, for example?" # # Notes: # - The "area" in dst_location is optional. # It is the state (United States), county, prefecture, district. # - The "lon,lat" in dst_location are required. # They are the latitude, longtitude, in degrees.minutes_IN_DECIMAL # (45 minutes = 0.75). # - The dst_organisation tries to be correct but in some cases it # cannot be because the format is so simple: # - Greek/Cyrillic/Kanji/Hanzi/... cannot be rendered in ISO Latin 1 # - the format is usually "native (english)" # but for example in Canada, well, is native English or French? # - sometimes the name of the organisation is already # in English (funet, sunet, arnes, math.ncu, ...) # - the contact email address is obfuscated # rucus.ru.ac.za: frequency = "daily" dst_ftp = "ftp://ftp.rucus.ru.ac.za/pub/perl/CPAN/" dst_http = "http://ftp.rucus.ru.ac.za/pub/perl/CPAN/" dst_location = "Grahamstown, Eastern Cape, South Africa, Africa (-33.313028 26.519528)" dst_organisation = "Rhodes University Computer Users' Society" dst_timezone = "+2" dst_bandwidth = "T3" dst_contact = "rucus.ru.ac.za*webteam" dst_src = "cont1.lhx.teleglobe.net" # dst_dst = "ftp://ftp.rucus.ru.ac.za/pub/perl/CPAN/" # dst_contact = "mailto:rucus.ru.ac.za*webteam # dst_src = "cont1.lhx.teleglobe.net" is.co.za: frequency = "daily" dst_ftp = "ftp://ftp.is.co.za/programming/perl/CPAN/" dst_location = "Johannesburg, South Africa, Africa (-26.1992 28.0564)" dst_organisation = "Internet Solution" dst_timezone = "+2" dst_contact = "is.co.za,ftp-admin" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.is.co.za/programming/perl/CPAN/" # dst_contact = "mailto:is.co.za,ftp-admin # dst_src = "ftp.funet.fi" saix.net: frequency = "daily" dst_ftp = "ftp://ftp.saix.net/pub/CPAN/" dst_location = "Parow, Western Cape, South Africa, Africa (-33.9064 18.5631)" dst_organisation = "South African Internet eXchange (SAIX)" dst_timezone = "+2" dst_bandwidth = "T3" dst_contact = "saix.net'ftp" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.saix.net/pub/CPAN/" # dst_contact = "mailto:saix.net'ftp # dst_src = "ftp.funet.fi" cpan.linuxforum.net: frequency = "daily" dst_ftp = "" dst_http = "http://cpan.linuxforum.net/" dst_location = "Beijing, Zhonghua, China, Asia (39.9118 116.3792)" dst_organisation = "China GNU/Linux Forum" dst_timezone = "+8" dst_contact = "linuxforum.net&mirror atwell.co.jp&yusun" dst_src = "ftp.pacific.net.hk" # dst_dst = "http://cpan.linuxforum.net/" # dst_contact = "mailto:linuxforum.net&mirror atwell.co.jp&yusun # dst_src = "ftp.pacific.net.hk" dayouit.com: frequency = "daily" dst_ftp = "" dst_http = "http://mirrors.dayouit.com/CPAN/" dst_location = "Guangzhou, Guangdong, China, Asia (23.125 113.23)" dst_organisation = "damail.cn" dst_timezone = "+8" dst_bandwidth = "T3" dst_contact = "damail.cn!srni" dst_src = "rsync.nic.funet.fi" # dst_dst = "http://mirrors.dayouit.com/CPAN/" # dst_contact = "mailto:damail.cn!srni # dst_src = "rsync.nic.funet.fi" hknet.com: frequency = "daily" dst_ftp = "ftp://mirrors.hknet.com/CPAN" dst_location = "Hong Kong SAR, China, Asia (22.3866 114.124)" dst_organisation = "HKNet Company Limited" dst_timezone = "+8" dst_bandwidth = "200M" dst_contact = "hknet.com*stephen" dst_src = "ftp.funet.fi" # dst_dst = "ftp://mirrors.hknet.com/CPAN" # dst_contact = "mailto:hknet.com*stephen # dst_src = "ftp.funet.fi" vmmatrix.net: frequency = "daily" dst_ftp = "" dst_http = "http://mirror.vmmatrix.net/CPAN/" dst_location = "Shanghai, China, Asia (34.14 123.29)" dst_organisation = "Vmmatrix Co., Ltd." dst_timezone = "+8" dst_bandwidth = "100Mbit/s" dst_contact = "vmmatrix.com{huangmingyou" dst_src = "cpan.org" # dst_dst = "http://mirror.vmmatrix.net/CPAN/" # dst_contact = "mailto:vmmatrix.com{huangmingyou # dst_src = "cpan.org" cuhk.edu.hk: frequency = "daily" dst_ftp = "ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/" dst_http = "http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/" dst_location = "Hong Kong, Shatin, Hong Kong, Asia (22.42 114.2)" dst_organisation = "The Chinese University of Hong Kong" dst_timezone = "+8" dst_bandwidth = "1Gbps" dst_contact = "ftp.cuhk.edu.hk}ftp-admin" dst_src = "ftp://mirrors.hknet.com/CPAN" # dst_dst = "ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/" # dst_contact = "mailto:ftp.cuhk.edu.hk}ftp-admin # dst_src = "ftp://mirrors.hknet.com/CPAN" cpan.archive.hk: frequency = "daily" dst_ftp = "" dst_http = "http://www.archive.hk/cpan/" dst_location = "Pokfulam, Hong Kong, Asia (21.75 115)" dst_organisation = "Archive.hk" dst_timezone = "+8" dst_bandwidth = "OC3" dst_contact = "archive.hk,admin" dst_src = "ftp.funet.fi" # dst_dst = "http://www.archive.hk/cpan/" # dst_contact = "mailto:archive.hk,admin # dst_src = "ftp.funet.fi" gnowledge.org: frequency = "daily" dst_ftp = "" dst_http = "http://mirror.gnowledge.org/cpan/" dst_location = "Mumbai, India, Asia (18.96 72.82)" dst_organisation = "Free Software Foundation of India" dst_timezone = "+5.5" dst_bandwidth = "E3" dst_contact = "gnu.org.in?b.ghose" dst_src = "rsync.nic.funet.fi" # dst_dst = "http://mirror.gnowledge.org/cpan/" # dst_contact = "mailto:gnu.org.in?b.ghose # dst_src = "rsync.nic.funet.fi" komo.vlsm.org: frequency = "daily" dst_ftp = "ftp://komo.vlsm.org/CPAN/" dst_http = "http://komo.vlsm.org/CPAN/" dst_rsync = "komo.vlsm.org::CPAN" dst_location = "Jakarta, Indonesia, Asia (-6.11 106.5)" dst_organisation = "vLSM.org" dst_timezone = "+7" dst_bandwidth = "100Mbps" dst_contact = "yahoogroups.com/writeme05" dst_src = "rsync.nic.funet.fi" dst_notes = "64 kbps for international access limit" # dst_dst = "ftp://komo.vlsm.org/CPAN/" # dst_contact = "mailto:yahoogroups.com/writeme05 # dst_src = "rsync.nic.funet.fi" cpan.shatel.ir: frequency = "daily" dst_ftp = "" dst_http = "http://cpan.shatel.ir/" dst_location = "Tehran, Iran, Asia (35.44 51.30)" dst_organisation = "SHATEL Network" dst_timezone = "+3.5" dst_bandwidth = "E3" dst_contact = "shatel.ir,\babak farrokhi.net\babak" dst_src = "ftp.gwdg.de" # dst_dst = "http://cpan.shatel.ir/" # dst_contact = "mailto:shatel.ir,\babak farrokhi.net\babak # dst_src = "ftp.gwdg.de" mirimar.net: frequency = "daily" dst_ftp = "" dst_http = "http://mirror.mirimar.net/cpan/" dst_location = "Haifa, HeKarmel, Mahoz, Israel, Asia (32.8000 34.9833)" dst_organisation = "Mirimar Networks" dst_timezone = "+2" dst_bandwidth = "5Mbps" dst_contact = "mirimar.net'mirror" dst_src = "ftp.funet.fi" # dst_dst = "http://mirror.mirimar.net/cpan/" # dst_contact = "mailto:mirimar.net'mirror # dst_src = "ftp.funet.fi" initworld.com: frequency = "daily" dst_ftp = "" dst_http = "http://cpan.initworld.com/" dst_location = "Petah-Tikva, Israel, Asia (32.0833 34.8833)" dst_organisation = "Init World" dst_timezone = "+2" dst_bandwidth = "10Mbps" dst_contact = "initworld.com+master" dst_src = "rsync.nic.funet.fi" # dst_dst = "http://cpan.initworld.com/" # dst_contact = "mailto:initworld.com+master # dst_src = "rsync.nic.funet.fi" u-aizu.ac.jp: frequency = "daily" dst_ftp = "ftp://ftp.u-aizu.ac.jp/pub/CPAN" dst_location = "Aizu-Wakamatsu, Tohoku-chiho, Fukushima, Japan, Asia (37.4333 139.9821)" dst_organisation = "University of Aizu" dst_timezone = "+9" dst_bandwidth = "T2(6Mbps)" dst_contact = "u-aizu.ac.jp)ftp-admin" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.u-aizu.ac.jp/pub/CPAN" # dst_contact = "mailto:u-aizu.ac.jp)ftp-admin # dst_src = "ftp.funet.fi" kddilabs.jp: frequency = "daily" dst_ftp = "ftp://ftp.kddilabs.jp/CPAN/" dst_rsync = "ftp.kddilabs.jp::cpan" dst_location = "Kamifukuoka, Kanto, Saitama-ken, Japan, Asia (35.8746 139.5304)" dst_organisation = "KDDI R&D Labs, Inc." dst_timezone = "+9" dst_contact = "kddilabs.jp+ftpadmin" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.kddilabs.jp/CPAN/" # dst_contact = "mailto:kddilabs.jp+ftpadmin # dst_src = "ftp.funet.fi" NAIST: frequency = "daily" dst_ftp = "ftp://ftp.nara.wide.ad.jp/pub/CPAN/" dst_http = "http://ftp.nara.wide.ad.jp/pub/CPAN/" dst_rsync = "ftp.nara.wide.ad.jp::cpan/" dst_location = "Takayama-cho, Japan, Asia (34.75 135.73)" dst_organisation = "Nara Institute of Science and Technology" dst_timezone = "+9" dst_bandwidth = "1Gbps" dst_contact = "is.naist.jp*ftp-admin" dst_src = "ftp.funet.fi" dst_notes = "ftp max connection 100, rsync max connection 30" # dst_dst = "ftp://ftp.nara.wide.ad.jp/pub/CPAN/" # dst_contact = "mailto:is.naist.jp*ftp-admin # dst_src = "ftp.funet.fi" jaist.ac.jp: frequency = "daily" dst_ftp = "ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/" dst_location = "Tatsunokuchi, Nomi, Ishikawa, Japan, Asia (36.4251 136.5739)" dst_organisation = "Japan Advanced Institute of Science and Technology" dst_timezone = "+9" dst_contact = "jaist.ac.jp;ftp-admin" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/" # dst_contact = "mailto:jaist.ac.jp;ftp-admin # dst_src = "ftp.funet.fi" cpan.jp: frequency = "daily" dst_ftp = "" dst_http = "http://ftp.cpan.jp/" dst_location = "Tokyo, Shibuya-ward, Japan, Asia (35.667 139.700)" dst_organisation = "IFT Co., Ltd." dst_timezone = "+9" dst_bandwidth = "1Gbit" dst_contact = "cpan.jp]info" dst_src = "ftp.funet.fi" # dst_dst = "http://ftp.cpan.jp/" # dst_contact = "mailto:cpan.jp]info # dst_src = "ftp.funet.fi" dti.ad.jp: frequency = "daily" dst_ftp = "ftp://ftp.dti.ad.jp/pub/lang/CPAN/" dst_location = "Tokyo, Minato-ku, Japan, Asia (35.6754 139.7694)" dst_organisation = "Dream Train Internet Inc." dst_timezone = "+9" dst_contact = "dti.ad.jp!ftp-admin" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.dti.ad.jp/pub/lang/CPAN/" # dst_contact = "mailto:dti.ad.jp!ftp-admin # dst_src = "ftp.funet.fi" ring.gr.jp: frequency = "daily" dst_ftp = "ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/" dst_location = "Tsukuba, Ibaraki, Kanto, Ibaraki-ken, Japan, Asia (36.2793 140.4408)" dst_organisation = "Ring Server Project" dst_timezone = "+9" dst_contact = "ring.gr.jp$ftpadmin" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/" # dst_contact = "mailto:ring.gr.jp$ftpadmin # dst_src = "ftp.funet.fi" yz.yamagata-u.ac.jp: frequency = "4 times a day" dst_ftp = "ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/" dst_http = "http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/" dst_location = "Yonezawa, Yamagata-ken, Japan, Asia (37.897 140.108)" dst_organisation = "Yamagata" dst_timezone = "+9" dst_bandwidth = "100Mbps" dst_contact = "ftp.yz.yamagata-u.ac.jp|www-admin" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/" # dst_contact = "mailto:ftp.yz.yamagata-u.ac.jp|www-admin # dst_src = "ftp.funet.fi" cpan.MyBSD.org.my: frequency = "daily" dst_ftp = "" dst_http = "http://cpan.MyBSD.org.my" dst_location = "Gombak, Selangor, Malaysia, Asia (3.2496 101.5496)" dst_organisation = "MyBSD Malaysia Project (http://www.MyBSD.org.my)" dst_timezone = "+8" dst_bandwidth = "T3" dst_contact = "MyBSD.org.my'mirror-adm" dst_src = "rsync.nic.funet.fi" dst_notes = "The intention of this mirror is to serve for Malaysia and the South East Asia region." # dst_dst = "http://cpan.MyBSD.org.my" # dst_contact = "mailto:MyBSD.org.my'mirror-adm # dst_src = "rsync.nic.funet.fi" cpan.bieffe.org: frequency = "daily" dst_ftp = "" dst_http = "http://cpan.bieffe.org" dst_rsync = "cpan.bieffe.org::CPAN" dst_location = "Kuala Lumpur, Malaysia, Asia (3.2496 101.5496)" dst_organisation = "ChatzRadio InterNET networks" dst_timezone = "+8" dst_bandwidth = "T3" dst_contact = "yahoo.com}ratiogear" dst_src = "ftp.kddlabs.co.jp" # dst_dst = "http://cpan.bieffe.org" # dst_contact = "mailto:yahoo.com}ratiogear # dst_src = "ftp.kddlabs.co.jp" opensourcecommunity.ph: frequency = "daily" dst_ftp = "" dst_http = "http://www.opensourcecommunity.ph/CPAN" dst_location = "Zamboanga City, Philippines, Asia (6.9 122.25)" dst_organisation = "Ateneo de Zamboanga University" dst_timezone = "+8" dst_bandwidth = "E1" dst_contact = "zambonet.ph*assist" dst_src = "ftp.funet.fi" # dst_dst = "http://www.opensourcecommunity.ph/CPAN" # dst_contact = "mailto:zambonet.ph*assist # dst_src = "ftp.funet.fi" kaist.ac.kr: frequency = "daily" dst_ftp = "ftp://ftp.kaist.ac.kr/pub/CPAN" dst_http = "http://ftp.kaist.ac.kr/pub/CPAN" dst_rsync = "ftp.kaist.ac.kr::cpan" dst_location = "Daejeon, Republic of Korea, Asia (36.37 127.37)" dst_organisation = "Korea Advanced Institute of Science and Technology (KAIST)" dst_timezone = "+9" dst_bandwidth = "1Gbps" dst_contact = "ftp.kaist.ac.kr{ftp" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.kaist.ac.kr/pub/CPAN" # dst_contact = "mailto:ftp.kaist.ac.kr{ftp # dst_src = "ftp.funet.fi" kr.FreeBSD.org: frequency = "daily" dst_ftp = "ftp://ftp.kr.FreeBSD.org/pub/CPAN" dst_http = "http://mirror.kr.FreeBSD.org/CPAN" dst_rsync = "ftp.kr.FreeBSD.org::CPAN" dst_location = "Seoul, Republic of Korea, Asia (37.56 126.98)" dst_organisation = "Korea FreeBSD Users Group" dst_timezone = "+9" dst_bandwidth = "100Mbps" dst_contact = "kr.FreeBSD.org:admin" dst_src = "rsync.nic.funet.fi" # dst_dst = "ftp://ftp.kr.FreeBSD.org/pub/CPAN" # dst_contact = "mailto:kr.FreeBSD.org:admin # dst_src = "rsync.nic.funet.fi" uos.ac.kr: frequency = "daily" dst_ftp = "ftp://ftp.uos.ac.kr/CPAN" dst_http = "http://ftp.uos.ac.kr/CPAN" dst_location = "Seoul, Republic of Korea, Asia (37.56 126.98)" dst_organisation = "University of Seoul" dst_timezone = "+9" dst_bandwidth = "100Mbit" dst_contact = "uos.ac.kr?reduck96" dst_src = "rsync.nic.funet.fi" # dst_dst = "ftp://ftp.uos.ac.kr/CPAN" # dst_contact = "mailto:uos.ac.kr?reduck96 # dst_src = "rsync.nic.funet.fi" cpan.tomsk.ru: frequency = "daily" dst_ftp = "ftp://cpan.tomsk.ru/" dst_http = "http://cpan.tomsk.ru" dst_location = "Tomsk, Siberia, Russian Federation, Asia (56.5 84.9667)" dst_organisation = "TLUG" dst_timezone = "+7" dst_bandwidth = "T2" dst_contact = "grob.ru%andrew" dst_src = "ftp.cpan.org" # dst_dst = "ftp://cpan.tomsk.ru/" # dst_contact = "mailto:grob.ru%andrew # dst_src = "ftp.cpan.org" isu.net.sa: frequency = "daily" dst_ftp = "ftp://ftp.isu.net.sa/pub/CPAN/" dst_location = "Riyadh, al-Wusta, Saudi Arabia, Asia (24.6439 46.7406)" dst_organisation = "King Abdulaziz City for Science and Technology / Internet Services Unit" dst_timezone = "+3" dst_contact = "isu.net.sa$mirrors" dst_src = "ftp.cpan.org" # dst_dst = "ftp://ftp.isu.net.sa/pub/CPAN/" # dst_contact = "mailto:isu.net.sa$mirrors # dst_src = "ftp.cpan.org" averse.net: frequency = "daily" dst_ftp = "ftp://mirror.averse.net/pub/CPAN" dst_http = "http://mirror.averse.net/pub/CPAN" dst_rsync = "mirror.averse.net::cpan" dst_location = "Singapore, Singapore, Asia (1.283 103.85)" dst_organisation = "averse.net" dst_timezone = "+8" dst_bandwidth = "T3" dst_contact = "mirror.averse.net[mirror-maintainer" dst_src = "ftp.funet.fi" # dst_dst = "ftp://mirror.averse.net/pub/CPAN" # dst_contact = "mailto:mirror.averse.net[mirror-maintainer # dst_src = "ftp.funet.fi" choon.net: frequency = "daily" dst_ftp = "" dst_http = "http://cpan.mirror.choon.net/" dst_location = "Singapore, Singapore, Asia (1.283 103.85)" dst_organisation = "choon.net" dst_timezone = "+8" dst_bandwidth = "10mbps" dst_contact = "choon.net(mirror.cpan.org" dst_src = "rsync.nic.funet.fi::CPAN" # dst_dst = "http://cpan.mirror.choon.net/" # dst_contact = "mailto:choon.net(mirror.cpan.org # dst_src = "rsync.nic.funet.fi::CPAN" intermedia.com.sg: frequency = "daily" dst_ftp = "" dst_http = "http://cpan.mirror.intermedia.com.sg" dst_location = "Singapore, Singapore, Asia (1.2833 103.8500)" dst_organisation = "Intermedia network Services Pte Ltd" dst_timezone = "+8" dst_bandwidth = "210Mbps" dst_contact = "intermedia.com.sq%mirror" dst_src = "rsync.nic.funet.fi" dst_notes = "Network spanning Two data centres, multiple peering points giving fast direct access to most .sg users without using internet bandwidth." # dst_dst = "http://cpan.mirror.intermedia.com.sg" # dst_contact = "mailto:intermedia.com.sq%mirror # dst_src = "rsync.nic.funet.fi" oss.eznetsols.org: frequency = "daily" dst_ftp = "ftp://ftp.oss.eznetsols.org/cpan" dst_http = "http://cpan.oss.eznetsols.org" dst_rsync = "rsync.oss.eznetsols.org" dst_location = "Singapore, Singapore, Asia (1.283 103.85)" dst_organisation = "ezNetworking Solutions Pte Ltd" dst_timezone = "+8" dst_bandwidth = "1Gbps" dst_contact = "oss.eznetsols.org*mirror-admin" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.oss.eznetsols.org/cpan" # dst_contact = "mailto:oss.eznetsols.org*mirror-admin # dst_src = "ftp.funet.fi" nctu.edu.tw: frequency = "daily" dst_ftp = "ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN" dst_location = "HsinChu, Taiwan, Asia (24.4719 120.5950)" dst_organisation = "National Chiao Tung University" dst_timezone = "+8" dst_contact = "ftp.nctu.edu.tw%ftpadm" dst_src = "ftp.funet.fi" # dst_dst = "ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN" # dst_contact = "mailto:ftp.nctu.edu.tw%ftpadm # dst_src = "ftp.funet.fi" cpan.cdpa.nsysu.edu.tw: frequency = "daily" dst_ftp = " ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/" dst_http = "http://cpan.cdpa.nsysu.edu.tw/" dst_location = "Kao-hsiung, Taiwan, Asia (22.38 120.17)" dst_organisation = "CDPA National Sun Yat-Sen University" dst_timezone = "+8" dst_bandwidth = "GBE" dst_contact = "cdpa.nsysu.edu.tw*tjs" dst_src = "ftp.funet.fi" # dst_dst = " ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/" # dst_contact = "mailto:cdpa.nsysu.edu.tw*tjs # dst_src = "ftp.funet.fi" isu.edu.tw: frequency = "daily" dst_ftp = "ftp://ftp.isu.edu.tw/pub/CPAN" dst_http = "http://ftp.isu.edu.tw/pub/CPAN" dst_location = "Kao-hsiung, Taiwan, Asia (22.600 120.283)" dst_organisation = "I-SHOU University" dst_timezone = "+8" dst_bandwidth = "GBE" dst_contact = "ftp.isu.edu.tw\ftpadm" dst_src = "ftp.isu.edu.tw" # dst_dst = "ftp://ftp.isu.edu.tw/pub/CPAN" # dst_contact = "mailto:ftp.isu.edu.tw\ftpadm # dst_src = "ftp.isu.edu.tw" cpan.stu.edu.tw: frequency = "daily" dst_ftp = "ftp://ftp.stu.edu.tw/CPAN" dst_http = "http://cpan.stu.edu.tw" dst_location = "Kaohsiung, Taiwan, Asia (22.76 120.38)" dst_organisation = "Computer Center, Shu-Te University" dst_timezone = "+8" dst_bandwidth = "GBE" dst_contact = "mail.stu.edu.tw]ychsiao" dst_src = "ftp.funet.fi" dst_notes = "update ftp.stu.edu.tw/cpan to cpan.stu.edu.tw" # dst_dst = "ftp://ftp.stu.edu.tw/CPAN" # dst_contact = "mailto:mail.stu.edu.tw]ychsiao # dst_src = "ftp.funet.fi" stu.edu.tw: frequency = "daily" dst_ftp = "ftp://ftp.stu.edu.tw/pub/CPAN" dst_http = "http://ftp.stu.edu.tw/CPAN" dst_location = "Kaohsiung, Taiwan, Asia (22.76 120.38)" dst_organisation = "Computer Center, Shu-Te University" dst_timezone = "+8" dst_bandwidth = "GBE" dst_contact = "mail.stu.edu.tw{ychsiao" dst_src = "cpan.cdpa.nsysu.edu.tw" # dst_dst = "ftp://ftp.stu.edu.tw/pub/CPAN" # dst_contact = "mailto:mail.stu.edu.tw{ychsiao # dst_src = "cpan.cdpa.nsysu.edu.tw" cpan.cs.pu.edu.tw: frequency = "daily" dst_ftp = "ftp://cpan.cs.pu.edu.tw/pub/CPAN" dst_http = "http://cpan.cs.pu.edu.tw/" dst_location = "Taichung, Taiwan, Asia (24.09 120.41)" dst_organisation = "Providence University" dst_timezone = "+8" dst_bandwidth = "GBE" dst_contact = "cs.pu.edu.tw]hcchang" dst_src = "ftp.cpan.org" # dst_dst = "ftp://cpan.cs.pu.edu.tw/pub/CPAN" # dst_contact = "mailto:cs.pu.edu.tw]hcchang # dst_src = "ftp.cpan.org" tku.edu.tw: frequency = "daily" dst_ftp = "ftp://ftp.tku.edu.tw/pub/CPAN/" dst_http = "http://ftp.tku.edu.tw/pub/CPAN/" dst_location = "TamSui, T'ai-pei Hsien, Taiwan, Asia (25.217 121.483)" dst_organisation = "TamKang University" dst_timezone = "+8" dst_bandwidth = "T3" dst_contact
Sysinfo - Informações sobre o seu computador
INSTALA TAR GZ COM MENU GRÁFICO ZENITY
passa2 - Um sistema de backup/sincronização/cópia de arquivos em SHell Script
Criando Boot pelo USB para o VirtualBox no Linux KDu5
Nenhum comentário foi encontrado.
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
Erro ao baixar video com ytdlp no linux[AJUDA] (1)
Pendrive não formata de jeito nenhum (4)
Problemas ao instalar o PHP (10)
Descompactar arquivos winrar no linux (9)
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (12)