Servidor Perfeito · 13 min read · Oct 27, 2025
O Servidor Perfeito – CentOS 7 (Apache2, Dovecot, ISPConfig 3) - Página 2
10 Instalar Dovecot
Dovecot pode ser instalado da seguinte forma:
yum -y install dovecot dovecot-mysql dovecot-pigeonholeCrie 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.confAgora crie os links de inicialização do sistema e inicie o Dovecot:
systemctl enable dovecot
systemctl start dovecot11 Instalar Postfix
Postfix pode ser instalado da seguinte forma:
yum -y install postfixEm seguida, desative o Sendmail e inicie o Postfix e o Mariadb (MySQL):
systemctl enable mariadb.service
systemctl start mariadb.servicesystemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.serviceDesativamos o sendmail para garantir que ele não seja iniciado caso esteja instalado em seu servidor. Portanto, a mensagem de erro “Falha ao emitir chamada de método: Unidade sendmail.service não carregada.” pode ser ignorada.
12 Instalar Getmail
Getmail pode ser instalado da seguinte forma:
yum -y install getmail13 Definir Senhas MySQL e Configurar phpMyAdmin
Defina senhas para a conta root do MySQL:
mysql_secure_installation[root@server1 tmp]# mysql_secure_installation
NOTA: EXECUTAR TODAS AS PARTES DESTE SCRIPT É RECOMENDADO PARA TODOS OS SERVIDORES MariaDB
EM USO EM PRODUÇÃO! POR FAVOR, LEIA CADA ETAPA CUIDADOSAMENTE!Para fazer login no MariaDB e protegê-lo, precisaremos da senha atual
para o usuário root. Se você acabou de instalar o MariaDB, e
você ainda não definiu a senha root, a senha estará em branco,
portanto você deve apenas pressionar enter aqui.Digite a senha atual para root (pressione enter para nenhuma):
OK, senha usada com sucesso, prosseguindo...Definir a senha root garante que ninguém possa fazer login no MariaDB
usuário root sem a devida autorização.
Definir senha root? [Y/n] <-- ENTER
Nova senha: <-- sua senha root do sql
Reinsira a nova senha: <-- sua senha root do sql
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
elas. Isso é destinado apenas para testes, e para tornar a instalação
mais suave. Você deve removê-los antes de entrar em um
environmento de produção.
Remover usuários anônimos? [Y/n] <-- ENTER
... Sucesso!
Normalmente, root deve ser permitido apenas conectar de 'localhost'. Isso
garante que alguém não possa adivinhar a senha root a partir da
rede.
Desabilitar login root remotamente? [Y/n] <-- ENTER
... Sucesso!
Por padrão, o MariaDB vem com um banco de dados chamado 'teste' 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
terão efeito imediatamente.
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 MariaDB!
[root@server1 tmp]#Agora configuramos o phpMyAdmin. Mudamos a configuração do Apache para que o phpMyAdmin permita conexões não apenas de localhost (comentando as duas linhas “Require ip” e adicionando a nova linha “Require all granted” na seção
nano /etc/httpd/conf.d/phpMyAdmin.conf# phpMyAdmin - Navegador MySQL baseado na web escrito em php
#
# Permite apenas localhost por padrão
#
# Mas permitir phpMyAdmin para qualquer um além de localhost deve ser considerado
# perigoso, a menos que devidamente protegido por SSL
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
# Apache 2.4
# Require ip 127.0.0.1
# Require ip ::1
Require all granted
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
Em seguida, mudamos a autenticação no phpMyAdmin de cookie para http:
nano /etc/phpMyAdmin/config.inc.php[...]
/* Tipo de autenticação */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]Então criamos os links de inicialização do sistema para o Apache e o iniciamos:
systemctl enable httpd.service
systemctl restart httpd.serviceAgora você pode direcionar seu navegador para http://server1.example.com/phpmyadmin/ ou http://192.168.0.100/phpmyadmin/ e fazer login com o nome de usuário root e sua nova senha root do MySQL.
14 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-mysqlEdite o arquivo de configuração freshclam /etc/freshclam.conf
nano /etc/freshclam.confe comente a linha “Exemplo”
[....]
# Exemplo
[....]Em seguida, iniciamos freshclam, amavisd e clamd.amavisd:
sa-update
freshclam
systemctl enable amavisd.service15 Instalando Apache2 Com mod_php, mod_fcgi/PHP5, PHP-FPM E suPHP
ISPConfig 3 permite que você use mod_php, mod_fcgi/PHP5, cgi/PHP5 e suPHP com base em cada site.
Podemos instalar o Apache2 com mod_php5, mod_fcgid e PHP5 da seguinte forma:
yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel php-fpmEm 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), definimos o fuso horário e descomentamos cgi.fix_pathinfo=1:
[...]
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
[...]
; 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, consulte 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=1
[...]
date.timezone = 'Europe/Berlin'
[...]Em seguida, instalamos o suPHP (existe um pacote mod_suphp disponível nos repositórios, mas infelizmente não é compatível com o ISPConfig, portanto, temos que compilar o suPHP nós mesmos):
cd /usr/local/src
wget http://suphp.org/download/suphp-0.7.2.tar.gz
tar zxvf suphp-0.7.2.tar.gzO CentOS 7 usa apache-2.4, então precisamos de um patch para o suphp antes de podermos compilá-lo contra o Apache. O patch é aplicado assim:
wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch
patch -Np1 -d suphp-0.7.2 < suphp.patch
cd suphp-0.7.2
autoreconf -if[root@server1 suphp-0.7.2]# autoreconf -if
libtoolize: colocando arquivos auxiliares em AC_CONFIG_AUX_DIR, config.
libtoolize: copiando arquivo config/ltmain.sh
libtoolize: Considere adicionar AC_CONFIG_MACRO_DIR([m4]) a configure.ac e
libtoolize: rerun libtoolize, para manter os macros do libtool corretos na árvore.
libtoolize: Considere adicionar -I m4 a ACLOCAL_AMFLAGS em Makefile.am.
configure.ac:9: aviso: AM_INIT_AUTOMAKE: formas de dois e três argumentos estão obsoletas. Para mais informações, veja:
configure.ac:9: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation
configure.ac:24: instalando ‘config/config.guess’
configure.ac:24: instalando ‘config/config.sub’
configure.ac:9: instalando ‘config/install-sh’
configure.ac:9: instalando ‘config/missing’
src/Makefile.am: instalando ‘config/depcomp’
[root@server1 suphp-0.7.2]#
Ele aplicará o patch, agora podemos compilar a nova fonte da seguinte forma:
./configure --prefix=/usr/ --sysconfdir=/etc/ --with-apr=/usr/bin/apr-1-config --with-apache-user=apache --with-setid-mode=owner --with-logfile=/var/log/httpd/suphp_log
make
make installEm seguida, adicionamos o módulo suPHP à nossa configuração do Apache…
nano /etc/httpd/conf.d/suphp.confLoadModule suphp_module modules/mod_suphp.so… e criamos o arquivo /etc/suphp.conf da seguinte forma:
nano /etc/suphp.conf[global]
;Caminho para o arquivo de log
logfile=/var/log/httpd/suphp.log
;Nível de log
loglevel=info
;Usuário que o Apache está executando
webserver_user=apache
;Caminho onde todos os scripts devem estar
docroot=/
;Caminho para chroot() antes de executar o script
;chroot=/mychroot
; Opções de segurança
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
;Verificar se o script está dentro do DOCUMENT_ROOT
check_vhost_docroot=true
;Enviar mensagens de erro menores para o navegador
errors_to_browser=false
;Variável de ambiente PATH
env_path=/bin:/usr/bin
;Umask a ser definida, especificar em notação octal
umask=0077
; UID mínimo
min_uid=100
; GID mínimo
min_gid=100
[handlers]
;Manipulador para scripts php
x-httpd-suphp="php:/usr/bin/php-cgi"
;Manipulador para scripts CGI
x-suphp-cgi="execute:!self"Edite o arquivo /etc/httpd/conf.d/php.conf para habilitar a análise php apenas para phpmyadmin, roundcube e outros pacotes do sistema em /usr/share, mas não para sites em /var/www, pois o ISPConfig ativará o PHP para cada site individualmente.
nano /etc/httpd/conf.d/php.confmude as linhas:
SetHandler application/x-httpd-php
para:
SetHandler application/x-httpd-php
Para que o manipulador PHP esteja contido pela diretiva Directory.
Habilite httpd e PHP-FPM para iniciar na inicialização e inicie o serviço PHP-FPM.
systemctl start php-fpm.service
systemctl enable php-fpm.service
systemctl enable httpd.serviceFinalmente, reinicie o Apache:
systemctl restart httpd.service15.1 Instalação do mod_python
O módulo apache mod_python não está disponível como pacote RPM, portanto, o compilaremos a partir da fonte. O primeiro passo é instalar os arquivos de desenvolvimento do python e baixar a versão atual do mod_python como arquivo tar.gz
yum -y install python-develcd /usr/local/src/
wget http://dist.modpython.org/dist/mod_python-3.5.0.tgz
tar xfz mod_python-3.5.0.tgz
cd mod_python-3.5.0e então configurar e compilar o módulo
./configure
make
make installe habilitar o módulo no apache
echo 'LoadModule python_module modules/mod_python.so' > /etc/httpd/conf.modules.d/10-python.conf
systemctl restart httpd.service 16 Instalar PureFTPd
PureFTPd pode ser instalado com o seguinte comando:
yum -y install pure-ftpdEm seguida, crie os links de inicialização do sistema e inicie o PureFTPd:
systemctl enable pure-ftpd.service
systemctl start pure-ftpd.serviceAgora 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.
OpenSSL é necessário pelo TLS; para instalar o OpenSSL, simplesmente executamos:
yum install opensslAbra /etc/pure-ftpd/pure-ftpd.conf…
vi /etc/pure-ftpd/pure-ftpd.confSe você quiser permitir sessões FTP e TLS, defina TLS como 1:
[...]
# Esta opção pode aceitar três valores :
# 0 : desabilitar a camada de criptografia SSL/TLS (padrão).
# 1 : aceitar tanto sessões tradicionais quanto criptografadas.
# 2 : recusar conexões que não utilizem mecanismos de segurança SSL/TLS,
# incluindo sessões anônimas.
# Não descomente isso cegamente. Certifique-se de que :
# 1) Seu servidor foi compilado com suporte a SSL/TLS (--with-tls),
# 2) Um certificado válido está em vigor,
# 3) Apenas clientes compatíveis farão login.
TLS 1
[...]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.pemNome do País (código de 2 letras) [XX]: <– Digite o Nome do seu País (por exemplo, “DE”).
Nome do Estado ou Província (nome completo) []: <– Digite o Nome do seu Estado ou Província.
Nome da Localidade (por exemplo, cidade) [Cidade Padrão]: <– Digite sua Cidade.
Nome da Organização (por exemplo, empresa) [Empresa Padrão 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 ou o nome do host do seu servidor) []: <– Digite o Nome de Domínio Totalmente Qualificado do sistema (por exemplo, “server1.example.com”).
Endereço de E-mail []: <– Digite seu Endereço de E-mail.
Mude as permissões do certificado SSL:
chmod 600 /etc/ssl/private/pure-ftpd.pemFinalmente, reinicie o PureFTPd:
systemctl restart pure-ftpd.serviceÉ isso. Agora você pode tentar se conectar usando seu cliente FTP; no entanto, você deve configurar seu cliente FTP para usar TLS.
17 Instalar BIND
Podemos instalar o BIND da seguinte forma:
yum -y install bind bind-utilsFaça um backup do arquivo existente /etc/named.conf e crie um novo da seguinte forma:
cp /etc/named.conf /etc/named.conf_bak
cat /dev/null > /etc/named.conf
nano /etc/named.conf// named.conf\
//\
// Fornecido pelo pacote bind do Red Hat para configurar o ISC BIND named(8) DNS\
// servidor como um servidor de nomes apenas em cache (como um resolvedor DNS localhost apenas).\
//\
// Veja /usr/share/doc/bind*/sample/ para arquivos de configuração nomeados de exemplo.\
//\
options {\
listen-on port 53 { any; };\
listen-on-v6 port 53 { any; };\
directory "/var/named";\
dump-file "/var/named/data/cache_dump.db";\
statistics-file "/var/named/data/named_stats.txt";\
memstatistics-file "/var/named/data/named_mem_stats.txt";\
allow-query { any; };\
allow-recursion {"none";};\
recursion no;\
};\
logging {\
channel default_debug {\
file "data/named.run";\
severity dynamic;\
};\
};\
zone "." IN {\
type hint;\
file "named.ca";\
};\
include "/etc/named.conf.local";Crie o arquivo /etc/named.conf.local que é incluído no final de /etc/named.conf (/etc/named.conf.local será posteriormente preenchido pelo ISPConfig se você criar zonas DNS no ISPConfig):
touch /etc/named.conf.localEm seguida, criamos os links de inicialização e iniciamos o BIND:
systemctl enable named.service
systemctl start named.service18 Instalar Webalizer e AWStats
Webalizer e AWStats podem ser instalados da seguinte forma:
yum -y install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder19 Instalar Jailkit
Jailkit é usado para chroot usuários SSH e cronjobs. Pode ser instalado da seguinte forma (importante: Jailkit deve ser instalado antes do ISPConfig - não pode ser instalado depois!):
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
tar xvfz jailkit-2.17.tar.gz
cd jailkit-2.17
./configure
make
make install
cd ..
rm -rf jailkit-2.17*20 Instalar fail2ban
Isso é opcional, mas recomendado, porque o monitor do ISPConfig tenta mostrar o log:
yum -y install fail2banEm seguida, crie os links de inicialização do sistema para o fail2ban e inicie-o:
systemctl enable fail2ban.service
systemctl start fail2ban.service21 Instalar rkhunter
rkhunter pode ser instalado da seguinte forma:
yum -y install rkhunter22 Instalar Mailman
Desde a versão 3.0.4, 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:
yum -y install mailmanAntes de podermos iniciar o Mailman, uma primeira lista de discussão chamada mailman deve ser criada:
touch /var/lib/mailman/data/aliases
/usr/lib/mailman/bin/newlist mailman[root@server1 tmp]# /usr/lib/mailman/bin/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: “|/usr/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/usr/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/usr/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/usr/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/usr/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/usr/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/usr/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/usr/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/usr/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/usr/lib/mailman/mail/mailman unsubscribe mailman”
Pressione enter para notificar o proprietário do mailman… <– ENTER
[root@server1 tmp]#
Abra /etc/aliases depois…
vi /etc/aliases… e adicione as seguintes linhas:
[...]
mailman: "|/usr/lib/mailman/mail/mailman post mailman"
mailman-admin: "|/usr/lib/mailman/mail/mailman admin mailman"
mailman-bounces: "|/usr/lib/mailman/mail/mailman bounces mailman"
mailman-confirm: "|/usr/lib/mailman/mail/mailman confirm mailman"
mailman-join: "|/usr/lib/mailman/mail/mailman join mailman"
mailman-leave: "|/usr/lib/mailman/mail/mailman leave mailman"
mailman-owner: "|/usr/lib/mailman/mail/mailman owner mailman"
mailman-request: "|/usr/lib/mailman/mail/mailman request mailman"
mailman-subscribe: "|/usr/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe: "|/usr/lib/mailman/mail/mailman unsubscribe mailman"Execute
newaliasese reinicie o Postfix:
systemctl restart postfix.serviceAgora abra o arquivo de configuração do Apache do Mailman /etc/httpd/conf.d/mailman.conf…
nano /etc/httpd/conf.d/mailman.conf… e adicione a linha ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/. Comente a linha Alias /pipermail/ /var/lib/mailman/archives/public/ e adicione a linha Alias /pipermail /var/lib/mailman/archives/public/:
#
# configurações de configuração httpd para uso com mailman.
#
ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
#Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /pipermail /var/lib/mailman/archives/public/
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AddDefaultCharset Off
# Descomente a linha a seguir, para redirecionar consultas para /mailman para a
# página listinfo (recomendado).
# RedirectMatch ^/mailman[/]*$ /mailman/listinfoReinicie o Apache:
systemctl restart httpd.serviceCrie os links de inicialização do sistema para o Mailman e inicie-o:
systemctl enable mailman.service
systemctl start mailman.serviceDepois de instalar o ISPConfig 3, você pode acessar o Mailman da seguinte forma:
Você pode usar o alias /cgi-bin/mailman para todos os vhosts do Apache (por favor, note que suExec e CGI devem ser desativados para todos os vhosts dos quais você deseja acessar o Mailman!), o que significa que você pode acessar a interface de administração do Mailman para uma lista em http://
Em http://
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.