Servidor Debian · 28 min read · Nov 04, 2025

O Servidor Perfeito - Debian 10 (Nginx, BIND, Dovecot, ISPConfig 3.2)

Este tutorial mostra como preparar um servidor Debian 10 (com Nginx, BIND, Dovecot) para a instalação do ISPConfig 3.2, e como instalar o ISPConfig 3.2. O ISPConfig 3 é um painel de controle de hospedagem na web que permite configurar os seguintes serviços através de um navegador: servidor web Apache ou nginx, servidor de e-mail Postfix, servidor IMAP/POP3 Courier ou Dovecot, MySQL, servidor de nomes BIND ou MyDNS, PureFTPd, SpamAssassin, ClamAV, e muitos mais. Esta configuração cobre o servidor web Nginx, BIND como Servidor DNS, e Dovecot como servidor IMAP / POP3.

1 Nota Preliminar

Neste tutorial, uso o nome do host server1.example.com com o endereço IP 192.168.0.100 e o gateway 192.168.0.1. Essas configurações podem diferir para você, então você deve substituí-las onde apropriado. Antes de prosseguir, você precisa ter uma instalação mínima do Debian 10. Isso pode ser uma imagem mínima do Debian do seu provedor de hospedagem ou você pode usar o tutorial do Servidor Debian Mínimo para configurar o sistema base.

Todos os comandos abaixo são executados como usuário root. Faça login como usuário root diretamente ou faça login como seu usuário normal e depois use o comando

su -

para se tornar o usuário root em seu servidor antes de prosseguir. IMPORTANTE: Você deve usar ‘su -‘ e não apenas ‘su’, caso contrário, sua variável PATH será configurada incorretamente pelo Debian.

2 Instalar o Servidor SSH

Se você não instalou o servidor OpenSSH durante a instalação do sistema, você pode fazê-lo agora:

apt-get -y install ssh openssh-server

A partir de agora, você pode usar um cliente SSH como o PuTTY e se conectar do seu workstation ao seu servidor Debian 10 e seguir os passos restantes deste tutorial.

3 Instalar um editor de texto de shell (Opcional)

Usarei o editor de texto nano neste tutorial. Alguns usuários preferem o editor clássico vi, portanto, instalarei ambos os editores aqui. O programa vi padrão tem um comportamento estranho no Debian e Ubuntu; para corrigir isso, instalamos vim-nox:

apt-get -y install nano vim-nox

(Você não precisa fazer isso se usar um editor de texto diferente como joe.)

4 Configurar o Nome do Host

O nome do host do seu servidor deve ser um subdomínio como “server1.example.com”. Não use um nome de domínio sem a parte do subdomínio como “example.com” como nome do host, pois isso causará problemas mais tarde com sua configuração de e-mail. Primeiro, você deve verificar o nome do host em /etc/hosts e alterá-lo quando necessário. A linha deve ser: “Endereço IP - espaço - nome do host completo incluindo domínio - espaço - parte do subdomínio”. Edite /etc/hosts. Faça com que fique assim:

nano /etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.example.com     server1

# As linhas a seguir são desejáveis para hosts compatíveis com IPv6
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Em seguida, edite o arquivo /etc/hostname:

nano /etc/hostname

Deve conter apenas a parte do subdomínio, no nosso caso:

server1

Finalmente, reinicie o servidor para aplicar a alteração:

reboot

Faça login novamente e verifique se o nome do host está correto agora com estes comandos:

hostname  
hostname -f

A saída deve ser assim:

root@server1:/tmp# hostname  
server1  
root@server1:/tmp# hostname -f  
server1.example.com

5 Atualize Sua Instalação do Debian

Primeiro, certifique-se de que seu /etc/apt/sources.list contém o repositório buster/updates (isso garante que você sempre receba as atualizações mais recentes para o scanner de vírus ClamAV - este projeto publica lançamentos com muita frequência, e às vezes versões antigas param de funcionar), e que os repositórios contrib e non-free estão habilitados.

nano /etc/apt/sources.list
deb http://deb.debian.org/debian/ buster main contrib non-free  
deb-src http://deb.debian.org/debian/ buster main contrib non-free  
  
deb http://security.debian.org/debian-security buster/updates main contrib non-free  
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free

Execute

apt-get update

para atualizar o banco de dados de pacotes apt e

apt-get upgrade

para instalar as atualizações mais recentes (se houver).

6 Mudar o Shell Padrão

/bin/sh é um link simbólico para /bin/dash, no entanto, precisamos de /bin/bash, não /bin/dash. Portanto, fazemos isso:

dpkg-reconfigure dash

Usar dash como o shell padrão do sistema (/bin/sh)? <– Não

Se você não fizer isso, a instalação do ISPConfig falhará.

