DirectAdmin
Directadmin es un panel de control para hosting. Tiene protección de precios, para no hacer lo que están haciendo los propietarios de cPanel, WHMCS, subiendo los precios día si, día también.
"Protection against arbitrary price increases only. Does not apply to inflation, extraordinary world events, currency devaluation, etc. Does not apply to add-ons given as a free gift/bonus."
Lista del Canal YouTUbe :: Directadmin
- Your IP is blacklisted - DirectAdmin
- Upgrade de MySQL 5.7 a MySQL 8.0 - DirectAdmin
- Tips de Directadmin
- Como ejecutar tu acceso a mysql en un Directadmin sin usar root
- Desactivar el acceso público a PhpMyAdmin en Directadmin
- Tips rápidos de Directadmin
- ModSecurity en DirectAdmin
- DKIM, SPF y DMARC para el hostname de un servidor con Directadmin
- PHP en shell para usar wp cli en DirectAdmin
- Limpieza de mysql tras una migración: permisos de host antiguos
- Activar DKIM a todos los dominios de un servidor con Directadmin
- Mod Security. Desactivación global de reglas por path
- Reconstrucción del indice Full Text Search (FTS) en cuentas de correo :: Dovecot
- Cambio el doc root de un dominio en DirectAdmin
- Donde está la configuracion básica del servidor con Directadmin
- Cambios especificacos en el php.ini disable_functions por dominio
- Cuenta por defecto del usuario en Roundcube - Directadmin
- Puesta a punto
Your IP is blacklisted - DirectAdmin
Introducción
No siempre es el firewall quein nos bloquea. Ademas en este caso el mensaje es recibido en el navegador, que es un asunto diferente a un bloqueo (baneo por firewall) que no permite noi alcanzar la página de acceso (login)
Sintoma
Al intentar acceder a la página de acceso (login) recibimos el mensaje:
Your IP is blacklisted
Solución
La Ip estará en el fichero de la lista negra (blacklist) y debemos eliminarlo de alli entrando por la consola SSH (shell) y deberemos eliminarlo con nuestr editor favorito
/usr/local/directadmin/data/admin/ip_blacklist
IP fijas añadidas a la lista blanca (whitelist)
Tambien podemos añadir la IP de nuestra ip se esta es fija, añadiendo una IP por linea.
JAMAS debemos añadir IP dinámicas, a una sistema de listas blancas. Es el camino a ir haciendo menos seguro nuestro sistema.
/usr/local/directadmin/data/admin/ip_whitelist
Información adicional
La configruación de esta propiedad de DirectAdmin se encuentra en Admin Level -> Admin Settings -> Blacklist IPs for excessive login attempts
Upgrade de MySQL 5.7 a MySQL 8.0 - DirectAdmin
Introducción
Un cambio muy necesario (por más que se empeñen algunos) es la actualización a MySQL 8.0. Si seguimos interesados por seguir trabajando con MySQL, es necesario, ya que los cambios, la seguridad, y la eficacia del motor MySQL en la 8.0 supera con creces al viejo motor 5.7
Pero una de las cosas que nos trajo, las distintas bifurcaciones (forks) de MySQl (Percona, MariaDB, y otros) es que ya no son tan compatibles, o cuando menos existen ciertos cambios que nos traen de cabeza a los administradores de sistemas, sobre todo cuando nos centramos en el trabajo como desarrolladores.
Muchos desarrolladores no conocen en profundidad los sistemas, y eseo es fuente de problemas de mantenimiento y despliegue.
Escenario
El escenario de este artículo es:
Documentación original
La documentación original para actualizar MySQl 5.7 a MySQL 8.0 con Custom Builds, es How to upgrade mysql with custombuild 2.0
cd /usr/local/directadmin/custombuild
./build set mysql 8.0
./build set mysql_inst mysql
./build set mysql_backup yes
./build update
./build mysql
Mención importante es hacer un backup antes de nada, o bien tener la opción mysql_backup=yes
en el fichero /usr/local/directadmin/custombuild/options.conf
mediante el seteo ./build set mysql_backup yes
Posibles problemas y sus soluciones
Todo debería ir bien pero siempre podemos encontrarnos con algo que se escapo de las manos. Algo que alguien toco, algo que tocamos, algo modificado, que ha dejado la actualización con problemas de permisos, uno de los handicaps de este cambio junto con el de las variables de entorno de MySQL, relativas a ciertos cambios respecto de los valores por defecto, nulos, y otras cuestiones.
No funciona webmail ni PhpMyAdmin
Cuando pasa esto, no te lo esperas. Primero porque ves que puedes entrar perfectamente al panel de DirectAdmin de tu servidor, pero sin embargo te falla el acceso a estos sitios tan importantes.
El que ocurra esto es una pista muy importante porque demuestra que la autenticación está correcta, ya que ves el panel de control. Así pues, el problema está en algo que afecta a estas dos piezas.
Lo normal es que acudas a la reconstrucción (rebuild) de ambos elementos, pero eso no es sino una pérdida de tiempo, salvo que leamos un cierto detalle si hacemos caso de un tip habitual de DirectAdmin que pasa por la eliminación de la base de datos de rouncube y la instalación desde 0 de roundcube
mysql> DROP DATABASE da_roundcube;
Query OK, 15 rows affected (0.08 sec)
mysql> exit
Bye
root@server-xerintel01:/usr/local/directadmin/custombuild# ./build roundcube
Inserting data to mysql and creating database/user for roundcube...
Found MySQL version 8.0
Granting access: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX,REFERENCES ON da_roundcube.* TO 'da_roundcube'@'localhost';
Setting password: ALTER USER 'da_roundcube'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yuCf7CImtO5';
Database created, da_roundcube password is yuCf7CImtO5
Editing roundcube configuration...
Roundcube 1.4.11 has been installed successfully.
WARNING: Changed defaults (These config options have new default values):
- 'skin'
- 'smtp_port'
- 'smtp_user'
- 'smtp_pass'
- 'jquery_ui_skin_map'
Executing database schema update.
ERROR: SQLSTATE[HY000] [2054] Server sent charset unknown to the client. Please, report to the developers
ERROR: Failed to connect to database
El problema está en el juego de caracteres () por defecto no compatible así que mejor lo cambiamos en el fichero /etc/my.cnf
y hacemos un restart del servidor mysqld.
[mysqld]
…
# character-set-server=utf8mb4
character-set-server=utf8
Una vez reiniciado nuestro servidor mysql, tendremos tanto Roundcube como PHPMyAdmin operativos.
Otros problemas derivados de las variables de entorno
Es muy típico en estos upgrades o en los de MariaDB, encontrarnos con problemas derivados de los cambios de tratamiento de ciertos aspectos de estos servidores Bases de Datos, llamados Server SQL Modes y documentados de forma oficial en 5.1.11 Server SQL Modes
Son muy comunes: Los datos inválidos que antaño se soportaban en MySQL, convirtiendose en ‘0000-00-00’ Los ANSI_QUOTES El error de división por 0
Las soluciones para muchos programadores como norma general, serán la vía rápida y la vía rapidísima.
Vía rapidísima
Tras una búsqueda en Google, DuckduckGo que les llevará lectura en stackoverflow, haran un copy & paste y desactivaran TODO lo que ha avanzado MySQL en la protección y homogeneización del desarrollo de bases de datos SQL, y por supuesto de la optimización.
Es decir, desactivaran todo lo que dice el post, y como les funciona, pues ya está. Hasta otro día en el que por una migración, desastre, o lo que sea que haya modificado el comportamiento de MySQL, se repita. Por ende, ni siquiera estará anotado en los requerimientos del software, y con toda seguridad será un quebradero de cabeza para el administrador de sistemas que lidie con ello.
Vía rápida
En la misma búsqueda, vemos el tema, y tratamos de analizarlo. Bien, somos conscientes del problema, y buscamos las variables adecuadas al problema que deberemos cambiar.
Por ejemplo, tenemos problemas con datos nulos o incorrectos en un datetime.
“Incorrect date value: ‘0000-00-00’ for column ‘datsent’ at row 1”
La solución rápida pasaría por modificar los modos SQL a NO_ZERO_IN_DATE,NO_ZERO_DATE
Lo primero es guardar la configuración actual
mysql> SELECT @@GLOBAL.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Lo segundo es removerlo los modos relativos al problema en tiempo de ejecución
mysql> SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
mysql> SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Lo tercero es añadirlo al fichero my.cnf para que en el siguiente reinicio los valores esten de la forma deseada.
[mysqld]
sql_modes=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Por supuesto añadir a la documentación del proyecto la necesidad de que conservemos o tengamos esos modelos de SQL
Vía correcta
Lamentablemente los anteriores caminos no son sino un parche que tarde o temprano nos pasará factura, además de que suponen una mala praxis profesional, ya que la diferencia entre hacer las cosas bien y no hacerlas bien, es también tiempo, y el tiempo es dinero.
¿Qué es pues lo correcto?
Lo correcto es modificar lo que está incorrecto, que muchas veces no es mucho más complicado que una o dos horas de un programador junior.
No vamos a explicar el cómo, detalladamente pues las variantes son muchas, pero básicamente diremos que debemos actualizar las filas actuales de fechas a 0 a valores válidos (‘1970-01-02’ es un valor válido) o bien permitir que la columna tenga valores nulos.
Nota adicional sobre backups
Un caso muy doloroso, es cuando por razones de urgencia debemos migrar o restaurar nuestra base de datos en otro sistema (ejemplo, un incendio en nuestro centro de datos de OVH).
La solución pasa por una modificación temporal de los modos sql.
Error 1292 y Error 1217 fue un artículo que escribe hace tiempo a colofón de estos problemas
La cuestión es añadir al principio de nuestro fichero sql
/* Añadir al principio */
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS;
SET FOREIGN_KEY_CHECKS=0;
-- save current setting of sql_mode
SET @old_sql_mode := @@sql_mode ;
-- derive a new value by removing NO_ZERO_DATE and NO_ZERO_IN_DATE
SET @new_sql_mode := @old_sql_mode ;
SET @new_sql_mode := TRIM(BOTH ',' FROM REPLACE(CONCAT(',',@new_sql_mode,','),',NO_ZERO_DATE,' ,','));
SET @new_sql_mode := TRIM(BOTH ',' FROM REPLACE(CONCAT(',',@new_sql_mode,','),',NO_ZERO_IN_DATE,',','));
SET @@sql_mode := @new_sql_mode ;
Y al final
echo 'SET @@sql_mode := @old_sql_mode; ' >> dump.sql
echo ’SET @@FOREIGN_KEY_CHECKS := @OLD_FOREIGN_KEY_CHECKS; ‘>> dump.sql
Enlaces
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como esta, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Tips de Directadmin
Como ejecutar tu acceso a mysql en un Directadmin sin usar root
Introducción Mysql password en Directadmin
Muchos estamos habituados al uso de un .my.cnf
en nuestro usuario para acceder como root
a mysql.
En el caso de Directadmin la instalación por defecto no autroiza a root con el uso de sockets, si no que es una instalación personalizada, en la que el usuario que tiene privilegios globales se llama da_admin
y tiene su contraseña guardada en /usr/local/directadmin/conf/mysql.conf
Si no queremos añadir otro usuario y conservar este sistema, podemos usar este comando (o generar un alias para usarlo ;-) )
mysql -u da_admin -p$(grep 'passwd' /usr/local/directadmin/conf/mysql.conf | awk -F= '{print $2}')
Alternativa .my.cnf
La otra es la de siempre, si confias en ella que en realidad es mas segura que pasar un password por un script, que es editar el fichero /root/.my.cnf
[client]
user=da_admin
password=PasswordObtenidodelFecijeroDeConfiguracion
Necesitarás pasar el user al menos
mysql -u admin
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Desactivar el acceso público a PhpMyAdmin en Directadmin
Introducción
Nunca me ha gustado tener phpMyAdmin activo en mis servidores, pero es algo inevitable. Lo usuarios no tiene porque saber acceder a mysql para hacer ciertas cosas, y además el 99% de los super tutoriales para hacer cosita estan basados en esa herramienta.
Pero eso sin, lo que no nunca permito es el acceso directamente. Al mnso que el phpMyAdmin goce de la capa de protección adicional de estar logeado en el cpanel.
Eso supone que si tienes un desarrollador web, que lo necsita y no le quieres dar acceso, un par de cosas:
- Un desarrollador de verdad, no necesita acceso a phpMyadmin
- Un desarrllador de verdad, no necesita acceso remoto via 3306 (puerto de mysql el cual tambien suelo capar) sino acceso SSH para acceder via tunel
Si de verdad necesitas trabajar como desarrllador sobre mysql te recomiendo usar Mysql sobre SSH
Desactivar el acces público de phpMyAdmin en Directadmin
Versión en el momento de escribir el artículo: 1.666
Quiero que todo el acceso a /phpMyAdmin sea accesible solo a través de DirectAdmin.
da build set phpmyadmin_public no
da build phpmyadmin
Incio de sessión SignOn en PhpMyAdmin
Inicio de sesión con un solo clic (Single SignOn) a PHPMyAdmin
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Tips rápidos de Directadmin
Introduccción
Algunas veces las cosas son difíciles por la confusión generada en la propia documentación de lo que usamos.
Y esto puede llevarnos a la desesperación.
Aquí te dejo trucos y si tienen modificación tras alguna nueva versión con su versión desde la cuál se comprobó. El documento se empezó en julio de 2024 con la versión 1.6.6
Lo pongo en inglés el tablero porqué jamás uso el español como idioma en el software, ya que los mejores manuales y tutoriales esta en el idioma de Sakespeare 😉.
Después de cualquier modificación que queramos que sea aplicada debemos hacer un restart de DirectAdmin systemctl restart directadmin
Última actualizacion: 7/08/2024 18:00 GMT +2
Índice
- Apuntes sobre Let's Encrypt For Services en la documentación oficial de DirectAdmin
- Actualizar la quota de una cuenta de correo
- Cambia el email del admin
- Cambio del hostname
- Cambia valores de configuración de Directadmin en el shell
- Cloudflare para el tablero o panel de control Directadmin
- Let's encript para dominios que han fallado
- Valores por usuario en el user.conf
Apuntes sobre Let's Encrypt For Services en la documentación oficial de DirectAdmin
Actualizar la quota de una cuenta de correo
Muchas veces el usuario cambia o purga el contenido de sus cuentas de correo y llos cambios no se ven reflejados inmediatamente en Directadmin.
Esto es frustrante para el usuario y para el técnico de soporte.
Las cuotas no son algo instantaneo, y se ejecutana cada cierto tiempo, y son globales, lo que hace que el tiempo es largo. Ademas de que generalmente esas cosas se hacen de noche y observando algunas pautas apara evitar sobrecargas.
Podemos actualizar los datos de un cliente con este comando de Devecot doveadm quota recalc
doveadm quota recalc -u user@domain.ltd
Después podemos verificar con:
doveadm quota get -u user@domain.ltd
Quota name Type Value Limit %
STORAGE 0 - 0
MESSAGE 0 - 0
Cambia el email del admin
Vía rápida por SSH
Editando el fichero /usr/local/directadmin/data/users/admin/user.conf
la variable email=
y haciendo un restart de directadmin
systemctl restart directadmin
Igual tienes que revisar el CSF para las notificaciones
Vía tablero en Dashboard > User Profile > General
Cambio del hostname
En principio uno pensaría que con cambiar el hostname en el Tablero > Admin > Server Manager > Administrator Settings > Server Settings
se producirían todas las acciones necesarias.
Pues no. Y además, si buscas, puede que lo encuentres a la primera pero puede que comiences un viaje a ninguna parte. Hostname change does not work properly.
Aquí te lo dejo mas formalito, y se entiende que hostname -f
te resuelve el Hostname que tu quieres y tienes ya configurado para resuelva a tu servidor.
/usr/local/directadmin/scripts/letsencrypt.sh server_cert `hostname -f`
Cambia valores de configuración de DirectAdmin en el shell
En la documentación tenemos todos los valores de configuración de Directadmin que puedes manejar en el shell.
Algunos de los son muchísimo más prácticos que ir buscando por su tablero de mandos.
Se cambian con:
da config-set variable value
systemctl restart directadmin
O también con
/usr/local/directadmin/directadmin config-set variable value
systemctl restart directadmin
Si quieres buscar alguno o un grupo por palabra que buenbo usar grep
cat /usr/local/directadmin/conf/directadmin.conf | grep dkim
dkim=2
Hay variables que no funcionan con da config-set
y hay que editarlas manualment.
A veces es mucho más práctico conocer la variable que ir buscando por el tablero
Cloudflare para el tablero o panel de control
Interesante usar el tablero en otro puerto (por imperativo de Cloudflare) pero muy interesante para evitar un buen porcentaje de bobos haciendo pruebas contra tu panel.
Habilita el modo Cloudflare en tu registro que apunta a tu máquina, y comienza a funciona por el puerto 2096
da config-set port 2096
❯ systemctl restart directadmin
Si tras hacer el cambio, tu panel de control Directadmin hace parpadeo (blinking,) elimina en las herramientas del desarrollador (Webmaster Tools), todo lo que hay en Almacenamiento y vuelve a hacer login.
Let's Encrypt para dominios que han fallado al crearse (SSL)
A veces puede darse que falle la creación de los certificados de un dominio. Meor que perder el tiempo en el tablero lo podemos solventar via terminal
/usr/local/directadmin/scripts/letsencrypt.sh request domain.tld 4096
- Entendemos
domain.tld
como un fake que debemos sustituir. - El dominio ya resuelve de forma global a nuestra máquina.
Valores por usuario en el user.conf
Muchas veces es posible que deseemos no estar tan limitados a los valores globales o aplicados por cuestión de un plan, o de los valores del usuario en la administración. Incluso hay valores que no están reflejados en el panel de administración, como puede ser el caso de la limitación del número de correos por usuario.
En este caso, entra en funcionamiento el override
o sobrescritura
de los valores de configuración, que podemos ejecutar ya sea con la edición del fichero /usr/local/directadmin/data/users/<USER>/user.conf
o con el uso de la API.
Cambio del max_per_email_send_limit
por usuario
Un ejemplo es el de cambiar el valor máximo que limita el envío de correos por día, algo muy útil en el entorno de hosting para evitar entrar en listas de spam, ya sea porque han hackeado una cuenta, un script abierto sin protección, etc.
En este caso, para permitir a un usuario saltarse el límite para una cuenta en concreto (atención, él podrá aplicar esto a todas sus cuentas, y lo lamento, pero hay mucho espabilado, así que tendréis que tener un mecanismo de vigilancia de su uso).
El cambio de forma global autorizaría a todos los usuarios al uso del máximo, en todas las cuentas configuradas como máximo en ese valor. Sin embargo, si lo hacemos modificando el fichero /usr/local/directadmin/data/users/<USER>/user.conf
añadiendo max_per_email_send_limit=VALUE
y haciendo un restart del servicio de Directadmin, el usuario podría en todas sus cuentas añadir dicho límite.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
ModSecurity en DirectAdmin
Introducción
El uso de ModSecurity esta altamente recomendado. El software eactual, y mas con la proliferación de expertos en javascript o creadores de temas y plugins hacen más que necesaria una capa adicional de seguridad en la llamadas al servidor web.
ModSecurity en Directadmin con owasp
En mi caso opto siempre por owasp.
ModSecurity Documentación para Directadmin
Algunos tips.
- Al principio es una pesadilla, pero lo mejor es no desactivar pro defecto. Es lo que hacen el 99% de los hosters que no quieren lios con sus clientes, pero luego sus clientes mueren una y otra vez de hackeos, inyecciones de código malicioso, y problemas de seguridad.
- Si alguna regla (rule ID) la tienes clara y documentada, puede desactivarla en el manager de ModSecurity que esta accesible en
/evo/admin/modsecurity
- Esas reglas son globales, es decir las desactivas para todo el mundo, asi que ten muy claro que las desactivas por es necesario.
Muchas reglas son necesarias para determinado templates famosos, crm y plugins que son famosos, y pese a ello, una autentica verguenza de codificación. Queda en tú política el permitirlo de forma global o obligar al usuario a que el actualice sus reglas haciendose responsable de su seguridad.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
DKIM, SPF y DMARC para el hostname de un servidor con Directadmin
Introducción
La importancia de tener al día y configurado un servidor y su hostname es crucial, para que el correo emitido por el servidor como tal (alertas, mensjaes al usuario, etc) y la fiabilidad del propio servidor es crucial.
Por el ello uno de los grandes olvidados es tener el SPF, DKIM, y DMARC para el hostname
Proceso de creación de los reegistros SPF, DKIM y DMARC en un host con Directadmin
Creación de la zona
Con indipendencia de si el hostname esta controlado por un dominio cuyo sistema de resolución es distinto al de la maquina, ya sea por DNS locales o por un cluster externo, o por un proveedor externo como Cloudflare, debemos crear una zona para el hostanme en el tablero.
SPF
Si lo tienes correctamente configurado (te aconsejo que pases por la documentación All Directadmin Conf Values ya que si esta configurado el lo creara automaticamente
Si lo configuras tambien puedes modificar los valores por defecto, muy útil cuando tenemos servidores de correo de relay, etc.
Para ello además de la configuración hay que crear un fichero /usr/local/directadmin/data/templates/custom/dns_txt.conf
|DOMAIN|.="v=spf1 a mx ip4:|SERVER_IP||EXTRA_SPF||SPF_IPV6| -all"
DKIM
EL DKIM lo podremos crear ahora que ya existe la zona, con:
/usr/local/directadmin/scripts/dkim_create.sh `hostname -f`
Esto generará la entrada adecuada en el fichero de zona del hostname.
DMARC
Procederemos a editar el fichero anterior /usr/local/directadmin/data/templates/custom/dns_txt.conf
para añadir el registro _dmarc
_dmarc="v=DMARC1; p=none; sp=none;"
Ahora nuestro fichero tendra algo así:
|DOMAIN|.="v=spf1 a mx ip4:|SERVER_IP||EXTRA_SPF||SPF_IPV6| -all"
_dmarc="v=DMARC1; p=none; sp=none;"
NO es el alcance de este tutorial el explicar si usar o no usar rua en el registro, y lo que dice Google y lo que dice Microsoft.
Proceso adicional si el sistema de DNS no es el del servidor
Si como suele ser habitual, el control de DNS del hostname no es una DNS local o del cluster deberemos abrir el fichero de zona, ya sea en el Tablero de Directadmin o en el shell, para copiar el contenido de estos registro de zona y copiar en la zona del dns que controla el dominio del hostname.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
PHP en shell para usar wp cli en DirectAdmin
Introducción
En este caso y para facilitar las cosas a los usuarios de Directadmin, en el que como norma general se instalan distintas versiones de PHP y la principal del servidor puede ser incompatible connuestras necesidades es mejor usar la que necesitamos.
Aunque este tip es para DirectAdmin, vale para cualquier distribución Linux o *nix. adaptando el tip a tu SO
PHP en shell para usar wp cli - Version cPanel
Ejemplo
wp core update && wp plugin upgrade --all && wp theme upgrade --all
Fatal error: __autoload() is no longer supported, use spl_autoload_register() instead in /home/user/public_html/wiki.dominio.com/wp-includes/compat.php on line 502
php -v
PHP 7.2.34 (cli) (built: Mar 28 2023 21:20:00) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with the ionCube PHP Loader + ionCube24 v10.4.5, Copyright (c) 2002-2020, by ionCube Ltd.
with Zend OPcache v7.2.34, Copyright (c) 1999-2018, by Zend Technologies
El usuario tiene una versión correcta en la que todavía no estaba declarada obsoleta la función __autoload()
Si estamos como usuario
$ which php
/usr/local/php74/bin/php
$ which wp
/usr/local/bin/wp
Ahora solo nos queda llamar al wp-cli de forma adecuada 74
es la versión que queremos usar
/usr/local/bin/wp
es el path de instalación global de la herramienta wp
/usr/local/php74/bin/php /usr/local/bin/wp core update
Tip
Esto podemos añadirlo a nuestro fichero de configracion del shell usado.
Por ejemplo y para el caso de que tengamos mas de un sitio web con distintos requerimientos mejor usar este formato
wp74="/usr/local/php74/bin/php /usr/local/bin/wp"
wp82="/usr/local/php82/bin/php /usr/local/bin/wp"
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Limpieza de mysql tras una migración: permisos de host antiguos
Introducción
Cuando se realizan migraciones entre servidores, ya sea cPanel a Cpanel, cPAnel a Directamdin,, siempre quedan proquerías que hay que limpiar.
Una de ellas son las entradas en la tabla user
de mysql/maridab en la que se conservan los hosts remotos de antiguos servidores.
He visto alguna vez cuando me han contratado para un mantenimiento de un servidor y un tunning, servidores con mas de 1000 usarios mysql, y que llevaban arrastrando 4 o 5 hosts de distintos servidores, de migración en migración.
Luego, claro, mysql va lento.
Nota. No es precismanet la raíz del porblema, peoro cuando en el jardin dejas malas hierbas, al final caban poniendose feo.
Revisión
Accedemos a nuestro mysql
> mysql
SELECT User, Host FROM mysql.user;
+--------------------------+--------------------+
| User | Host |
+--------------------------+--------------------+
| cdbtnet | localhost |
| cdbtnet | old.server.com |
| cdbtnet | old2.server.com |
...
Cramos el script
El escript se ejecuta pasandole un parámetro:
- El nombre del host a eliminar
ATENCIÓN
ESTE COMO TODOS LOS COMANDOS DE ELIMINACION DEBE HACER LEYYENDOSE, ENTENDIENDOLO Y CON ... BACKUP
#!/bin/bash
# Verificar que se haya pasado un parámetro
if [ $# -eq 0 ]; then
echo "Debe proporcionar un host para eliminar los usuarios. Uso: $0 <host>"
exit 1
fi
# Guardar el parámetro proporcionado como el host a eliminar
delete_host=$1
# Variables de conexión a la base de datos
db_user="da_admin"
db_password=$(grep 'passwd' /usr/local/directadmin/conf/mysql.conf | awk -F= '{print $2}')
db_host="localhost" # Cambia si tu base de datos no está en localhost
# Comando para listar usuarios del host específico
list_users_command="SELECT user, host FROM mysql.user WHERE host='${delete_host}';"
# Conéctate a MySQL y obtiene la lista de usuarios
users=$(mysql -u "$db_user" -p"$db_password" -h "$db_host" -Bse "$list_users_command")
# Verificar si se obtuvieron usuarios
if [ -z "$users" ]; then
echo "No se encontraron usuarios con host '$delete_host'."
exit 0
fi
# Generar y ejecutar los comandos de eliminación de usuario
while IFS=$'\t' read -r user host; do
if [ ! -z "$user" ] && [ ! -z "$host" ]; then
drop_user_command="DROP USER '$user'@'$host';"
mysql_command="mysql -u \"$db_user\" -p\"$db_password\" -h \"$db_host\" -e \"$drop_user_command\""
echo "Ejecutando: $drop_user_command"
eval $mysql_command
# Verificar si el comando se ejecutó correctamente
if [ $? -ne 0 ]; then
echo "Error al ejecutar: $drop_user_command"
else
echo "Usuario eliminado con éxito: $user@$host"
fi
fi
done <<< "$users"
chmod +x nombre_script.sh
./nombre_script.sh 5.0.0.0
....
Ejecutando: DROP USER 'tblrmmll_root'@'5.0.0.0';
Comando que se ejecutará: mysql -u "da_admin" -p"ElPaSsWoRd" -h "localhost" -e "DROP USER 'tblrmmll_root'@'5.0.0.0';"
...
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Activar DKIM a todos los dominios de un servidor con Directadmin
Introducción
DKIM es pieza fundamental en el sistema actual de antispam, y sobre todo para garantizar que nuestro dominio y/o Ip no loleguen a ser considerados como SPAM.
Configuracion DKIM global
Indicada en el manual, directadmin.conf - #dkim nos indica que la variable es dkim
Valor | Comentario |
---|---|
0 | DKIM está deshabilitado por defecto para los nuevos dominios |
1 | DKIM está habilitado por defecto para los nuevos dominios |
2 | La funcionalidad de DKIM está habilitada, pero no es obligatoria para los nuevos dominios |
Podemos editarlo manualmente o usar por ejemplo:
da config-set dkim 1
cd /usr/local/directadmin/custombuild
./build update
./build exim
./build eximconf
Esta configuración hará que todos los dominios futuros, se configuren con DKIM.
Para dominios existentes
Es probable que en una migración o situación especifica, el administrador deseé poner el valor a 2
para poder realizar la migración sin añadir una capa de complejidad.
Bien, una vez asentado todo, o bien porque había dominios anteriores sin DKIM, procedemos:
Atención: Si hay ya dominios que no quieren tener DKIM, ya sea porque no saben como usar servicios exteriores de correo sin configurarlo correctamente o porque no se lo explicarón, se puede producir problemas con ellos. Tener en cuenta.
Habilitar la creación automática de registros DKIM no afecta a los dominios existentes. Tienes algunas opciones para agregar DKIM a los dominios antiguos una vez que has habilitado DKIM en el archivo directadmin.conf
. Puedes hacerlo para cada dominio uno por uno o para todos los dominios existentes a la vez.
Para habilitar DKIM para todos los dominios existentes después de configurar DKIM en 1
en el archivo directadmin.conf, puedes ejecutar el siguiente comando a través de SSH como el usuario root.
echo "action=rewrite&value=dkim" >> /usr/local/directadmin/data/task.queue; /usr/local/directadmin/dataskq
Para habilitar DKIM solo para dominios seleccionados uno por uno, utiliza ya sea la cola de tareas o el script dkim_create.sh
proporcionado por DirectAdmin (reemplaza DOMAIN.COM con el dominio para el cual deseas habilitar DKIM).
/usr/local/directadmin/scripts/dkim_create.sh DOMAIN.TLD
o inmeditamente
echo "action=rewrite&value=dkim&domain=DOMAIN.COM&dns=yes" >> /usr/local/directadmin/data/task.queue; /usr/local/directadmin/dataskq
Ambos comandos funcionan de la misma manera, con la excepción de que puedes tener el DKIM escrito inmediatamente con dataskq en comparación con dentro de un minuto utilizando el script
dkim_create.sh
.
Deshabilitar DKIM por Usuario Cuando Está Habilitado o Permitido Globalmente
Esta función está diseñada para que DKIM esté habilitado o permitido globalmente, pero puedes deshabilitarlo a nivel de usuario.
Esto requiere que se establezca dkim=1
o dkim=2
en el archivo directadmin.conf
.
La configuración de 1
habilitará DKIM automáticamente para todos los dominios bajo cada usuario, a menos que especifiques lo contrario en sus archivos user.conf
.
La configuración de 2
les permitirá a los usuarios, habilitar DKIM por sí mismos, a menos que se especifique lo contrario en su archivo user.conf
.
Ten en cuenta, que establecer dkim=0
en el archivo directadmin.conf
deshabilita completamente DKIM para todo el servidor y los archivos user.conf
no se verificarán. Por lo tanto, si deseas que DKIM esté deshabilitado globalmente por defecto con la opción de habilitarlo solo para ciertos usuarios/dominios, configurar dkim=2
en el archivo directadmin.conf es una mejor opción.
Cuando creas un usuario, se crea con un dominio predeterminado. Este dominio tendrá DKIM creado para el dominio por defecto debido a la configuración habilitada globalmente y la no existencia de un user.conf
hasta que se cree la cuenta (no hay un user.conf
para editar y deshabilitar DKIM).
Por lo tanto, se deberá eliminar manualmente DKIM para el dominio predeterminado si prefieres que no tenga un registro DKIM.
Aquí están los pasos para, primero eliminar el registro del dominio predeterminado y luego deshabilitar la creación automática de registros DKIM para los dominios subsiguientes bajo ese usuario.
Para eliminar los registros del dominio predeterminado, elimina el registro TXT x._domainkey
de /var/named/DOMAIN.TLD.db
y luego elimina las claves.
rm -f /etc/virtual/DOMAIN.COM/dkim.public.key
rm -f /etc/virtual/DOMAIN.COM/dkim.private.key
Ahora, edita el user.conf
para que no se habiliten registros *DKIM para los dominios que se creen posteriormente bajo el usuario. El user.conf
se puede editar a través de SSH como el usuario root y el archivo se encuentra aquí (donde USERNAME representa el nombre de usuario del usuario que estás editando),
/usr/local/directadmin/data/users/USERNAME/user.conf
Esto permite que la configuración de DKIM de ese usuario particular anule la configuración de DKIM habilitada globalmente establecida en el archivo directadmin.conf
, evitando así que se creen registros DKIM para los dominios de ese usuario en adelante.
Reinicia DirectAdmin después de hacer los cambios.
systemctl restart directadmin
Deshabilitar DKIM a Nivel de Dominio
Esta es esencialmente la misma función que la característica a nivel de usuario, con la excepción de que editarías el archivo de configuración del dominio ubicado en /usr/local/directadmin/data/users/USERNAME/domains/DOMAIN.TLD.conf
, en su lugar.
No es necesario editar el archivo user.conf
del usuario para controlar DKIM a nivel de dominio.
Si un determinado dominio utiliza tanto un DNS remoto como un servidor de correo remoto, es posible que desees deshabilitar DKIM para este dominio en particular en lugar de para todos los dominios del usuario. Aquí es donde esta función es útil.
En realidad no es necesaria esta dudosa práctica usada, cuando el usuario final o la otra empresa que le ofrece servicios de correo, no le da las putas adecuadas) La gran mayoría de los sevricios de correo externo, si dan la información necesaria para crear y mantener un registro DKIM para cada servicios de correo, basandonos en el registro selector pero su complejidad y la falta de conocimientos llevan a un salida incorrecta. Pero este es otro tema del que hablaremos en otro post, en fechas próximas.
Reinicia DirectAdmin después de hacer cambios en el archivo DOMAIN.TLD.conf:
systemctl restart directadmin
Cambiar el Selector Predeterminado
DirectAdmin utiliza x
como el selector predeterminado. Para cambiar el selector, necesitarás actualizar el archivo directadmin.conf con el selector deseado. Los siguientes ejemplos cambian el selector a default
:
/usr/local/directadmin/directadmin set dkim_selector default restart
Necesitarás reconstruir la configuración de Exim de la siguiente manera:
/usr/local/directadmin/custombuild/build exim_conf
Confirma que el selector fue cambiado en el archivo /etc/exim.dkim.conf
:
❯ grep -i selector /etc/exim.dkim.conf
dkim_selector = x
Ahora, cualquier registro DKIM creado nuevo utilizará tu selector especificado. Ten en cuenta que necesitarás eliminar y recrear los registros DKIM antiguos que utilicen el selector antiguo si deseas que usen el nuevo selector.
Conclusión
Ya hemos revisado el procedimiento paso a paso para habilitar DKIM con el panel de control DirectAdmin. Podemos decir, qu el registro DNS DKIM es esencial para un servicio de correo electrónico más fluido y para la autenticación de correos electrónicos.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Mod Security. Desactivación global de reglas por path
Introducción
Una vez más, con el tema de Mod Security, compruebo que el 99% de los administradores de sistemas, sigue la misma pauta de siempre, la salida hacia adelante más fácil, deshabilitando todo.
Soy cabezón, y no he basado mi seguridad en mis máquinas, en abrir la puerta menoscabando la seguridad perimetral.
Tengo cliente a los que llevo sus servicios, que son incapaces de aguantar en firme, con las normas y reglas de seguridad que trato de imponerles, pese a que eso suponga un aumento de costes en horas para limpiar problemas derivados de los mini hackeaos
Escenario
En el caso que me llevó a este tema, estaba implicado DirectAdmin y el webmail RoundCube en una situación algo especial.
Con las cuentas de sistema usuario
usadas como cuenta de correo, RoundCube recibía una serie de errores al lanzarse prohibiciones vía Mod Security.
Connection Error (Failed to reach the server)! !Error de conexión fallo al intentar alcanzar el servidor)!
Cuando teneos problemas con RoundCube como con muchas aplicaciones web, insisto a mis clientes que observen las webmaster tools del navegador y/o al menos las cabeceras de respuesta (406) más allá de los mensajes tipo Alert de las aplicaciones.
Al final, localizando las reglas afectadas por RoundCube a nivel hostname, salieron a la palestra las siguiente reglas afectadas:
- 911100
- 932260
- 920340
- 932235
- 941100
- 941130
- 941160
- 941170
- 949110
- 980130
Todas ellas, con Paranoia Level 1, ModSecurity :: Concepto Paranoia Level
Uy... que cosas. EL PR 1 es básicamente el nivel con menor número de falsos positivos, y muchas de estas rules, ofrecen una protección extraordinaria a muchos de los errores más comunes de los "programadores" de javascript.
Así que las soluciones que se presentan en, StackOverFlow, el foro de DirectAdmin, y otras muchas, no me convencían, porque se trata de atajos (workaround) que llevan a la desactivación de la regla de forma global, o en su defecto, no cumplen con la documentación de Mod Security o de DirectAdmin.
Solución
No hay que dar muchas vueltas, ni ir a templates de DirectAdmin.
Nada mas lejos.
La cuestión esta en el propio Mod Security que tiene en su instalación un fichero llamado REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example
y en el caso de DirectAdmin ubicado en /etc/modsecurity.d/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example
Teniendo en cuenta que la instalación de Mod Security en DirectAdmin, cumple el estándar, lee todo los ficheros del directorio terminados en .conf
/etc/modsecurity.d/*.conf
así que se trata de leer su contenido, en el cual hay bastante ejemplos, para aprender y evitar salir por la puerta de atrás, y en su lugar cerrar bien nuestra casa.
SecRule REQUEST_FILENAME "@beginsWith /roundcube" \
"id:1001,\
phase:2,\
pass,\
nolog,\
ctl:ruleRemoveById=911100,\
ctl:ruleRemoveById=932260,\
ctl:ruleRemoveById=920340,\
ctl:ruleRemoveById=932235,\
ctl:ruleRemoveById=941100,\
ctl:ruleRemoveById=941130,\
ctl:ruleRemoveById=941160,\
ctl:ruleRemoveById=941170,\
ctl:ruleRemoveById=949110,\
ctl:ruleRemoveById=980130"
Este sería su contenido.
Hacemos la prueba de que no pasa nada en nuestra instalación, y como tenemos *Nginx, es sencillo:
~ ❯ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Con lo cual podemos hacer un reload
y probar si las rules desactivadas para /roundcube
vía REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
funciona como deseamos y si somos más atrevidos, pues tratamos de hacer una prueba de concepto, en una web sin usar dicho path.
He visto durante mi búsqueda, aunque un poco antiguas, post, artículos y entradas, que hablan de problemas con el
/phpmyadmin/
y a ese caso sería aplicable el modelo (no las rules)
Nota para DirectAdmin
Como no es un sistema que siga los patrones de DirectAdmin, ya que no encuentro su posibilidad de uso, esto supone que cuando haga un da build rewrite_confs
DirectAdmin machacará el fichero, ya que descarga entre otros el sistema de rules de Mod Security así que al margen de añadirlo a mis sistema de backups de ficheros a guardar, lo mejor será ya que se trata de un fichero que el no usa realmente, pero lo quiere borrar en un comando de borrado con glob
es protegerlo contra escritura.
chattr +i /etc/modsecurity.d/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
Así no habrá líos con esto.
[activating module `aclr' in /etc/httpd/conf/httpd.conf]
mod_aclr2 has been installed successfully.
Restarting apache.
rm: cannot remove '/etc/modsecurity.d/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf': Operation not permitted
Installing OWASP Core Rule Set for ModSecurity...
download_cached: using cached '/usr/local/directadmin/custombuild/cache/owasp-modsecurity-crs-4.5.0.tar.gz' file
Idea y apuntes
- ModSecurity Rules: Global or for Hostname?
- How do I skip certains rules for parameter in a path in ModSecurity?
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Reconstrucción del indice Full Text Search (FTS) en cuentas de correo :: Dovecot
Introducción
A veces ocurre que la correspondencia entre el tamaño en disco de una cuenta de correo usando los medios reales como son du
no se corresponde con lo que DirectAdmin nos muestra en el panel de usuario para dicha cuenta de correo.
Esto suele ocurrir tras una eliminación de correo muy intensa en la que por cuestiones de espacio el usuario quiere ver liberada su couta por estar cerca de excederse o haberse excedido ya. Tmbien puede ocurri que sea un problema que requiere de un reconstrucción forzada.
Esos indices de busqueda pueden ser gigantes, del orden de varios GB.
doveadm-fts(1) -
Manipulate the Full Text Search (FTS) index
Basicamente podemos hacer lo siguiente:
## Cuenta E-mail
❯ doveadm fts rescan -u jmvarela@omnicon.es
## Usuario y todas sus cuentas
❯ doveadm fts rescan -u USERNAME
Tambien podemos usar un script para usarlo como mantenimiento de estos indices.
rescan_fts.sh
Cremos el fichero
#!/bin/bash
# Directorio que contiene los usuarios
USER_DIR="/usr/local/directadmin/data/users"
# Iterar sobre cada usuario (directorio)
for user in "$USER_DIR"/*; do
# Verificar si el item es un directorio
if [ -d "$user" ]; then
# Obtener el nombre del usuario
username=$(basename "$user")
echo "Ejecutando doveadm fts rescan para el usuario: $username"
# Ejecutar el comando doveadm fts rescan
doveadm fts rescan -u "$username"
fi
done
Damos permiso y ejecutamos
chmod +xrescan_fts.sh
./rescan_fts.sh
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Cambio el doc root de un dominio en DirectAdmin
Doc root, public, public_html
El software moderno desde hace años, evita la publicación del software en el mismo area publica o expuesta a internet. Por seguridad, por ordenación, el codigo usa el contenido en distintas carpetas dejando a una carpeta el destino de exposición al publico.
Este puede ser public
como en el caso de Laravel, u otros distintos segun el framework.
Esto suele ser un problema para los hosters porque sus paneles de control usand el de toda la vida, public_html
En el camino, mucho se aventuran a enlace simbolicos, redirecciones. Y todo eso es muy bonito pero al final altera, no solo la realidad de la instalación sino un posible cambio de servidor, de paradigma de sistema, etc.
Cambiar el DOC ROOT en Directadmin
Si bien es sencillo, a veces parace que los manuales son algo espesos, y si encima tenemos un for de mas de 20 años de antiguedad, sin prunning, pues acabas por volverte loco con lso cambios en el tiempo.
En la actualidad es bien sencillo.
(Admin) Custom HTTPD Configurations
evo/admin/custom-httpd
Seleccionar el dominio (o subdominio entendiendose como entidad configurada como dominio independiente)
Después, deberemos modificar la configuracionde httpd.conf
nginx.conf.proxy
En cada uno de ellas veremos un boton con la palabra Customize
Que la hacer click nos mostrará la caja de exto donde introducir nuestros cambios.
Aqui usando varmiables podemos adecuar a lo que queramos nuestros path. Ejemplo de abajo me sirve a mi porque se trata de una migracion que no queria complicar.
|?DOCROOT=`HOME`/domains/`DOMAIN`/public_html/public|
El resultado de eso sera que tras reconstruir la configuracion del doc root
será /home/user/domains/subdomain.domain.tld/public_html/public
De esta forma el proyecto estará en el public_html, pero solo estará expuesta la carpeta public
da build rewrite_confs
Siemrpe, cuando terminemos deberamos reconstruir los ficheros de configruación, lo cual se hace con el comando da build rewrite_confs
o bien en el botón de
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Donde está la configuracion básica del servidor con Directadmin
Directadmin configuración interna
Directadmin admin es más sencill oque otros panales de controla efectosd e localizar donde estan las conifguraciones que despliega en el servidor.
Directadmin, compila y configura el software de servidor, como Web (Apache, Nginx,..) Correo (Imap, exim,...) desde dos puntos claves:
Software de servicio
/usr/local/directadmin/custombuild/options.conf
Directadmin (interno)
/usr/local/directadmin/conf/directadmin.conf
Con estos fichero spodemos trabajar cosas como templates, clones, etc.
Esta entrada es una entrada rápida, de conocimiento básico.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Cambios especificacos en el php.ini disable_functions por dominio
Cambiar individualmente en un dominio disable_functions
Un escenario muy común en sistemas, es la salida hacia adelante obviando los problemas que puede causar nuestra decisión.
Un caso común es el quitar las protecciones de forma global a través de el proceso general del servidor, en lugar de buscar una solución individual, para el caso concreto.
En el caso de Directadmin, si tenemos la opción secure_php esta añadirá a la configuración del php del servidor
disable_functions = exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
mysqli.allow_local_infile = Off
expose_php = Off
register_globals = Off
Existe el camino fácil, que es ir quitando las funciones que molestan a nuestros clientes, How to customize the disable_functions list y existe otro camino, que es desahbilitar al que nuestro cliente necesita, si esto es totalmente necesario, ya sea por un tiempo limitado, o de forma definitiva.
Opciones de php.ini por dominio
Opciones por dominio nos ayuda a esto último ya que tratar de modificar disable_functions
via .user_ini
aunque este autorizado, no funcionará para modificar esa clave.
- Lo primero es buscar el path de nuestra instalación para nuestro Directadmin y nuestra distro.
En mi caso esta en /usr/local/phpXX/lib/php.conf.d
Así que, siguiendo el manual, introducido el path y el dominio o subdominio del que quiero tal corrección, el nos lo dará.
En nuestro caso el cliente tenia algunos despliegues con Laravel que necesitaban shell_exec
por lo que lo eliminamos del fichero ini personalizado,
/usr/local/php83/lib/php.conf.d/30-subdomain.full.tld.ini
disable_functions = exec,system,passthru,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Después simplemente tenemos que hacer un rebuild de la función de seguridad.
da build secure_php
##### Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos.
También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad.
El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de [Castris](https://castris.com)
Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/store/soporte-profesional).
Cuenta por defecto del usuario en Roundcube - Directadmin
Escenario
El usuario usa la cuenta de usuario del sistema o de hosting <usuario>
como cuenta de correo de su dominio principal.
Esto suele ocurrir cuando no se usan nombres de usuario aleatorios, para evitar duplicidades, y el usuario usa, si le es válido, el nombre de usuario como cuenta de correo.
Esta cuenta es especial, porque se trata de una cuenta de sistema, y de hecho, su configuración es diferente al resto, pues no tiene que ir acompañada de @nombredeldominio.tld
.
Sin embargo, esta cuenta por defecto tiene una identidad que no corresponde a una dirección de correo con un dominio FQDN (Fully Qualified Domain Name), lo cual en la gran mayoría de los servidores de correo será tratado como no válida
, por lo que se rechazará la entrega del correo.
Solución: Configurar la identidad
El problema deriva de la identidad del emisor de la cuenta de correo que no está configurada correctamente.
Los pasos son sencillos:
- Configuración
- Identidades
- Editar la identidad
- Añadir el correo electrónico con el nombre de dominio (FQDN)
Si se indica una identidad con una cuenta de correo electrónico distinta de la cuenta de correo, el servidor puede rechazar su envío, obteniendo un error de servidor debido a la seguridad o al sistema antispam de salida.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Puesta a punto
Todo lo que te surga para completar, añadir, modificar tu instalación siguiendo las directrices de Directadmin
Cómo compilar una extensión o módulo de PHP en Directadmin
Introducción
Una buena práctica que sigo en mis proyectos de Laravel, es la de añadir en el composer.json
del proyecto todo aquello que necesito, inclusive las extensiones, porque no todos los paneles, no todos los SO o no todas las distribuciones, es decir, no todas las instalaciones de de un servidor o equipo de desarrollo, tiene los mismos componentes por defecto.
En el caso de hoy al migrar un despligue de Laravel de cPanel a un DirectAdmin, cuando fui ha hacer un composer update
salto un error indicándome la necesidad de tener la extensión pcntl
.
Gracias a las buenas prácticas y los principios SOLID de programación, es fácil evitar un disgutsio de proque no funciona, y donde esta el fallo.
Composer.json
{
...
"require": {
"php": "^8.1",
"ext-pdo": "*",
"ext-redis": "*",
"ext-zlib": "*",
"ext-pcntl": "*",
...
Como instalar la extensión en PHP en un servidor Directadmin
DirectAdmin tiene u número determinado de extensiones que desde la administración se pueden incluir en todas las instalaciones o desactivarlas. Pero también tiene u mecanismo sencillo para incorporar módulos de PHP a nuestra instalación, definidos en su documentación, Add a custom module to PHP Cuastombuild
Localizar las configuraciones de PHP
da build used_configs | grep 'configure\.php'
PHP 8.3 configuration file: /usr/local/directadmin/custombuild/custom/php/configure.php83
PHP 8.2 configuration file: /usr/local/directadmin/custombuild/custom/php/configure.php82
PHP 5.6 configuration file: /usr/local/directadmin/custombuild/configure/php/configure.php56
PHP 7.4 configuration file: /usr/local/directadmin/custombuild/configure/php/configure.php74
Usar el override de Directadmin
VERSION=82
cd /usr/local/directadmin/custombuild
mkdir -p custom/php
cp -fp "configure/php/configure.php$VERSION" "custom/php/configure.php$VERSION"
Después deberás añadir el código necesario en el fichero custom/php/configure.php$VERSION
, para que en la compilación de PHP se añade el módulo.
Verificamos:
cat configuration file: /usr/local/directadmin/custombuild/custom/php/configure.php82
...
--enable-mbstring \
--enable-intl \
--enable-pcntl
Puedes usar esto mismo para usarlos en tantas versiones como desees.
Ahora DirectAdmin ya soporta hasta 8 versiones de PHP pero recuerda, que no es buena idea añadirlo a todo por muchas razones. Carga innecesaria, versiones antiguas que igual no lo soporte, y forzar al usuario a que actualice su versión a las actuales.
Completar el trabajo
Compilar
da build php
Reiniciar
systemctl restart httpd
systemctl restart nginx // Si no usas httpd
systemctl restart php-fpm$VERSION
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.