Servidor Perfeito · 12 min read · Oct 02, 2025
O Servidor Perfeito - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)
O Servidor Perfeito - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)
Versão 1.0
Autores: Till Brehm, Srijan Kishore e Falko Timme
Siga o howtoforge no Twitter
Este tutorial mostra como preparar um servidor CentOS 7 x86_64 para a instalação do ISPConfig 3 e como instalar o ISPConfig 3 nele. 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 nginx, servidor de e-mail Postfix, MySQL, servidor de nomes BIND, PureFTPd, SpamAssassin, ClamAV, Mailman e muitos mais. Desde a versão 3.0.4, o ISPConfig vem com suporte total para o servidor web nginx além do Apache; este tutorial cobre a configuração de um servidor que usa nginx, não Apache. O tutorial do servidor perfeito do ISPConfig 3 para apache está disponível aqui.
Manual do ISPConfig 3
Para aprender a usar o ISPConfig 3, recomendo fortemente baixar o Manual do ISPConfig 3.
Em cerca de 300 páginas, ele cobre o conceito por trás do ISPConfig (administradores, 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.
1. Requisitos
Para instalar um sistema assim, você precisará do seguinte
- Baixe os dois DVDs do CentOS 7.0 de um espelho próximo a você (a lista de espelhos pode ser encontrada aqui: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso.
- Uma conexão de internet rápida
2. 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. Por favor, instale a instalação mínima do CentOS 7 a partir deste link do tutorial antes de prosseguir.
3 Instalar o editor nano e ajustar /etc/hosts
yum -y install nano wget
Em seguida, editamos /etc/hosts. Deixe-o assim:
nano /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100 server1.example.com server1
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6e defina o nome do host como server1.example.com:
echo ‘server1.example.com’ > /etc/hostname
4 Configurar o Firewall e instalar alguns softwares de rede básicos
(Você pode pular este capítulo se já tiver desativado o firewall no final da instalação básica do sistema.)
Quero instalar o ISPConfig no final deste tutorial, que vem com seu próprio firewall. É por isso que desativo o firewall padrão do CentOS agora. Claro, você é livre para deixá-lo ligado e configurá-lo de acordo com suas necessidades (mas então você não deve usar nenhum outro firewall mais tarde, pois provavelmente interferirá com o firewall do CentOS).
Execute
systemctl stop firewalld.service
systemctl disable firewalld.service
[root@server1 ~]# systemctl disable firewalld.service
rm ‘/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service’
rm ‘/etc/systemd/system/basic.target.wants/firewalld.service’
[root@server1 ~]#
e desative o firewall.
Para verificar se o firewall foi realmente desativado, você pode executar
firewall-cmd –state
depois. A saída deve ser assim:
[root@server1 ~]# firewall-cmd –state
not running
[root@server1 ~]#
yum -y install net-tools NetworkManager-tui
5 Desativar SELinux
SELinux é uma extensão de segurança do CentOS que deve fornecer segurança estendida. Na minha opinião, você não precisa dele para configurar um sistema seguro, e geralmente causa mais problemas do que vantagens (pense nisso depois de ter feito uma semana de solução de problemas porque algum serviço não estava funcionando como esperado, e então você descobre que tudo estava ok, apenas o SELinux estava causando o problema). Portanto, eu o desativo (isso é obrigatório se você quiser instalar o ISPConfig mais tarde).
Edite /etc/selinux/config e defina SELINUX=disabled:
nano /etc/selinux/config
# Este arquivo controla o estado do SELinux no sistema.
# SELINUX= pode assumir um desses três valores:
# enforcing - A política de segurança do SELinux é aplicada.
# permissive - O SELinux imprime avisos em vez de aplicar.
# disabled - Nenhuma política do SELinux é carregada.
SELINUX=disabled
# SELINUXTYPE= pode assumir um desses dois valores:
# targeted - Processos direcionados são protegidos,
# mls - Proteção de Segurança de Múltiplos Níveis.
SELINUXTYPE=targeted
Depois disso, devemos reiniciar o sistema:
reboot
6 Habilitar Repositórios Adicionais E Instalar Alguns Softwares
Vamos habilitar os repositórios EPEL em nosso sistema CentOS, pois muitos dos pacotes que vamos instalar ao longo deste tutorial não estão disponíveis nos repositórios oficiais do CentOS 7.0:
yum -y install epel-release
yum -y install yum-priorities
Edite /etc/yum.repos.d/epel.repo…
nano /etc/yum.repos.d/epel.repo
… e adicione a linha priority=10 à seção [epel]:
[epel]
name=Pacotes Extras para Linux Empresarial 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]Então atualizamos nossos pacotes existentes no sistema:
yum update
Agora instalamos alguns pacotes de software que são necessários mais tarde:
yum -y groupinstall ‘Development Tools’
7 Quota
(Se você escolheu um esquema de particionamento diferente do que eu, deve ajustar este capítulo para que a quota se aplique às partições onde você precisa dela.)
Para instalar quota, executamos este comando:
yum -y install quota
Agora verificamos se a quota já está habilitada para o sistema de arquivos onde o site (/var/www) e os dados do maildir (var/vmail) estão armazenados. Neste exemplo, tenho uma grande partição raiz, então procuro por ‘ / ‘:
mount | grep ‘ / ‘
[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#
Se você tiver uma partição /var separada, então use:
mount | grep ‘ /var ‘
em vez disso. Se a linha contiver a palavra “ noquota “, então prossiga com os seguintes passos para habilitar a quota.
Habilitando quota na partição / (root)
Normalmente, você habilitaria a quota no arquivo /etc/fstab, mas se o sistema de arquivos for o sistema de arquivos raiz “/“, então a quota deve ser habilitada por um parâmetro de inicialização do Kernel Linux.
Edite o arquivo de configuração do grub:
nano /etc/default/grub
procure pela linha que começa com GRUB_CMDLINE_LINUX e adicione rootflags=uquota,gquota aos parâmetros da linha de comando para que a linha resultante fique assim:
[...]
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto vconsole.keymap=us rhgb quiet rootflags=uquota,gquota"
[...] e aplique as alterações executando o seguinte comando.
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg
e reinicie o servidor.
reboot
Agora verifique se a quota está habilitada:
mount | grep ‘ / ‘
[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#
Quando a quota está ativa, podemos ver “ usrquota,grpquota “ na lista de opções de montagem.
Habilitando quota em uma partição /var separada
Se você tiver uma partição /var separada, então edite /etc/fstab e adicione,uquota,gquota à partição / ( /dev/mapper/centos-var):
nano /etc/fstab
#
# /etc/fstab
# Criado pelo anaconda em Dom Set 21 16:33:45 2014
#
# Sistemas de arquivos acessíveis, por referência, são mantidos sob '/dev/disk'
# Veja as páginas de manual fstab(5), findfs(8), mount(8) e/ou blkid(8) para mais informações
#
/dev/mapper/centos-root / xfs defaults 1 1
/dev/mapper/centos-var /var xfs defaults,uquota,gquota 1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot xfs defaults 1 3
/dev/mapper/centos-swap swap swap defaults 0 0Então execute
mount -o remount /var
quotacheck -avugm
quotaon -avug
para habilitar a quota.
8 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) pela Internet. Basta executar
yum -y install ntp
e seu horário do sistema estará sempre sincronizado.
9 Instalar MariaDB
Vamos instalar o servidor e o cliente MariaDB da seguinte forma:
yum -y install mariadb mariadb-server
Queremos que o serviço Mariadb seja executado ao iniciar e iniciar o serviço como:
systemctl enable mariadb.service
systemctl start mariadb.service
Defina senhas para a conta root do MySQL:
mysql_secure_installation
[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: linha 379: find_mysql_client: comando não encontrado
NOTA: É RECOMENDADO EXECUTAR TODAS AS PARTES DESTE SCRIPT PARA TODOS OS SERVIDORES MariaDB EM USO PRODUÇÃO! LEIA CADA ETAPA CUIDADOSAMENTE!
Para fazer login no MariaDB para protegê-lo, precisaremos da senha atual para o usuário root. Se você acabou de instalar o MariaDB e não definiu a senha root ainda, a senha estará em branco, então você deve apenas pressionar enter aqui. <–ENTER
Digite a senha atual para root (pressione enter para nenhum): <–ENTER
OK, senha usada com sucesso, prosseguindo…
Definir senha root? [Y/n] <–ENTER
Nova senha: <–suasenhadomariadb
Reinsira a nova senha: <–suasenhadomariadb
Senha atualizada com sucesso!
Recarregando tabelas de privilégios..
… Sucesso!
Por padrão, uma instalação do MariaDB tem um usuário anônimo, permitindo que qualquer um faça login no MariaDB sem precisar ter uma conta de usuário criada para eles. Isso é destinado apenas para testes e para facilitar a instalação. Você deve removê-los antes de entrar em um ambiente de produção.
Remover usuários anônimos? [Y/n] <–ENTER
… Sucesso!
Normalmente, o root deve ser permitido apenas conectar-se a partir de ‘localhost’. Isso garante que alguém não possa adivinhar a senha root pela rede.
Desabilitar login remoto do root? [Y/n] <–ENTER
… Sucesso!
Por padrão, o MariaDB vem com um banco de dados chamado ‘test’ que qualquer um pode acessar. Isso também é destinado apenas para testes e deve ser removido antes de entrar em um ambiente de produção.
Remover banco de dados de teste e acesso a ele? [Y/n] <–ENTER
- Removendo banco de dados de teste…
… Sucesso! - Removendo privilégios no banco de dados de teste…
… Sucesso!
Recarregar as tabelas de privilégios garantirá que todas as alterações feitas até agora tenham efeito imediato.
Recarregar tabelas de privilégios agora? [Y/n] <–ENTER
… Sucesso!
Limpando…
Tudo pronto! Se você completou todas as etapas acima, sua instalação do MariaDB agora deve estar segura.
Obrigado por usar o MariaDB!
[root@server1 ~]#
10 Instalar Dovecot
Dovecot pode ser instalado da seguinte forma:
yum -y install dovecot dovecot-pigeonhole dovecot-mysql
Crie um arquivo dovecot-sql.conf vazio e um link simbólico:
touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
Agora crie os links de inicialização do sistema e inicie o Dovecot:
systemctl enable dovecot.service
systemctl start dovecot.service
11 Instalar Postfix
Postfix pode ser instalado da seguinte forma:
yum -y install postfix
Em seguida, desative o Sendmail e inicie o Postfix:
systemctl enable mariadb.service
systemctl start mariadb.service
systemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.service
12 Instalar Getmail
Getmail pode ser instalado da seguinte forma:
yum -y install getmail
13 Instalar Amavisd-new, SpamAssassin e ClamAV
Para instalar amavisd-new, spamassassin e clamav, execute o seguinte comando:
yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 unrar perl-DBD-mysql
Edite o arquivo de configuração freshclam /etc/freshclam.conf
nano /etc/freshclam.conf
e comente a linha “Exemplo”
[….]
[….]
Então iniciamos freshclam, amavisd e clamd.amavisd:
sa-update
freshclam
systemctl enable amavisd.service
14 Instalar Nginx, PHP5 (PHP-FPM) e Fcgiwrap
O Nginx está disponível como um pacote para CentOS 7.0 (do EPEL) que podemos instalar da seguinte forma:
yum -y install nginx
Se o Apache2 já estiver instalado no sistema, pare-o agora…
systemctl stop httpd.service
… e remova os links de inicialização do sistema do Apache:
systemctl disable httpd.service
Então criamos os links de inicialização do sistema para o nginx e o iniciamos:
systemctl enable nginx.service
systemctl start nginx.service
(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 PHP5 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). Podemos instalar php-fpm junto com php-cli e alguns módulos PHP5 como php-mysql que você precisa se quiser usar MySQL em seus scripts PHP da seguinte forma:
yum -y install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy
Em seguida, abrimos /etc/php.ini…
nano /etc/php.ini
… e mudamos o relatório de erros (para que os avisos não sejam mais exibidos):
[...]
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
[...]Também defina cgi.fix_pathinfo=0:
nano /etc/php.ini
[...]
; cgi.fix_pathinfo fornece suporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. O comportamento anterior do PHP era definir PATH_TRANSLATED como SCRIPT_FILENAME e não entender o que é PATH_INFO. Para mais informações sobre PATH_INFO, veja as especificações cgi. Definir isso como 1 fará com que o PHP CGI corrija seus caminhos para se conformar à especificação. Um valor de zero faz com que o PHP se comporte como antes. O padrão é 1. Você deve corrigir seus scripts para usar SCRIPT_FILENAME em vez de PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...](Leia http://wiki.nginx.org/Pitfalls para descobrir por que você deve fazer isso.)
Além disso, para evitar erros como
[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): Não é seguro confiar nas configurações de fuso horário do sistema. Você é obrigado a usar a configuração date.timezone ou a função date_default_timezone_set(). Caso você tenha usado algum desses métodos e ainda esteja recebendo este aviso, você provavelmente digitou incorretamente o identificador do fuso horário. Selecionamos ‘Europe/Berlin’ para ‘CEST/2.0/DST’ em vez disso em /usr/share/nginx/html/info.php na linha 2
… em /var/log/php-fpm/www-error.log quando você chama um script PHP em seu navegador, você deve definir date.timezone em /etc/php.ini:
[...]
[Date]
; Define o fuso horário padrão usado pelas funções de data
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]Em seguida, crie os links de inicialização do sistema para php-fpm e inicie-o:
systemctl enable php-fpm
systemctl restart php-fpm
O PHP-FPM é um processo daemon (com o script de inicialização /etc/init.d/php-fpm) que executa um servidor FastCGI na porta 9000.
Para obter suporte CGI no nginx, instalamos o Fcgiwrap.
O 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.
Como não há pacote fcgiwrap para CentOS 7.0, devemos construí-lo nós mesmos. Primeiro, instalamos algumas dependências:
yum -y install fcgi-devel
Agora podemos construir o fcgiwrap da seguinte forma:
cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install
Isso instala o fcgiwrap em /usr/local/sbin/fcgiwrap.
Em seguida, instalamos o pacote spawn-fcgi que nos permite executar o fcgiwrap como um daemon:
yum -y install spawn-fcgi
Abra /etc/sysconfig/spawn-fcgi…
nano /etc/sysconfig/spawn-fcgi
… e modifique o arquivo da seguinte forma:
# Você deve definir algumas opções de trabalho antes que o serviço "spawn-fcgi" funcione.
# Se SOCKET aponta para um arquivo, então este arquivo é limpo pelo script de inicialização.
#
# Veja spawn-fcgi(1) para todas as opções possíveis.
#
# Exemplo :
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"
FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=apache
FCGI_GROUP=apache
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"Agora adicione o usuário nginx ao grupo apache:
usermod -a -G apache nginx
Crie os links de inicialização do sistema para spawn-fcgi…
chkconfig spawn-fcgi on
… e inicie-o da seguinte forma:
systemctl start spawn-fcgi
Agora você deve encontrar o socket fcgiwrap em /var/run/fcgiwrap.socket, pertencente ao usuário e grupo apache (alguns scripts, por exemplo, Mailman, esperam ser executados pelo usuário/grupo apache, é por isso que não executamos spawn-fcgi como usuário/grupo nginx, mas em vez disso adicionamos nginx ao grupo apache).
14.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 FastCGI e PHP-FPM. O procedimento para construir versões adicionais do PHP no CentOS é descrito neste tutorial: Como Usar Múltiplas Versões do PHP (PHP-FPM & FastCGI) Com ISPConfig 3 (CentOS 6.3)
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.