7 Sincronizar o Relógio do Sistema

É uma boa ideia sincronizar o relógio do sistema com um servidor NTP ( n etwork t ime p rotocol) na Internet. Basta executar

apt-get install ntp

e seu horário do sistema estará sempre sincronizado.

8 Instalar Postfix, Dovecot, MySQL, rkhunter e binutils

Podemos instalar Postfix, Dovecot, MySQL, rkhunter e Binutils com um único comando:

apt-get install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo curl

Você será solicitado as seguintes perguntas:

Tipo geral de configuração de e-mail: <– Internet Site
Nome do sistema de e-mail: <– server1.example.com

Para garantir a instalação do MariaDB / MySQL e desabilitar o banco de dados de teste, execute este comando:

mysql_secure_installation

Não precisamos mudar a senha root do MariaDB, pois acabamos de definir uma nova durante a instalação. Responda as perguntas da seguinte forma:

Change the root password? [Y/n] <-- y  
New password: <-- Digite uma nova senha de root do banco de dados  
Re-enter new password: <-- Repita a senha de root do banco de dados  
Remove anonymous users? [Y/n] <-- y  
Disallow root login remotely? [Y/n] <-- y  
Remove test database and access to it? [Y/n] <-- y  
Reload privilege tables now? [Y/n] <-- y

Em seguida, abra as portas TLS/SSL e de envio no Postfix:

nano /etc/postfix/master.cf

Descomente as seções de envio e smtps da seguinte forma e adicione linhas onde necessário para que esta seção do arquivo master.cf fique exatamente como a abaixo. IMPORTANTE: Remova o # na frente das linhas que começam com smtps e envio também e não apenas das linhas -o após essas linhas!

[...]  
submission inet n - y - - smtpd  
 -o syslog_name=postfix/submission  
 -o smtpd_tls_security_level=encrypt  
 -o smtpd_sasl_auth_enable=yes  
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject  
# -o smtpd_reject_unlisted_recipient=no  
# -o smtpd_client_restrictions=$mua_client_restrictions  
# -o smtpd_helo_restrictions=$mua_helo_restrictions  
# -o smtpd_sender_restrictions=$mua_sender_restrictions  
# -o smtpd_recipient_restrictions=  
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject  
# -o milter_macro_daemon_name=ORIGINATING  
smtps inet n - y - - smtpd  
 -o syslog_name=postfix/smtps  
 -o smtpd_tls_wrappermode=yes  
 -o smtpd_sasl_auth_enable=yes  
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject  
# -o smtpd_reject_unlisted_recipient=no  
# -o smtpd_client_restrictions=$mua_client_restrictions  
# -o smtpd_helo_restrictions=$mua_helo_restrictions  
# -o smtpd_sender_restrictions=$mua_sender_restrictions  
# -o smtpd_recipient_restrictions=  
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject  
# -o milter_macro_daemon_name=ORIGINATING  
[...]  

Reinicie o Postfix depois:

service postfix restart

Queremos que o MariaDB escute em todas as interfaces, não apenas no localhost, portanto editamos /etc/mysql/mariadb.conf.d/50-server.cnf e comentamos a linha bind-address = 127.0.0.1:

nano /etc/mysql/mariadb.conf.d/50-server.cnf
[...]  

# Em vez de skip-networking, o padrão agora é escutar apenas em  
# localhost, que é mais compatível e não é menos seguro.  
#bind-address           = 127.0.0.1  
  
[...]  

Salve o arquivo. Em seguida, defina o método de autenticação de senha no MariaDB como nativo para que possamos usar o PHPMyAdmin mais tarde para conectar como usuário root:

echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u root

Edite o arquivo /etc/mysql/debian.cnf e defina a senha root do MYSQL / MariaDB lá duas vezes nas linhas que começam com a palavra senha.

nano /etc/mysql/debian.cnf

A senha root do MySQL que precisa ser adicionada é mostrada em vermelho. Neste exemplo, a senha é “howtoforge”.

# Gerado automaticamente para scripts do Debian. NÃO TOQUE!  
[client]  
host = localhost  
user = root  
password = howtoforge  
socket = /var/run/mysqld/mysqld.sock  
[mysql_upgrade]  
host = localhost  
user = root  
password = howtoforge  
socket = /var/run/mysqld/mysqld.sock  
basedir = /usr

Para evitar o erro ‘ Erro ao aceitar: Muitos arquivos abertos ‘, definiremos limites de arquivos abertos mais altos para o MariaDB agora.

Abra o arquivo /etc/security/limits.conf com um editor:

nano /etc/security/limits.conf

e adicione estas linhas no final do arquivo.

mysql soft nofile 65535  
mysql hard nofile 65535

Em seguida, crie um novo diretório /etc/systemd/system/mysql.service.d/ com o comando mkdir.

