Servidor Perfecto · 8 min read · Jan 27, 2026

El Servidor Perfecto - OpenSUSE 13.1 x86_64 (Apache2, MySQL, PHP, Postfix, Dovecot e ISPConfig 3) - Página 4

8 Instalar Postfix, Dovecot, MySQL

Ejecuta

zypper install postfix postfix-mysql mysql-community-server libmysqlclient-devel dovecot21 dovecot21-backend-mysql pwgen cron python

Si recibes el siguiente mensaje, selecciona desinstalar exim:

Problema: sendmail-8.14.5-85.1.2.x86_64 entra en conflicto con postfix proporcionado por postfix-2.9.6-1.2.1.x86_64
Solución 1: Se realizarán las siguientes acciones:
no instalar postfix-2.9.6-1.2.1.x86_64
no instalar postfix-mysql-2.9.6-1.2.1.x86_64
Solución 2: desinstalación de sendmail-8.14.5-85.1.2.x86_64

Elige entre las soluciones anteriores por número o cancela [1/2/c] (c): <– 2

Crea el siguiente enlace simbólico:

ln -s /usr/lib64/dovecot/modules /usr/lib/dovecot

En este punto tuve que reiniciar porque de lo contrario MySQL se negaba a iniciar con el error:

Failed to issue method call: Unit mysql.service failed to load: No such file or directory. See system logs and 'systemctl status mysql.service' for details.
reboot

Abre el archivo de configuración de MySQL /etc/my.cnf con un editor

vi /etc/my.cnf

y cambia la línea “ sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES “ a:

sql_mode=NO_ENGINE_SUBSTITUTION

Luego abre el archivo /usr/my.cnf con un editor

vi /usr/my.cnf

y cambia el modo sql a

sql_mode=NO_ENGINE_SUBSTITUTION

aquí también.

Inicia MySQL, Postfix y Dovecot y habilita los servicios para que se inicien al arrancar.

systemctl enable mysql.service  
systemctl start mysql.service
systemctl enable postfix.service  
systemctl start postfix.service
systemctl enable dovecot.service  
systemctl start dovecot.service

Ahora instalo el paquete getmail:

zypper install getmail

Para asegurar la instalación de MySQL, ejecuta:

mysql_secure_installation

Ahora se te harán varias preguntas:

server1:~ # mysql_secure_installation

NOTA: SE RECOMIENDA EJECUTAR TODAS LAS PARTES DE ESTE SCRIPT PARA TODOS LOS SERVIDORES MySQL EN USO EN PRODUCCIÓN! POR FAVOR LEE CUIDADOSAMENTE CADA PASO!

Para iniciar sesión en MySQL y asegurarla, necesitaremos la contraseña actual para el usuario root. Si acabas de instalar MySQL, y no has configurado la contraseña de root aún, la contraseña estará en blanco, así que solo debes presionar enter aquí.

Ingresa la contraseña actual para root (presiona enter si no hay): <– ENTER
OK, se utilizó la contraseña correctamente, continuando…

Configurar la contraseña de root asegura que nadie pueda iniciar sesión en el usuario root de MySQL sin la autorización adecuada.

¿Establecer contraseña de root? [Y/n] <– Y
Nueva contraseña: <– tucontraseñaderootsql
Reingresa nueva contraseña: <– tucontraseñaderootsql
¡Contraseña actualizada con éxito!
Recargando tablas de privilegios..
… ¡Éxito!

Por defecto, una instalación de MySQL tiene un usuario anónimo, permitiendo que cualquiera inicie sesión en MySQL sin tener que tener una cuenta de usuario creada para ellos. Esto está destinado solo para pruebas, y para hacer que la instalación sea un poco más fluida. Debes eliminarlos antes de pasar a un entorno de producción.

¿Eliminar usuarios anónimos? [Y/n] <– Y
… ¡Éxito!

Normalmente, solo se debería permitir que root se conecte desde ‘localhost’. Esto asegura que alguien no pueda adivinar la contraseña de root desde la red.

¿Deshabilitar el inicio de sesión remoto de root? [Y/n] <– Y
… ¡Éxito!

Por defecto, MySQL viene con una base de datos llamada ‘test’ a la que cualquiera puede acceder. Esto también está destinado solo para pruebas, y debe ser eliminado antes de pasar a un entorno de producción.

¿Eliminar la base de datos de prueba y el acceso a ella? [Y/n] <– Y

  • Eliminando base de datos de prueba…
    … ¡Éxito!
  • Eliminando privilegios sobre la base de datos de prueba…
    … ¡Éxito!

Recargar las tablas de privilegios asegurará que todos los cambios realizados hasta ahora tengan efecto inmediato.

¿Recargar tablas de privilegios ahora? [Y/n] <– Y
… ¡Éxito!

Limpiando…

¡Todo listo! Si has completado todos los pasos anteriores, tu instalación de MySQL debería estar ahora segura.

¡Gracias por usar MySQL!

