Servidor Web · 12 min read · Sep 30, 2025

Instalando um Cluster Web, Email e Banco de Dados MySQL no Debian 6.0 com ISPConfig 3 - Página 2

Os próximos passos devem ser executados no servidor 1 e no servidor 2.

Para instalar amavisd-new, SpamAssassin e ClamAV, executamos:

 apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl

A configuração do ISPConfig 3 usa amavisd que carrega a biblioteca de filtro do SpamAssassin internamente, então podemos parar o SpamAssassin para liberar um pouco de RAM:

/etc/init.d/spamassassin stop
update-rc.d -f spamassassin remove

Em seguida, instale Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear e mcrypt da seguinte forma:

 apt-get -y install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-curl php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby php5-xcache libapache2-mod-perl2 sudo zip wget

Você verá a seguinte pergunta:

Servidor web para reconfigurar automaticamente: <– apache2
Configurar banco de dados para phpmyadmin com dbconfig-common? <– Não

Em seguida, execute o seguinte comando para habilitar os módulos do Apache suexec, rewrite, ssl, actions e include:

a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digest

PureFTPd e quota podem ser instalados com o seguinte comando:

apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatool

Edite o arquivo /etc/default/pure-ftpd-common…

vi /etc/default/pure-ftpd-common

… e certifique-se de que o modo de inicialização esteja definido como standalone e defina VIRTUALCHROOT=true:

[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

Edite o arquivo /etc/inetd.conf para evitar que o inetd tente iniciar o ftp:

vi /etc/inetd.conf

Se houver uma linha começando com ftp stream tcp, comente-a (se não houver tal arquivo, tudo bem, e você não precisa modificar /etc/inetd.conf):

[...]
#:STANDARD: Estes são serviços padrão.
#ftp    stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
[...]

Se você teve que modificar /etc/inetd.conf, reinicie o inetd agora:

/etc/init.d/openbsd-inetd restart

Agora configuramos o PureFTPd para permitir sessões FTP e TLS. FTP é um protocolo muito inseguro porque todas as senhas e todos os dados são transferidos em texto claro. Ao usar TLS, toda a comunicação pode ser criptografada, tornando o FTP muito mais seguro.

Se você quiser permitir sessões FTP e TLS, execute:

echo 1 > /etc/pure-ftpd/conf/TLS

Para usar TLS, devemos criar um certificado SSL. Eu o crio em /etc/ssl/private/, portanto, primeiro crio esse diretório:

mkdir -p /etc/ssl/private/

Depois, podemos gerar o certificado SSL da seguinte forma:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Nome do País (código de 2 letras) [AU]: <– Insira o Nome do seu País (por exemplo, “BR”).
Nome do Estado ou Província (nome completo) [Some-State]: <– Insira o Nome do seu Estado ou Província.
Nome da Localidade (por exemplo, cidade) []: <– Insira sua Cidade.
Nome da Organização (por exemplo, empresa) [Internet Widgits Pty Ltd]: <– Insira o Nome da sua Organização (por exemplo, o nome da sua empresa).
Nome da Unidade Organizacional (por exemplo, seção) []: <– Insira o Nome da sua Unidade Organizacional (por exemplo, “Departamento de TI”).
Nome Comum (por exemplo, SEU nome) []: <– Insira o Nome de Domínio Qualificado do sistema (por exemplo, “servidor1.exemplo.com”).
Endereço de Email []: <– Insira seu Endereço de Email.

Altere as permissões do certificado SSL:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Em seguida, reinicie o PureFTPd:

/etc/init.d/pure-ftpd-mysql restart

Edite /etc/fstab. O meu se parece com isso (adicionei, usrjquota=aquota.user, grpjquota=aquota.group, jqfmt=vfsv0 à partição com o ponto de montagem /):

vi /etc/fstab
# /etc/fstab: informações do sistema de arquivos estático.
#
# Use 'blkid' para imprimir o identificador universalmente único para um
# dispositivo; isso pode ser usado com UUID= como uma maneira mais robusta de nomear dispositivos
# que funciona mesmo se discos forem adicionados e removidos. Veja fstab(5).
#
#                
proc            /proc           proc    defaults        0       0
# / estava em /dev/sda1 durante a instalação
UUID=92bceda2-5ae4-4e3a-8748-b14da48fb297 /               ext3    errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0       1
# swap estava em /dev/sda5 durante a instalação
UUID=e24b3e9e-095c-4b49-af27-6363a4b7d094 none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Para habilitar quota, execute esses comandos:

 mount -o remount /

quotacheck -avugm
quotaon -avug

Instale o Servidor DNS BIND:

apt-get -y install bind9 dnsutils

Instale vlogger, webalizer e awstats:

 apt-get -y install vlogger webalizer awstats geoip-database

Abra /etc/cron.d/awstats depois…

vi /etc/cron.d/awstats

… e comente ambas as tarefas cron nesse arquivo:

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# Gerar relatórios estáticos:
 #10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh 

Instale o Jailkit: Jailkit é necessário apenas se você quiser chroot usuários SSH. Ele pode ser instalado da seguinte forma (importante: Jailkit deve ser instalado antes do ISPConfig - não pode ser instalado depois!):

apt-get -y install build-essential autoconf automake1.9 libtool flex bison

cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.14.tar.gz
tar xvfz jailkit-2.14.tar.gz
cd jailkit-2.14
./configure
make
make install
cd ..
rm -rf jailkit-2.14*

Instale o fail2ban: Isso é opcional, mas recomendado, porque o monitor do ISPConfig tenta mostrar o log:

apt-get install fail2ban

Para fazer o fail2ban monitorar o PureFTPd e o Dovecot, crie o arquivo /etc/fail2ban/jail.local:

vi /etc/fail2ban/jail.local
[pureftpd]
enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 3

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

Em seguida, crie os seguintes dois arquivos de filtro:

vi /etc/fail2ban/filter.d/pureftpd.conf
[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =
vi /etc/fail2ban/filter.d/dovecot-pop3imap.conf
[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=(?P\S*),.*
ignoreregex =

Reinicie o fail2ban depois:

/etc/init.d/fail2ban restart

Para instalar o cliente de webmail SquirrelMail, execute:

apt-get install squirrelmail

Em seguida, crie o seguinte link simbólico…

ln -s /usr/share/squirrelmail/ /var/www/webmail

… e configure o SquirrelMail:

squirrelmail-configure

Devemos informar ao SquirrelMail que estamos usando Dovecot-IMAP/-POP3:

Configuração do SquirrelMail : Ler: config.php (1.4.0)

Menu Principal –

  1. Preferências da Organização
  2. Configurações do Servidor
  3. Padrões de Pasta
  4. Opções Gerais
  5. Temas
  6. Catálogos de Endereços
  7. Mensagem do Dia (MOTD)
  8. Plugins
  9. Banco de Dados
  10. Idiomas

D. Definir configurações pré-definidas para servidores IMAP específicos

C Ativar cor
S Salvar dados
Q Sair

Comando >> <– D

Configuração do SquirrelMail : Ler: config.php

Enquanto estivemos construindo o SquirrelMail, descobrimos algumas
preferências que funcionam melhor com alguns servidores que
não funcionam tão bem com outros. Se você selecionar seu
servidor IMAP, esta opção definirá algumas
configurações pré-definidas para esse servidor.

Por favor, note que você ainda precisará passar por e
certificar-se de que tudo está correto. Isso não
muda tudo. Existem apenas algumas
configurações que isso mudará.

Por favor, selecione seu servidor IMAP:
bincimap = Binc IMAP server
courier = Courier IMAP server
cyrus = Cyrus IMAP server
dovecot = Dovecot Secure IMAP server
exchange = Microsoft Exchange IMAP server
hmailserver = hMailServer
macosx = Mac OS X Mailserver
mercury32 = Mercury/32
uw = University of Washington’s IMAP server
gmail = IMAP access to Google mail (Gmail) accounts

quit = Não mudar nada
Comando >> <– dovecot

Configuração do SquirrelMail : Ler: config.php

Enquanto estivemos construindo o SquirrelMail, descobrimos algumas
preferências que funcionam melhor com alguns servidores que
não funcionam tão bem com outros. Se você selecionar seu
servidor IMAP, esta opção definirá algumas
configurações pré-definidas para esse servidor.

Por favor, note que você ainda precisará passar por e
certificar-se de que tudo está correto. Isso não
muda tudo. Existem apenas algumas
configurações que isso mudará.

Por favor, selecione seu servidor IMAP:
bincimap = Binc IMAP server
courier = Courier IMAP server
cyrus = Cyrus IMAP server
dovecot = Dovecot Secure IMAP server
exchange = Microsoft Exchange IMAP server
hmailserver = hMailServer
macosx = Mac OS X Mailserver
mercury32 = Mercury/32
uw = University of Washington’s IMAP server
gmail = IMAP access to Google mail (Gmail) accounts

quit = Não mudar nada
Comando >> dovecot

imap_server_type = dovecot
default_folder_prefix =
trash_folder = Trash
sent_folder = Sent
draft_folder = Drafts
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = detect
delete_folder = false

Pressione enter para continuar… <– pressione ENTER

Configuração do SquirrelMail : Ler: config.php (1.4.0)

Menu Principal –

  1. Preferências da Organização
  2. Configurações do Servidor
  3. Padrões de Pasta
  4. Opções Gerais
  5. Temas
  6. Catálogos de Endereços
  7. Mensagem do Dia (MOTD)
  8. Plugins
  9. Banco de Dados
  10. Idiomas

D. Definir configurações pré-definidas para servidores IMAP específicos

C Ativar cor
S Salvar dados
Q Sair

Comando >> <– S

Configuração do SquirrelMail : Ler: config.php (1.4.0)

Menu Principal –

  1. Preferências da Organização
  2. Configurações do Servidor
  3. Padrões de Pasta
  4. Opções Gerais
  5. Temas
  6. Catálogos de Endereços
  7. Mensagem do Dia (MOTD)
  8. Plugins
  9. Banco de Dados
  10. Idiomas

D. Definir configurações pré-definidas para servidores IMAP específicos

C Ativar cor
S Salvar dados
Q Sair

Comando >> <– Q

Em seguida, habilitamos um Alias global /webmail para Squirrelmail:

cd /etc/apache2/conf.d/
ln -s ../../squirrelmail/apache.conf squirrelmail.conf
/etc/init.d/apache2 reload

Agora abra /etc/apache2/conf.d/squirrelmail.conf…

vi /etc/apache2/conf.d/squirrelmail.conf

… e adicione as seguintes linhas ao contêiner que garante que mod_php seja usado para acessar o SquirrelMail, independentemente do modo PHP que você selecionar para seu site no ISPConfig:

[...]
Alias /webmail /usr/share/squirrelmail

   Options FollowSymLinks

   AddType application/x-httpd-php .php
   php_flag magic_quotes_gpc Off
   php_flag track_vars On
   php_admin_flag allow_url_fopen Off
   php_value include_path .
   php_admin_value upload_tmp_dir /var/lib/squirrelmail/tmp
   php_admin_value open_basedir /usr/share/squirrelmail:/etc/squirrelmail:/var/lib/squirrelmail:/etc/hostname:/etc/mailname
   php_flag register_globals off


   DirectoryIndex index.php

 
# o acesso ao configtest é limitado por padrão para evitar vazamento de informações

   order deny,allow
   deny from all
   allow from 127.0.0.1


[...]

Crie o diretório /var/lib/squirrelmail/tmp…

mkdir /var/lib/squirrelmail/tmp

… e torne-o propriedade do usuário www-data:

chown www-data /var/lib/squirrelmail/tmp

Recarregue o Apache novamente:

/etc/init.d/apache2 reload

É isso mesmo - /etc/apache2/conf.d/squirrelmail.conf define um alias chamado /squirrelmail que aponta para o diretório de instalação do SquirrelMail /usr/share/squirrelmail.

Agora você pode acessar o SquirrelMail a partir do seu site da seguinte forma:

http://www.exemplo.com/squirrelmail

Você também pode acessá-lo a partir do painel de controle do ISPConfig vhost da seguinte forma (isso não precisa de nenhuma configuração no ISPConfig):

http://servidor1.exemplo.com:8080/squirrelmail

Em seguida, instalamos o Unison. O Unison é usado para sincronizar os diretórios /var/www e /var/vmail entre mestre e escravo

apt-get install unison

Agora instalamos um arquivo de configuração do unison no primeiro servidor.

No servidor 1:

Crie um novo arquivo /root/.unison/default.prf no servidor1…

mkdir /root/.unison
vi /root/.unison/default.prf

… e adicione o seguinte conteúdo:

# Raízes da sincronização
root = /var
root = ssh://192.168.0.106//var/
 
# Caminhos a sincronizar
path = www
path = vmail
 
# Algumas regexps especificando nomes e caminhos a ignorar
#ignore = Path stats    ## ignora /var/www/stats
#ignore = Path stats/*  ## ignora /var/www/stats/*
#ignore = Path */stats  ## ignora /var/www/somedir/stats, mas não /var/www/a/b/c/stats
#ignore = Name *stats   ## ignora todos os arquivos/diretórios que terminam com "stats"
#ignore = Name stats*   ## ignora todos os arquivos/diretórios que começam com "stats"
#ignore = Name *.tmp    ## ignora todos os arquivos com a extensão .tmp
   
#          Quando definido como verdadeiro, esta flag faz com que a interface do usuário ignore
#          perguntas de confirmação sobre mudanças não conflitantes. (Mais
#          precisamente, quando a interface do usuário termina de definir a
#          direção de propagação para uma entrada e está prestes a passar para a
#          próxima, ela ignorará todas as entradas não conflitantes e irá
#          diretamente para o próximo conflito.)
auto=true
   
#          Quando isso é definido como verdadeiro, a interface do usuário não fará perguntas
#          de forma alguma. Mudanças não conflitantes serão propagadas;
#          conflitos serão ignorados.
batch=true
   
#          !Quando isso é definido como verdadeiro, o Unison solicitará uma confirmação extra
#          se parecer que toda a réplica foi deletada, antes de propagar a mudança. Se a flag
#          batch também estiver definida, a sincronização será abortada. Quando a preferência
#          de caminho é usada, a mesma confirmação será solicitada para
#          caminhos de nível superior. (No momento, essa flag só afeta a
#          interface de usuário de texto.) Veja também a preferência de ponto de montagem.
confirmbigdel=true
   
#          Quando essa preferência é definida como verdadeira, o Unison usará o
#          tempo de modificação e o comprimento de um arquivo como um `pseudo inode
#          number' ao escanear réplicas em busca de atualizações, em vez de ler
#          o conteúdo completo de cada arquivo. Sob o Windows, isso pode fazer
#          com que o Unison perca a propagação de uma atualização se o tempo de modificação
#          e o comprimento do arquivo não forem alterados pela atualização.
#          No entanto, o Unison nunca sobrescreverá tal atualização com uma
#          mudança da outra réplica, uma vez que sempre faz uma verificação segura
#          de atualizações logo antes de propagar uma mudança. Assim, é
#          razoável usar essa chave no Windows na maioria das vezes
#          e ocasionalmente executar o Unison uma vez com fastcheck definido como falso,
#          se você estiver preocupado que o Unison possa ter ignorado uma atualização.
#          O valor padrão da preferência é auto, que faz com que
#          o Unison use verificação rápida em réplicas Unix (onde é seguro)
#          e verificação lenta em réplicas Windows. Para compatibilidade
#          retroativa, yes, no e default podem ser usados no lugar de
#          true, false e auto. Veja a seção "Verificação Rápida" para mais
#          informações.
fastcheck=true

#          Quando essa flag é definida como verdadeira, os atributos de grupo dos
#          arquivos são sincronizados. Se os nomes de grupo ou os identificadores de grupo
#          são sincronizados depende da preferência numerids.
group=true
   
#          Quando essa flag é definida como verdadeira, os atributos de proprietário dos
#          arquivos são sincronizados. Se os nomes de proprietário ou os identificadores de proprietário
#          são sincronizados depende da preferência extttnumerids.
owner=true
   
#          Incluindo a preferência -prefer root faz com que o Unison sempre
#          resolva conflitos a favor do root, em vez de pedir
#          orientação ao usuário. (A sintaxe de root é a mesma que para
#          a preferência root, além dos valores especiais newer e older.)
#          Essa preferência é substituída pela preferência preferpartial.
#          Essa preferência deve ser usada apenas se você tiver certeza de que sabe
#          o que está fazendo!
prefer=newer
   
#          Quando essa preferência é definida como verdadeira, a interface de usuário
#          de texto não imprimirá nada, exceto em caso de erros.
#          Definir silent como verdadeiro automaticamente define a preferência batch
#          como verdadeira.
silent=true
   
#          Quando essa flag é definida como verdadeira, os tempos de modificação de arquivos
#          (mas não os modtimes de diretórios) são propagados.
times=true

Queremos automatizar a sincronização, por isso criamos uma tarefa cron para isso em server1.example.tld:

crontab -e
*/5 * * * * /usr/bin/unison &> /dev/null
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.