mkdir -p /etc/systemd/system/mysql.service.d/

e adicione um novo arquivo dentro:

nano /etc/systemd/system/mysql.service.d/limits.conf

cole as seguintes linhas nesse arquivo:

[Service]  
LimitNOFILE=infinity

Salve o arquivo e feche o editor nano.

Então recarregue o systemd e reinicie o MariaDB:

systemctl daemon-reload  
systemctl restart mariadb

Ignore o aviso: “ Aviso: O arquivo de unidade, arquivo de configuração de origem ou drop-ins do mariadb.service mudou no disco. Execute ‘systemctl daemon-reload’ para recarregar unidades. “.

Instale o sistema dbconfig-common:

apt-get install dbconfig-common dbconfig-mysql

Atualmente, há um problema com o sistema dbconfig-common do Debian que impede a instalação do RoundCube mais tarde, conserte-o executando este comando:

sed -i -r 's/_dbc_nodb="yes" dbc_mysql_exec/_dbc_nodb="yes"; dbc_mysql_exec/g' /usr/share/dbconfig-common/internal/mysql

Agora verifique se a rede está habilitada. Execute

netstat -tap | grep mysql

A saída deve ser assim:

root@server1:~# netstat -tap | grep mysql  
tcp6       0      0 [::]:mysql              [::]:*                     LISTEN      4027/mysqld  
root@server1:~#

9 Instalar Amavisd-new, SpamAssassin e ClamAV

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

apt-get install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract p7zip p7zip-full unrar lrzip 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 libdbd-mysql-perl postgrey

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

systemctl stop spamassassin  
systemctl disable spamassassin

10 Instalar Nginx, PHP (PHP-FPM) e Fcgiwrap

O Nginx está disponível como um pacote para Debian que podemos instalar da seguinte forma:

apt-get install nginx

Se o Apache2 já estiver instalado no sistema, pare-o agora…

systemctl stop apache2

A mensagem “ Falha ao parar apache2.service: Unidade apache2.service não carregada. “ está bem e não indica um erro.

… e remova os links de inicialização do sistema do Apache:

systemctl disable apache2

Inicie o nginx depois:

systemctl start nginx

(Se tanto Apache2 quanto nginx estiverem instalados, o instalador do ISPConfig perguntará qual você deseja usar - responda nginx neste caso. Se apenas um desses dois estiver instalado, o ISPConfig fará a configuração necessária automaticamente.)

Podemos fazer o PHP 7.3 funcionar no nginx através do PHP-FPM (PHP-FPM (FastCGI Process Manager) é uma implementação alternativa do PHP FastCGI com alguns recursos adicionais úteis para sites de qualquer tamanho, especialmente sites mais movimentados) que instalamos da seguinte forma:

apt-get install php7.3-fpm

O PHP-FPM é um processo daemon que executa um servidor FastCGI no socket /var/run/php/php7.3-fpm.sock.

Para obter suporte ao MySQL no PHP, podemos instalar o pacote php7.3-mysql. É uma boa ideia instalar alguns outros módulos PHP também, pois você pode precisar deles para suas aplicações. Você pode procurar módulos PHP disponíveis assim:

apt-cache search php7

Escolha os que você precisa e instale-os assim:

apt-get install php7.3 php7.3-common php7.3-gd php7.3-mysql php7.3-imap php7.3-cli php7.3-cgi php-pear mcrypt imagemagick libruby php7.3-curl php7.3-intl php7.3-pspell php7.3-recode php7.3-sqlite3 php7.3-tidy php7.3-xmlrpc php7.3-xsl memcached php-memcache php-imagick php-gettext php7.3-zip php7.3-mbstring memcached php7.3-soap php7.3-fpm php7.3-opcache php-apcu

Em seguida, abra /etc/php/7.3/fpm/php.ini…

nano /etc/php/7.3/fpm/php.ini

… e defina cgi.fix_pathinfo=0 e seu fuso horário:

[...]  
cgi.fix_pathinfo=0  
[...]  
date.timezone="Europe/Berlin"  
[...]  

(Você pode encontrar todos os fusos horários disponíveis nos diretórios /usr/share/zoneinfo e suas subdiretivas.)

Agora recarregue o PHP-FPM:

systemctl restart php7.3-fpm

Para obter suporte CGI no nginx, instalamos o Fcgiwrap.

Fcgiwrap é um wrapper CGI que deve funcionar também para scripts CGI complexos e pode ser usado para ambientes de hospedagem compartilhada porque permite que cada vhost use seu próprio diretório cgi-bin.

Instale o pacote fcgiwrap:

apt-get install fcgiwrap

