Servidor · 13 min read · Nov 02, 2025

O Servidor Perfeito CentOS 7.3 com Apache, Postfix, Dovecot, Pure-FTPD, BIND e ISPConfig 3.1 - Página 2

7 Instalar Dovecot

Dovecot pode ser instalado da seguinte forma:

yum -y install dovecot dovecot-mysql dovecot-pigeonhole

Crie um arquivo dovecot-sql.conf vazio e crie links simbólicos:

touch /etc/dovecot/dovecot-sql.conf  
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf  
ln -s /etc/dovecot/dovecot.conf /etc/dovecot.conf

Agora crie os links de inicialização do sistema e inicie o Dovecot:

systemctl enable dovecot  
systemctl start dovecot

8 Instalar Postfix

Postfix pode ser instalado da seguinte forma:

yum -y install postfix

Em seguida, desative o Sendmail e inicie o Postfix e o MariaDB (MySQL):

systemctl enable mariadb.service  
systemctl start mariadb.service
systemctl stop sendmail.service  
systemctl disable sendmail.service  
systemctl enable postfix.service  
systemctl restart postfix.service

Desativamos 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.

9 Instalar Getmail

Getmail pode ser instalado da seguinte forma:

yum -y install getmail

10 Definir Senhas do MySQL e Configurar o phpMyAdmin

Defina senhas para a conta root do MySQL:

mysql_secure_installation
[root@server1 tmp]# mysql_secure_installation  
  
  NOTE: 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 garantir sua segurança, 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 nenhum):  