server1:~ #

Ahora tu configuración de MySQL debería estar asegurada.

9 Amavisd-new, Spamassassin y Clamav

Instala Amavisd-new, Spamassassin y el antivirus Clamav. Ejecuta

zypper install amavisd-new clamav clamav-db zoo unzip unrar bzip2 unarj perl-DBD-mysql

Abre /etc/amavisd.conf…

vi /etc/amavisd.conf

… y agrega la línea $myhostname con tu nombre de host correcto debajo de la línea $mydomain:

| [...] $mydomain = 'example.com'; # un valor predeterminado conveniente para otras configuraciones $myhostname = "server1.$mydomain"; [...] |

Luego crea un enlace simbólico de /var/run/clamav/clamd a /var/lib/clamav/clamd-socket:

mkdir -p /var/run/clamav  
ln -s /var/lib/clamav/clamd-socket /var/run/clamav/clamd

OpenSUSE 13.1 tiene un directorio /run para almacenar datos en tiempo de ejecución. /run es ahora un tmpfs, y /var/run ahora está montado en enlace a /run desde tmpfs, y por lo tanto se vacía al reiniciar.

Esto significa que después de un reinicio, el directorio /var/run/clamav que acabamos de crear ya no existirá, y por lo tanto clamd fallará al iniciar. Por lo tanto, creamos el archivo /etc/tmpfiles.d/clamav.conf ahora que creará este directorio al inicio del sistema (ver http://0pointer.de/public/systemd-man/tmpfiles.d.html para más detalles):

vi /etc/tmpfiles.d/clamav.conf

| D /var/run/clamav 0755 root root - |

Antes de iniciar amavisd y clamd, debemos editar el script de inicio /etc/init.d/amavis - no pude iniciar, detener y reiniciar amavisd de manera confiable con el script de inicio predeterminado:

vi /etc/init.d/amavis

Comenta las siguientes líneas en la sección de inicio y detención:

| [...] start) # ZMI 20100428 verificar archivo pid obsoleto #if test -f $AMAVIS_PID ; then # checkproc -p $AMAVIS_PID amavisd # if test $? -ge 1 ; then # # archivo pid está obsoleto, eliminarlo # echo -n "(archivo pid obsoleto de amavisd $AMAVIS_PID encontrado, eliminando. ¿Se estrelló amavisd?)" # rm -f $AMAVIS_PID # fi #fi echo -n "Iniciando escáner de virus (amavisd-new): " $AMAVISD_BIN start #if ! checkproc amavisd; then # rc_failed 7 #fi rc_status -v #if [ "$AMAVIS_SENDMAIL_MILTER" == "yes" ]; then # rc_reset # echo -n "Iniciando amavis-milter:" # startproc -u vscan $AMAVIS_MILTER_BIN -p $AMAVIS_MILTER_SOCK > /dev/null 2>&1 # rc_status -v #fi ;; stop) echo -n "Apagando escáner de virus (amavisd-new): " #if checkproc amavisd; then # rc_reset $AMAVISD_BIN stop #else # rc_reset #fi rc_status -v #if [ "$AMAVIS_SENDMAIL_MILTER" == "yes" ]; then # rc_reset # echo -n "Apagando amavis-milter: " # killproc -TERM $AMAVIS_MILTER_BIN # rc_status -v #fi ;; [...] |

Debido a que hemos cambiado el script de inicio, debemos ejecutar

systemctl --system daemon-reload

hora.

Para iniciar clamav necesitamos descargar la base de datos y proceder con el comando

freshclam

Nota: Toma mucho tiempo descargar la base de datos, se te aconseja no interrumpir y no detener el servicio de actualización freshclam en medio.

Para habilitar los servicios, ejecuta:

systemctl enable amavis.service  
systemctl enable clamd.service  
systemctl start amavis.service  
systemctl start clamd.service

10 Instalar el servidor web Apache 2 con PHP5, Ruby, Python, WebDAV

Instala Apache2 y suphp. Ejecuta:

zypper install apache2 apache2-mod_fcgid

Instala PHP5:

zypper install php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mysql php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl apache2-mod_php5
zypper install http://download.opensuse.org/repositories/server:/php/openSUSE_13.1/x86_64/suphp-0.7.1-5.3.x86_64.rpm

Luego ejecuta estos comandos para habilitar los módulos de Apache (incluyendo WebDAV):

a2enmod socache_shmcb
a2enmod suexec  
a2enmod rewrite  
a2enmod ssl  
a2enmod actions  
a2enmod suphp  
a2enmod fcgid  
a2enmod dav  
a2enmod dav_fs  
a2enmod dav_lock  
a2enmod logio  
chown root:www /usr/sbin/suexec2  
chmod 4755 /usr/sbin/suexec2
a2enflag SSL

Para agregar soporte para Python, ejecuta:

zypper --gpg-auto-import-keys addrepo --name "Soporte de Python (Apache_openSUSE_13.1)" http://download.opensuse.org/repositories/Apache:/Modules/openSUSE_13.1/  apache-Modules
zypper install apache2-mod_python
a2enmod python

A continuación, instalamos phpMyAdmin:

zypper install phpMyAdmin

Para asegurarnos de que podamos acceder a phpMyAdmin desde todos los sitios web creados a través de ISPConfig más tarde usando /phpmyadmin (por ejemplo, http://www.example.com/phpmyadmin) y /phpMyAdmin (por ejemplo, http://www.example.com/phpMyAdmin), abre /etc/apache2/conf.d/phpMyAdmin.conf…

vi /etc/apache2/conf.d/phpMyAdmin.conf

… y agrega los siguientes dos alias justo al principio:

| Alias /phpMyAdmin /srv/www/htdocs/phpMyAdmin Alias /phpmyadmin /srv/www/htdocs/phpMyAdmin [...] |

Antes de iniciar apache, necesitamos seguir el enlace y hacer cambios en httpd.conf

vi /etc/apache2/httpd.conf

Comenta estas líneas y agrega estas líneas

#  
#    Options None  
#    AllowOverride None  
#    Order deny,allow  
#   Deny from all  
#  
  
  
Options None  
AllowOverride None  
Require all denied  

Ahora inicia el servicio de Apache

systemctl enable apache2.service  
systemctl start apache2.service

10.1 PHP-FPM

A partir de ISPConfig 3.0.5, hay un modo PHP adicional que puedes seleccionar para usar con Apache: PHP-FPM.

Para usar PHP-FPM con Apache, necesitamos el módulo mod_fastcgi de Apache (por favor, no lo confundas con mod_fcgid - son muy similares, pero no puedes usar PHP-FPM con mod_fcgid). Podemos instalar PHP-FPM y mod_fastcgi de la siguiente manera:

mod_fastcgi está disponible desde un repositorio de terceros que podemos habilitar de la siguiente manera:

A continuación, instalamos Fastcgi y PHP-FPM:

zypper install fastcgi php5-fpm

Ahora descarga e instala mod_fastcgi:

cd /tmp  
wget http://download.opensuse.org/repositories/home:/munix9/openSUSE_13.1/x86_64/apache2-mod_fastcgi-2.4.7_SNAP_0910052141-3.1.x86_64.rpm  
rpm -i apache2-mod_fastcgi-2.4.7_SNAP_0910052141-3.1.x86_64.rpm  
a2enmod mod_fastcgi

Antes de iniciar PHP-FPM, renombra /etc/php5/fpm/php-fpm.conf.default a /etc/php5/fpm/php-fpm.conf:

mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

Cambia los permisos del directorio de sesiones de PHP:

chmod 1733 /var/lib/php5

Luego abre /etc/php5/fpm/php-fpm.conf…

vi /etc/php5/fpm/php-fpm.conf

… y cambia error_log a /var/log/php-fpm.log:

| [...] error_log = /var/log/php-fpm.log [...] |

No hay archivo php.ini para PHP-FPM bajo OpenSUSE 13.1, por lo tanto, copiamos el php.ini de CLI:

cp /etc/php5/cli/php.ini /etc/php5/fpm/

A continuación, abre /etc/php5/fpm/php.ini…

vi /etc/php5/fpm/php.ini

… y establece cgi.fix_pathinfo en 0:

| [...] ; cgi.fix_pathinfo proporciona soporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. El comportamiento anterior de PHP era establecer PATH_TRANSLATED en SCRIPT_FILENAME, y no entender lo que es PATH_INFO. Para más información sobre PATH_INFO, consulta las especificaciones de cgi. Establecer esto en 1 hará que PHP CGI corrija sus rutas para ajustarse a la especificación. Un valor de cero hace que PHP se comporte como antes. El valor predeterminado es 1. Debes corregir tus scripts para usar SCRIPT_FILENAME en lugar de PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

A continuación, crea los enlaces de inicio del sistema para php-fpm y inícialo:

systemctl enable php-fpm.service   
systemctl start php-fpm.service

PHP-FPM es un proceso demonio que ejecuta un servidor FastCGI en el puerto 9000, como puedes ver en la salida de

netstat -tapn
server1:~ # netstat -tapn  
Conexiones de Internet activas (servidores y establecidas)  
Proto Recv-Q Send-Q Dirección Local           Dirección Extranjera         Estado       PID/Nombre del Programa  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2329/nginx  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1204/sshd  
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      2511/php-fpm.conf)  
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2059/mysqld  
tcp        0      0 192.168.0.100:22        192.168.0.199:1632      ESTABLISHED 1284/0  
tcp        0      0 :::22                    :::*                     LISTEN      1204/sshd  
server1:~ #

A continuación, habilita los siguientes módulos de Apache…

a2enmod actions  
a2enmod fastcgi  
a2enmod alias

… y reinicia Apache:

systemctl restart apache2.service
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.