Após a instalação, o daemon fcgiwrap já deve estar iniciado; seu socket é /var/run/fcgiwrap.socket. Se não estiver em execução, você pode usar o script fservice fcgiwrap para iniciá-lo.

É isso! Agora, quando você criar um vhost nginx, o ISPConfig cuidará da configuração correta do vhost.

10.1 Instalar phpMyAdmin

Desde o Debian 10, o PHPMyAdmin não está mais disponível como pacote .deb. Portanto, instalaremos a partir do código-fonte.

Crie pastas para o PHPMyadmin:

mkdir /usr/share/phpmyadmin  
mkdir /etc/phpmyadmin  
mkdir -p /var/lib/phpmyadmin/tmp  
chown -R www-data:www-data /var/lib/phpmyadmin  
touch /etc/phpmyadmin/htpasswd.setup

Vá para o diretório /tmp e baixe as fontes do PHPMyAdmin:

cd /tmp  
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.tar.gz

Descompacte o arquivo de archive baixado e mova os arquivos para a pasta /usr/share/phpmyadmin e limpe o diretório /tmp.

tar xfz phpMyAdmin-4.9.0.1-all-languages.tar.gz  
mv phpMyAdmin-4.9.0.1-all-languages/* /usr/share/phpmyadmin/  
rm phpMyAdmin-4.9.0.1-all-languages.tar.gz  
rm -rf phpMyAdmin-4.9.0.1-all-languages

Crie um novo arquivo de configuração para o PHPMyaAdmin com base no arquivo de exemplo fornecido:

cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Abra o arquivo de configuração com o editor nano:

nano /usr/share/phpmyadmin/config.inc.php

Defina uma senha segura (segredo blowfish) que deve ter 32 caracteres de comprimento:

$cfg['blowfish_secret'] = 'bD3e6wva9fnd93jVsb7SDgeiBCd452Dh'; /* VOCÊ DEVE PREENCHER ISSO PARA AUTENTICAÇÃO DE COOKIE! */

Não use meu exemplo de segredo blowfish, defina o seu próprio!

Em seguida, adicione uma linha para definir o diretório que o PHPMyAdmin deve usar para armazenar arquivos temporários:

$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

Na próxima etapa, configuraremos o armazenamento de configuração do phpMyAdmin (banco de dados).

Faça login no MariaDB como usuário root:

mysql -u root -p

No shell do MariaDB, crie um novo banco de dados para o PHPMyAdmin:

MariaDB [(none)]> CREATE DATABASE phpmyadmin;

Em seguida, crie um novo usuário:

MariaDB [(none)]> CREATE USER 'pma'@'localhost' IDENTIFIED BY 'mypassword';

Substitua a palavra mypassword por uma senha segura de sua escolha nos comandos acima e abaixo, use a mesma senha duas vezes. Em seguida, conceda ao usuário acesso a este banco de dados e recarregue as permissões do banco de dados.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;  
MariaDB [(none)]> FLUSH PRIVILEGES;  
MariaDB [(none)]> EXIT

Finalmente, carregue as tabelas SQL no banco de dados:

mysql -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql

Digite a senha root do MariaDB quando solicitado.

Tudo o que precisamos fazer agora é definir os detalhes do usuário phpmyadmin no arquivo de configuração. Abra o arquivo no editor nano novamente:

nano /usr/share/phpmyadmin/config.inc.php

Role para baixo até ver as linhas abaixo e edite-as:

/* Usuário usado para manipular com armazenamento */  
$cfg['Servers'][$i]['controlhost'] = 'localhost';  
$cfg['Servers'][$i]['controlport'] = '';  
$cfg['Servers'][$i]['controluser'] = 'pma';  
$cfg['Servers'][$i]['controlpass'] = 'mypassword';  
  
/* Banco de dados e tabelas de armazenamento */  
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';  
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';  
$cfg['Servers'][$i]['relation'] = 'pma__relation';  
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';  
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';  
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';  
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';  
$cfg['Servers'][$i]['history'] = 'pma__history';  
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';  
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';  
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';  
$cfg['Servers'][$i]['recent'] = 'pma__recent';  
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';  
$cfg['Servers'][$i]['users'] = 'pma__users';  
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';  
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';  
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';  
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';  
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';  
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';

Marquei as linhas em vermelho que editei. Substitua mypassword pela senha que você escolheu para o usuário phpmyadmin. Note que os // na frente das linhas também foram removidos!

Após instalar o ISPConfig 3.2, você pode acessar o phpMyAdmin da seguinte forma:

O vhost de aplicativos do ISPConfig na porta 8081 para nginx vem com uma configuração do phpMyAdmin, então você pode usar http://server1.example.com:8081/phpmyadmin ou http://server1.example.com:8081/phpMyAdmin para acessar o phpMyAdmin.