OK, senha usada com sucesso, prosseguindo...
Definir a senha root garante que ninguém possa fazer login no usuário root do MariaDB  
sans a devida autorização.  
Definir senha root? [Y/n] <-- ENTER  
Nova senha: <-- yourrootsqlpassword  
Reinsira a nova senha: <-- yourrootsqlpassword  
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  
faca 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, o root deve ser permitido apenas para conectar-se  
de 'localhost'.  Isso  
garante que alguém não possa adivinhar a senha root  
do rede.  
Desabilitar login root remotamente? [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  
sobre o 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  
deve agora estar segura.  

Obrigado por usar o 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 a 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.service

Agora você pode direcionar seu navegador para http://server1.example.com/phpmyadmin/ ou http://192.168.1.100/phpmyadmin/ e fazer login com o nome de usuário root e sua nova senha root do MySQL.

11 Instalar Amavisd-new, SpamAssassin, ClamAV e Postgrey

Para instalar amavisd-new, SpamAssassin e ClamAV, execute o seguinte comando:

yum -y install amavisd-new spamassassin clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd unzip bzip2 perl-DBD-mysql postgrey re2c

Edite o arquivo de configuração freshclam /etc/freshclam.conf

nano /etc/freshclam.conf

e comente a linha “Exemplo”

[....]  
# Exemplo  
[....]

Para habilitar atualizações automáticas de assinatura do ClamAV com freshclam, edite o arquivo /etc/sysconfig/freshclam:

nano /etc/sysconfig/freshclam

e coloque um # na frente da última linha para que fique assim:

# FRESHCLAM_DELAY=disabled-warn # REMOVE ME

Em seguida, iniciamos freshclam, amavisd e clamd.amavisd:

sa-update  
freshclam  
systemctl enable amavisd.service  
systemctl start amavisd.service  
systemctl start [email protected]  
systemctl enable postgrey.service  
systemctl start postgrey.service

12 Instalando Apache com mod_php, mod_fcgi/PHP5, PHP-FPM

ISPConfig 3 permite que você use mod_php, mod_fcgi/PHP, cgi/PHP e PHP-FPM em uma base por site.

Podemos instalar o Apache2 com mod_php5, mod_fcgid e PHP 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-fpm wget

Em seguida, abrimos /etc/php.ini…

nano /etc/php.ini

… e mudamos a configuração de relatórios de erro (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 & ~E_STRICT
[...]
; cgi.fix_pathinfo fornece suporte *real* para PATH_INFO/PATH_TRANSLATED para CGI.  PHP's
; comportamento anterior 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'
[...]

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.service

Finalmente, reiniciamos o Apache:

systemctl restart httpd.service

Agora adicionaremos suporte para Let’s encrypt.

mkdir /opt/certbot  
cd /opt/certbot  
wget https://dl.eff.org/certbot-auto  
chmod a+x ./certbot-auto

Agora execute o comando certboot-auto que fará o download e instalará o software e suas dependências.

./certbot-auto

O comando então dirá que “nenhum nome foi encontrado em seus arquivos de configuração” e pergunta se deve continuar, por favor escolha “c” para cancelar aqui, pois os certificados serão criados pelo ispconfig.

13 Instalação do mod_python

O módulo apache mod_python não está disponível como pacote RPM, portanto, iremos compilá-lo a partir do código-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-devel
cd /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.0

e então configurar e compilar o módulo.

./configure  
make

Há um erro no módulo compilado que fará com que a instalação falhe com o erro “ version = “fatal: Not a git repository (or any of the parent directories): .git “. Para corrigir isso, execute este comando sed (o comando é uma linha!).

sed -e 's/(git describe --always)/(git describe --always 2>\/dev\/null)/g' -e 's/`git describe --always`/`git describe --always 2>\/dev\/null`/g' -i $( find . -type f -name Makefile\* -o -name version.sh )

Em seguida, instale o módulo com este comando.

make install

e habilite 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

14 Instalar PureFTPd

PureFTPd pode ser instalado com o seguinte comando:

yum -y install pure-ftpd

Em seguida, crie os links de inicialização do sistema e inicie o PureFTPd:

systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

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.

OpenSSL é necessário pelo TLS; para instalar o OpenSSL, simplesmente executamos:

yum install openssl

Abra /etc/pure-ftpd/pure-ftpd.conf…

nano /etc/pure-ftpd/pure-ftpd.conf

Se você quiser permitir sessões FTP e TLS, defina TLS como 1 removendo o # na frente da linha TLS. É altamente recomendável habilitar TLS.

[...]
# 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.pem

Nome 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 Ltda]: <– 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.

Altere as permissões do certificado SSL:

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

Finalmente, 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.

15 Instalar BIND

Podemos instalar o BIND da seguinte forma:

yum -y install bind bind-utils haveged

Faç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 da 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.local

Em seguida, criamos os links de inicialização e iniciamos o BIND:

systemctl enable named.service  
systemctl start named.service  
systemctl enable haveged.service  
systemctl start haveged.service

16 Instalar Webalizer e AWStats

AWStats pode ser instalado da seguinte forma:

yum -y install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder

Edite o arquivo /etc/httpd/conf.d/awstats.conf:

nano /etc/httpd/conf.d/awstats.conf

e mude a linha:

Require local

para:

Require all granted

E reinicie o apache:

systemctl restart httpd.service

17 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.19.tar.gz  
tar xvfz jailkit-2.19.tar.gz  
cd jailkit-2.19  
./configure  
make  
make install  
cd ..  
rm -rf jailkit-2.19*

18 Instalar Fail2Ban

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

yum -y install iptables-services fail2ban fail2ban-systemd  
systemctl stop firewalld.service  
systemctl mask firewalld.service  
systemctl disable firewalld.service  
systemctl stop firewalld.service

Em seguida, criamos o arquivo /etc/fail2ban/jail.local e habilitamos o monitoramento para ssh, email e serviço ftp.

nano /etc/fail2ban/jail.local

Adicione o seguinte conteúdo ao arquivo jail.local:

[sshd]  
enabled = true  
action = iptables[name=sshd, port=ssh, protocol=tcp]  
  
[pure-ftpd]  
enabled = true  
action = iptables[name=FTP, port=ftp, protocol=tcp]  
maxretry = 3  
  
[dovecot]  
enabled = true  
action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp]  
maxretry = 5  
  
[postfix-sasl]  
enabled = true  
action = iptables-multiport[name=postfix-sasl, port="smtp,smtps,submission", protocol=tcp]  
maxretry = 3

Em seguida, crie os links de inicialização do sistema para o fail2ban e inicie-o:

mkdir /var/run/fail2ban  
systemctl enable fail2ban.service  
systemctl start fail2ban.service

19 Instalar rkhunter

rkhunter pode ser instalado da seguinte forma:

yum -y install rkhunter

20 Instalar Mailman

Se você deseja gerenciar listas de discussão com o Mailman em seu servidor, instale o mailman agora. O Mailman é suportado pelo ISPConfig, portanto, você poderá criar novas listas de discussão através do ISPConfig mais tarde.

yum -y install mailman

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

touch /var/lib/mailman/data/aliases  
postmap /var/lib/mailman/data/aliases  
/usr/lib/mailman/bin/newlist mailman  
ln -s /usr/lib/mailman/mail/mailman /usr/bin/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…

nano /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

newaliases

e reinicie o Postfix:

systemctl restart postfix.service

Agora 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 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/listinfo

Reinicie o Apache:

systemctl restart httpd.service

Crie os links de inicialização do sistema para o Mailman e inicie-o:

systemctl enable mailman.service  
systemctl start mailman.service

Depois 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:///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 da lista de discussão.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.