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 pythonSi 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/dovecotEn 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.rebootAbre el archivo de configuración de MySQL /etc/my.cnf con un editor
vi /etc/my.cnfy cambia la línea “ sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES “ a:
sql_mode=NO_ENGINE_SUBSTITUTIONLuego abre el archivo /usr/my.cnf con un editor
vi /usr/my.cnfy cambia el modo sql a
sql_mode=NO_ENGINE_SUBSTITUTIONaquí también.
Inicia MySQL, Postfix y Dovecot y habilita los servicios para que se inicien al arrancar.
systemctl enable mysql.service
systemctl start mysql.servicesystemctl enable postfix.service
systemctl start postfix.servicesystemctl enable dovecot.service
systemctl start dovecot.serviceAhora instalo el paquete getmail:
zypper install getmailPara asegurar la instalación de MySQL, ejecuta:
mysql_secure_installationAhora 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-mysqlAbre /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/clamdOpenSUSE 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/amavisComenta 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-reloadhora.
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.service10 Instalar el servidor web Apache 2 con PHP5, Ruby, Python, WebDAV
Instala Apache2 y suphp. Ejecuta:
zypper install apache2 apache2-mod_fcgidInstala 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_php5zypper install http://download.opensuse.org/repositories/server:/php/openSUSE_13.1/x86_64/suphp-0.7.1-5.3.x86_64.rpmLuego ejecuta estos comandos para habilitar los módulos de Apache (incluyendo WebDAV):
a2enmod socache_shmcba2enmod 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/suexec2a2enflag SSLPara 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-Moduleszypper install apache2-mod_pythona2enmod pythonA continuación, instalamos phpMyAdmin:
zypper install phpMyAdminPara 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.service10.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-fpmAhora 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_fastcgiAntes 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.confCambia los permisos del directorio de sesiones de PHP:
chmod 1733 /var/lib/php5Luego 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.servicePHP-FPM es un proceso demonio que ejecuta un servidor FastCGI en el puerto 9000, como puedes ver en la salida de
netstat -tapnserver1:~ # 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.serviceRecibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.