Se você quiser usar um alias /phpmyadmin ou /phpMyAdmin que você possa usar de seus sites, isso é um pouco mais complicado do que para o Apache porque o nginx não tem aliases globais (ou seja, aliases que podem ser definidos para todos os vhosts). Portanto, você deve definir esses aliases para cada vhost do qual deseja acessar o phpMyAdmin.

Para fazer isso, cole o seguinte no campo Diretivas do nginx na guia Opções do site no ISPConfig mais tarde:

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

Se você usar http s em vez de http para seu vhost, deve adicionar a linha fastcgi_param HTTPS on; à sua configuração do phpMyAdmin assim:

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
                       fastcgi_param HTTPS on; # <-- adicione esta linha
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

Se você usar tanto http quanto https para seu vhost, pode usar a variável $https. Vá para o campo Diretivas do nginx novamente, e em vez de fastcgi_param HTTPS on; você adiciona a linha fastcgi_param HTTPS $https; para que você possa usar o phpMyAdmin para solicitações http e https:

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
                       fastcgi_param HTTPS $https; # <-- adicione esta linha
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

11 Instalar Let’s Encrypt

O ISPConfig está usando acme.sh agora como cliente Let’s Encrypt. Instale o acme.sh usando o seguinte comando:

curl https://get.acme.sh | sh -s

12 Instalar Mailman

O ISPConfig permite que você gerencie (crie/modifique/exclua) listas de discussão do Mailman. Se você quiser usar esse recurso, instale o Mailman da seguinte forma:

apt-get install mailman

Selecione pelo menos um idioma, por exemplo:

Idiomas a serem suportados: <– en (Inglês)
Lista de sites ausente <– Ok

Antes que possamos iniciar o Mailman, uma primeira lista de discussão chamada mailman deve ser criada:

newlist mailman

root@server1:~# newlist mailman
Digite o e-mail da pessoa que está executando a lista: <– endereço de e-mail do administrador, por exemplo, [email protected]
Senha inicial do mailman: <– senha do administrador para a lista do mailman
Para terminar de criar sua lista de discussão, você deve editar seu arquivo /etc/aliases (ou equivalente) adicionando as seguintes linhas, e possivelmente executando o programa newaliases:

lista de discussão mailman

mailman: “|/var/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/var/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/var/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/var/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/var/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/var/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/var/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/var/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/var/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/var/lib/mailman/mail/mailman unsubscribe mailman”

Pressione enter para notificar o proprietário do mailman… <– ENTER

root@server1:~#

Abra /etc/aliases depois…

nano /etc/aliases

… e adicione as seguintes linhas:

[...]  
## lista de discussão mailman  
mailman:              "|/var/lib/mailman/mail/mailman post mailman"  
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"  
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"  
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"  
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"  
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"  
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"  
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"  
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"  
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Execute

newaliases

depois e reinicie o Postfix:

systemctl restart postfix

Em seguida, inicie o daemon do Mailman:

systemctl restart mailman

Após instalar o ISPConfig 3, você pode acessar o Mailman da seguinte forma:

O vhost de aplicativos do ISPConfig na porta 8081 para nginx vem com uma configuração do Mailman, então você pode usar http://server1.example.com:8081/cgi-bin/mailman/admin/ ou http://server1.example.com:8081/cgi-bin/mailman/listinfo/ para acessar o Mailman.

Se você quiser usar o Mailman de seus sites, isso é um pouco mais complicado do que para o Apache porque o nginx não tem aliases globais (ou seja, aliases que podem ser definidos para todos os vhosts). Portanto, você deve definir esses aliases para cada vhost do qual deseja acessar o Mailman.

Para fazer isso, cole o seguinte no campo Diretivas do nginx na guia Opções do site no ISPConfig:

        location /cgi-bin/mailman {
               root /usr/lib/;
               fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$;
               include /etc/nginx/fastcgi_params;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               fastcgi_param PATH_INFO $fastcgi_path_info;
               fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
               fastcgi_intercept_errors on;
               fastcgi_pass unix:/var/run/fcgiwrap.socket;
        }

        location /images/mailman {
               alias /usr/share/images/mailman;
        }

        location /pipermail {
               alias /var/lib/mailman/archives/public;
               autoindex on;
        }

Isso define o alias /cgi-bin/mailman/ para seu vhost, o que significa que você pode acessar a interface de administração do Mailman para uma lista em http:///cgi-bin/mailman/admin/, e a página da web para usuários de uma lista de discussão pode ser encontrada em http:///cgi-bin/mailman/listinfo/.

Sob http:///pipermail você pode encontrar os arquivos da lista de discussão.

13 Instalar PureFTPd e Quota

PureFTPd e quota podem ser instalados com o seguinte comando:

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

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

nano /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  
[...]  

