Servidor Ubuntu · 13 min read · Oct 22, 2025

O Servidor Perfeito - Ubuntu 16.04 (Nginx, MySQL, PHP, Postfix, BIND, Dovecot, Pure-FTPD e ISPConfig 3.1) - Página 2

8. Instalar Nginx, PHP5 (PHP-FPM) e Fcgiwrap

Nginx está disponível como um pacote para Ubuntu que podemos instalar com o seguinte comando:

apt-get install nginx

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

service apache2 stop

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

update-rc.d -f apache2 remove

Inicie o nginx em seguida:

service nginx start

(Se tanto o Apache2 quanto o nginx estiverem instalados, o instalador do ISPConfig 3 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 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 -y install php7.0-fpm

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

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

apt-cache search php7.0

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

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

As extensões mbstring e mcrypt precisam ser habilitadas manualmente.

phpenmod mcrypt  
phpenmod mbstring

APCu é uma extensão PHP para o PHP 7 Opcache que adiciona uma camada de compatibilidade para software que usa o PHP APC Cache.

APCu pode ser instalado da seguinte forma:

apt-get -y install php-apcu

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

nano /etc/php/7.0/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:

service php7.0-fpm reload

Para obter suporte a 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 -y 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 /etc/init.d/fcgiwrap para iniciá-lo.

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

8.1 Versões Adicionais do PHP

A partir do ISPConfig 3.0.5, é possível ter várias versões do PHP em um servidor (selecionáveis através do ISPConfig) que podem ser executadas através do PHP-FPM. Para aprender como construir versões adicionais do PHP (PHP-FPM) e como configurar o ISPConfig, consulte este tutorial: Como Usar Múltiplas Versões do PHP (PHP-FPM & FastCGI) Com ISPConfig 3 (Ubuntu 12.10) (funciona para Ubuntu 16.04 também).

8.2 Instalar phpMyAdmin

Instale o phpMyAdmin da seguinte forma:

apt-get -y install phpmyadmin php-mbstring php-gettext

Você verá as seguintes perguntas:

Servidor web para reconfigurar automaticamente: <– selecione nenhum (porque apenas apache2 e lighttpd estão disponíveis como opções)
Senha da aplicação MySQL para phpmyadmin: <– Pressione Enter

Agora você pode encontrar o phpMyAdmin no diretório /usr/share/phpmyadmin/.

Depois de instalar o ISPConfig 3, 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 Diretrizes do nginx na aba Opções do site no ISPConfig:

        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.0-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.0-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 http e https para seu vhost, precisa adicionar a seguinte seção à seção http {} em /etc/nginx/nginx.conf (antes de qualquer linha de inclusão) que determina se o visitante usa http ou https e define a variável $fastcgi_https (que usaremos em nossa configuração do phpMyAdmin) de acordo:

nano /etc/nginx/nginx.conf
[...]
http {
[...]
        ## Detectar quando HTTPS é usado
        map $scheme $fastcgi_https {
          default off;
          https on;

        }
[...]
}
[...]

Não se esqueça de recarregar o nginx depois:

service nginx reload

Em seguida, vá novamente para o campo Diretrizes do nginx, e em vez de fastcgi_param HTTPS on; você adiciona a linha fastcgi_param HTTPS $fastcgi_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.0-fpm.sock;
                       fastcgi_param HTTPS $fastcgi_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;
        }

O Ubuntu não permite logins no MySQL como usuário root através do PHPMyAdmin mais. Sem privilégios de root, você não pode usar o PHPMyAdmin para administrar usuários de banco de dados ou criar bancos de dados. Para contornar esse problema, criarei um novo usuário MySQL com o nome “admin” aqui que tem privilégios de root. Este usuário admin pode ser usado para administração de banco de dados no PHPMyAdmin.

Faça login no banco de dados MySQL como usuário root no shell:

mysql -u root

Crie um novo usuário “admin” com a senha “howtoforge”. Substitua a senha “howtoforge” por uma senha segura nos comandos abaixo!

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';  
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;  
FLUSH PRIVILEGES;  
exit

8.3 Instalar HHVM (HipHop Virtual Machine)

Neste passo, instalaremos o HHVM com apt. HHVM é um motor PHP rápido desenvolvido pelo Facebook.

apt-get -y install software-properties-common  
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449  
add-apt-repository "deb http://dl.hhvm.com/ubuntu xenial main"  
apt-get update  
apt-get -y install hhvm

8.4. Instalar Let’s Encrypt