Agora configuramos o PureFTPd para permitir sessões FTP e TLS. O 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]: <– Digite o Nome do seu País (por exemplo, “DE”).
Nome do Estado ou Província (nome completo) [Some-State]: <– Digite o Nome do seu Estado ou Província.
Nome da Localidade (por exemplo, cidade) []: <– Digite sua Cidade.
Nome da Organização (por exemplo, empresa) [Internet Widgits Pty Ltd]: <– Digite o Nome da sua Organização (por exemplo, o nome da sua empresa).
Nome da Unidade Organizacional (por exemplo, seção) []: <– Pressione Enter.
Nome Comum (por exemplo, FQDN do servidor ou SEU nome) []: <– Digite o nome do host do servidor, no meu caso: server1.example.com.
Endereço de E-mail []: <– Digite seu Endereço de E-mail.

Altere as permissões do certificado SSL:

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

Em seguida, reinicie o PureFTPd:

systemctl restart pure-ftpd-mysql

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

nano /etc/fstab
# /etc/fstab: informações estáticas do sistema de arquivos.  
#  
# Use 'blkid' para imprimir o identificador único universal 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).  
#  
#        
# / estava em /dev/sda1 durante a instalação  
UUID=45576b38-39e8-4994-b8c1-ea4870e2e614 / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1  
# swap estava em /dev/sda5 durante a instalação  
UUID=8bea0d1e-ec37-4b20-9976-4b7daaa3eb69 none swap sw 0 0  
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0

Para habilitar quota, execute estes comandos:

mount -o remount /
quotacheck -avugm  
quotaon -avug

14 Instalar o Servidor DNS BIND

O BIND pode ser instalado da seguinte forma:

apt-get install bind9 dnsutils

Se o seu servidor for uma máquina virtual, é altamente recomendável instalar o daemon haveged para obter uma maior entropia para a assinatura DNSSEC. Você pode instalar o haveged em servidores não virtuais também, não deve causar problemas.

apt-get -y install haveged  
systemctl enable haveged  
systemctl start haveged

Uma explicação sobre esse tópico pode ser encontrada aqui.

15 Instalar Webalizer, AWStats e GoAccess

Webalizer e AWStats podem ser instalados da seguinte forma:

apt-get install webalizer awstats geoip-database libtimedate-perl libclass-dbi-mysql-perl

Abra /etc/cron.d/awstats depois…

nano /etc/cron.d/awstats

… e comente tudo neste arquivo:

#MAILTO=root

#*/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 ] && /usr/share/awstats/tools/buildstatic.sh

Instalando a versão mais recente do GoAccess diretamente do repositório GoAccess:

echo "deb https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list  
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/goaccess.gpg add -  
apt-get update  
apt-get install goaccess

16 Instalar Jailkit

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

apt-get install build-essential autoconf automake libtool flex bison debhelper binutils
cd /tmp  
wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz  
tar xvfz jailkit-2.20.tar.gz  
cd jailkit-2.20  
echo 5 > debian/compat  
./debian/rules binary

Agora você pode instalar o pacote Jailkit.deb da seguinte forma:

cd ..  
dpkg -i jailkit_2.20-1_*.deb  
rm -rf jailkit-2.20*

17 Instalar Fail2ban e Firewall UFW

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:

nano /etc/fail2ban/jail.local
[pure-ftpd]  
enabled = true  
port = ftp  
filter = pure-ftpd  
logpath = /var/log/syslog  
maxretry = 3  
  
[dovecot]  
enabled = true  
filter = dovecot  
logpath = /var/log/mail.log  
maxretry = 5  
  
[postfix-sasl]  
enabled = true  
port = smtp  
filter = postfix[mode=auth]  
logpath = /var/log/mail.log  
maxretry = 3

Reinicie o fail2ban depois:

systemctl restart fail2ban

Para instalar o firewall UFW, execute este comando apt:

apt-get install ufw

18 Instalar RoundCube

Instale o RoundCube com este comando:

apt-get install roundcube roundcube-core roundcube-mysql roundcube-plugins

O instalador fará as seguintes perguntas:

Configurar banco de dados para roundcube com dbconfig.common? <-- sim  
Senha do aplicativo MySQL para roundcube: <-- pressione enter  
Senha do usuário administrativo do banco de dados: <-- digite a senha root do MySQL aqui.

Em seguida, edite o arquivo de configuração do RoundCube /etc/roundcube/config.inc.php e ajuste algumas configurações:

nano /etc/roundcube/config.inc.php

Defina o default_host como localhost e o smtp_server.

$config['default_host'] = 'localhost';  
$config['smtp_server'] = 'localhost';  
$config['smtp_port']  = 25;

O ISPConfig tem alguma configuração no vhost de aplicativos nginx para squirrelmail que funciona para roundcube também. Nós a ativamos com:

ln -s /usr/share/roundcube /usr/share/squirrelmail

http://192.168.0.100:8081/webmail
http://server1.example.com:8081/webmail (depois de instalar o ISPConfig, veja o próximo capítulo)

Roundcube no Nginx

19 Instalar ISPConfig 3

Antes de iniciar a instalação do ISPConfig, certifique-se de que o Apache esteja parado (se estiver instalado - é possível que alguns dos seus pacotes instalados tenham instalado o Apache como uma dependência sem você saber). Se o Apache2 já estiver instalado no sistema, pare-o agora…

systemctl stop apache2

… e remova os links de inicialização do sistema do Apache:

update-rc.d -f apache2 remove

Certifique-se de que o nginx esteja em execução:

systemctl start nginx

(Se você tiver tanto Apache quanto nginx instalados, o instalador perguntará qual você deseja usar: Apache e nginx detectados. Selecione o servidor a ser usado para o ISPConfig: (apache,nginx) [apache]:

Digite nginx. Se apenas Apache ou nginx estiver instalados, isso é detectado automaticamente pelo instalador, e nenhuma pergunta é feita.)

Para instalar o ISPConfig 3.2 a partir da versão mais recente lançada, faça isso:

cd /tmp  
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz  
tar xfz ISPConfig-3-stable.tar.gz  
cd ispconfig3_install/install/

O próximo passo é executar

php -q install.php

Isso iniciará o instalador do ISPConfig 3. O instalador configurará todos os serviços como Postfix, Nginx, Dovecot, etc. para você.

# php -q install.php
  
--------------------------------------------------------------------------------  
_____ ___________ _____ __ _ ____  
|_ _/ ___| ___ \ / __ \ / _(_) /__ \  
| | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ /  
| | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ |  
_| |_\/__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \  
\___/\____/\_| \____/\___/|_| |_|_| |_\__, | \____/  
__/ |  
|___/  
--------------------------------------------------------------------------------
  
>> Configuração inicial
Sistema Operacional: Debian 10.0 (Buster) ou compatível
A seguir, haverá algumas perguntas para configuração primária, então tenha cuidado.  
Os valores padrão estão entre [colchetes] e podem ser aceitos com .  
Digite "quit" (sem as aspas) para parar o instalador.
  
Selecione o idioma (en,de) [en]: <-- Pressione Enter
Modo de instalação (padrão, especialista) [padrão]: <-- Pressione Enter
Nome do host totalmente qualificado (FQDN) do servidor, por exemplo, server1.domain.tld [server1.canomi.com]: <-- Pressione Enter
Nome do host do servidor MySQL [localhost]: <-- Pressione Enter
Porta do servidor MySQL [3306]: <-- Pressione Enter
Nome de usuário root do MySQL [root]: <-- Pressione Enter
Senha root do MySQL []: <-- Digite sua senha root do MySQL
Banco de dados MySQL a ser criado [dbispconfig]: <-- Pressione Enter
Charset MySQL [utf8]: <-- Pressione Enter
Apache e nginx detectados. Selecione o servidor a ser usado para o ISPConfig: (apache,nginx) [apache]: <-- nginx  