O ISPConfig 3.1 tem suporte embutido para a Autoridade de Certificação SSL gratuita Let’s Encrypt. A função Let’s Encrypt permite que você crie Certificados SSL gratuitos para seu site no ISPConfig.

Agora adicionaremos suporte para Let’s Encrypt.

apt install software-properties-common  
add-apt-repository ppa:certbot/certbot  
apt update  
apt -y remove letsencrypt  
apt -y install python-certbot-nginx

9. Instalar Mailman

O ISPConfig também 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 -y install mailman

Selecione pelo menos um idioma, por exemplo:

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

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

newlist mailman

root@server1:~# newlist mailman
Digite o email da pessoa que está executando a lista: <– endereço de email do admin, por exemplo, [email protected]
Senha inicial do mailman: <– senha do admin para a lista do mailman
Para finalizar a criação da 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:

service postfix restart

Em seguida, inicie o daemon do Mailman:

service mailman start

Depois de 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 Diretrizes do nginx na aba 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/.

Em http:///pipermail você pode encontrar os arquivos de discussão.

10. Instalar PureFTPd E Quota

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…

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. 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) []: <– Digite o Nome da sua Unidade Organizacional (por exemplo, “Departamento de TI”).
Nome Comum (por exemplo, SEU nome) []: <– Digite o Nome de Domínio Totalmente Qualificado do sistema (por exemplo, “server1.example.com”).
Endereço de Email []: <– Digite 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:

service pure-ftpd-mysql restart

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 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).  
#  
#        
/dev/mapper/server1--vg-root / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1  
# /boot estava em /dev/sda1 durante a instalação  
UUID=39762f15-3a49-4982-add3-139d5040b48a /boot ext2 defaults 0 2  
/dev/mapper/server1--vg-swap_1 none swap sw 0 0  
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0

Para habilitar quota, execute esses comandos:

mount -o remount /
quotacheck -avugm  
quotaon -avug

As seguintes mensagens de erro são normais para o comando e podem ser ignoradas:

quotacheck: Escaneando /dev/mapper/server1--vg-root [/] concluído  
quotacheck: Não é possível estatizar o arquivo de quota de usuário antigo //quota.user: Nenhum arquivo ou diretório desse tipo. O uso não será subtraído.  
quotacheck: Não é possível estatizar o arquivo de quota de grupo antigo //quota.group: Nenhum arquivo ou diretório desse tipo. O uso não será subtraído.  
quotacheck: Não é possível estatizar o arquivo de quota de usuário antigo //quota.user: Nenhum arquivo ou diretório desse tipo. O uso não será subtraído.  
quotacheck: Não é possível estatizar o arquivo de quota de grupo antigo //quota.group: Nenhum arquivo ou diretório desse tipo. O uso não será subtraído.  
quotacheck: Verificado 18566 diretórios e 110119 arquivos  
quotacheck: Arquivo antigo não encontrado.  
quotacheck: Arquivo antigo não encontrado.

11. Instalar Servidor DNS BIND

O BIND é instalado da seguinte forma:

apt-get -y install bind9 dnsutils haveged

Ative e inicie o haveged.

systemctl enable haveged  
service haveged start

12. Instalar Vlogger, Webalizer e AWStats

O Vlogger, Webalizer e AWStats podem ser instalados da seguinte forma:

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

Abra /etc/cron.d/awstats depois…

nano /etc/cron.d/awstats

… e comente tudo nesse 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

13. 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 -y install build-essential autoconf automake1.11 libtool flex bison debhelper binutils
cd /tmp  
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz  
tar xvfz jailkit-2.19.tar.gz  
cd jailkit-2.19  
./debian/rules binary

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

cd ..  
dpkg -i jailkit_2.19-1_*.deb  
rm -rf jailkit-2.19*

14. Instalar fail2ban

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

apt-get -y install fail2ban

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

nano /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/syslog
maxretry = 5

[postfix-sasl]
enabled  = true
port     = smtp
filter   = postfix-sasl
logpath  = /var/log/syslog
maxretry = 3

Em seguida, crie os seguintes dois arquivos de filtro:

nano /etc/fail2ban/filter.d/pureftpd.conf
[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =
nano /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 =

Adicione a linha ignoreregex ausente no arquivo postfix-sasl:

echo "ignoreregex =" >> /etc/fail2ban/filter.d/postfix-sasl.conf

Reinicie o fail2ban depois:

service fail2ban restart

Para instalar o firewall UFW, execute este comando apt:

apt-get install ufw
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.