Configurando Postgrey  
Configurando Postfix  
Gerando uma chave privada RSA de 4096 bits  
.......................................................................++  
........................................................................................................................................++  
escrevendo nova chave privada em 'smtpd.key'  
-----  
Você está prestes a ser solicitado a inserir informações que serão incorporadas  
no seu pedido de certificado.  
O que você está prestes a inserir é o que é chamado de Nome Distinto ou DN.  
Existem muitos campos, mas você pode deixar alguns em branco  
Para alguns campos haverá um valor padrão,  
Se você digitar '.', o campo será deixado em branco.  
-----  
Nome do País (código de 2 letras) [AU]: <-- Digite o código de 2 letras do país  
Nome do Estado ou Província (nome completo) [Some-State]: <-- Digite o nome do estado  
Nome da Localidade (por exemplo, cidade) []: <-- Digite sua cidade  
Nome da Organização (por exemplo, empresa) [Internet Widgits Pty Ltd]: <-- Digite o nome da empresa ou pressione enter  
Nome da Unidade Organizacional (por exemplo, seção) []: <-- Pressione Enter  
Nome Comum (por exemplo, FQDN do servidor ou SEU nome) []: <-- Digite o nome do host do servidor, no meu caso: server1.example.com  
Endereço de E-mail []: <-- Pressione Enter  
Configurando Mailman  
Configurando Dovecot  
Configurando Spamassassin  
Configurando Amavisd  
Configurando Getmail  
Configurando BIND  
Configurando Jailkit  
Configurando Pureftpd  
Configurando Nginx  
Configurando vlogger  
[INFO] serviço Metronome XMPP Server não detectado
Configurando Firewall UFW  
Configurando Fail2ban  
[INFO] serviço OpenVZ não detectado  
Configurando vhost de aplicativos  
Instalando ISPConfig  
Porta do ISPConfig [8080]:
Senha do administrador [admin]: <-- Digite a senha desejada do usuário administrador do ISPConfig aqui
Você deseja uma conexão segura (SSL) à interface da web do ISPConfig (y,n) [y]: <-- Pressione Enter
Gerando chave privada RSA, módulo longo de 4096 bits  
.......................++  
................................................................................................................................++  
e é 65537 (0x10001)  
Você está prestes a ser solicitado a inserir informações que serão incorporadas  
no seu pedido de certificado.  
O que você está prestes a inserir é o que é chamado de Nome Distinto ou DN.  
Existem muitos campos, mas você pode deixar alguns em branco  
Para alguns campos haverá um valor padrão,  
Se você digitar '.', o campo será deixado em branco.  
-----  
Nome do País (código de 2 letras) [AU]: <-- Digite o código de 2 letras do país  
Nome do Estado ou Província (nome completo) [Some-State]: <-- Digite o nome do estado  
Nome da Localidade (por exemplo, cidade) []: <-- Digite sua cidade  
Nome da Organização (por exemplo, empresa) [Internet Widgits Pty Ltd]: <-- Digite o nome da empresa ou pressione enter  
Nome da Unidade Organizacional (por exemplo, seção) []: <-- Pressione Enter  
Nome Comum (por exemplo, FQDN do servidor ou SEU nome) []: <-- Digite o nome do host do servidor, no meu caso: server1.example.com  
Endereço de E-mail []: <-- Pressione Enter
Por favor, insira os seguintes atributos 'extras'  
que serão enviados com seu pedido de certificado  
Uma senha de desafio []: <-- Pressione Enter  
Um nome de empresa opcional []: <-- Pressione Enter  
escrevendo chave RSA
  
Configurando DBServer  
Instalando crontab do ISPConfig  
sem crontab para root  
sem crontab para getmail  
Detectando endereços IP  
Reiniciando serviços ...  
Instalação concluída.

O instalador configura automaticamente todos os serviços subjacentes, portanto, nenhuma configuração manual é necessária.

Depois você pode acessar o ISPConfig 3 em http(s)://server1.example.com:8080/ ou http(s)://192.168.1.100:8080/ (http ou https depende do que você escolheu durante a instalação). Faça login com o nome de usuário admin e a senha admin (você deve alterar a senha padrão após seu primeiro login):

Página de login do ISPConfig

Painel do ISPConfig no Debian 10

Finalmente, corrigimos algumas permissões da instalação do RoundCube.

chown root:ispapps /etc/roundcube/debian-db.php
chmod 640 /etc/roundcube/debian-db.php
chown root:ispapps /etc/roundcube/config.inc.php
chmod 640 /etc/roundcube/config.inc.php
chown -R ispapps:adm /var/log/roundcube
chmod -R 750 /var/log/roundcube
chown -R ispapps:ispapps /var/lib/roundcube/temp
chmod -R 750 /var/lib/roundcube/temp

O sistema agora está pronto para ser usado.

Existem alguns plugins para integrar o RoundCube Webmail com o ISPConfig, dê uma olhada aqui para as instruções de instalação do plugin ISPConfig RoundCube.

20.1 Manual do ISPConfig 3

Para aprender como usar o ISPConfig 3, recomendo fortemente baixar o Manual do ISPConfig 3.

Em mais de 300 páginas, ele cobre o conceito por trás do ISPConfig (administrador, revendedores, clientes), explica como instalar e atualizar o ISPConfig 3, inclui uma referência para todos os formulários e campos de formulário no ISPConfig juntamente com exemplos de entradas válidas, e fornece tutoriais para as tarefas mais comuns no ISPConfig 3. Ele também descreve como tornar seu servidor mais seguro e vem com uma seção de solução de problemas no final.

21 Download da imagem da máquina virtual deste tutorial

Este tutorial está disponível como uma imagem de máquina virtual pronta para uso no formato ovf/ova que é compatível com VMWare e Virtualbox. A imagem da máquina virtual usa os seguintes detalhes de login:

Login SSH / Shell

Nome de usuário: administrator
Senha: howtoforge

Nome de usuário: root
Senha: howtoforge

Login do ISPConfig

Nome de usuário: admin
Senha: howtoforge

Login do MySQL

Nome de usuário: root
Senha: howtoforge

O IP da VM é 192.168.0.100, pode ser alterado no arquivo /etc/network/interfaces. Por favor, altere todas as senhas acima para proteger a máquina virtual.

22 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.