Función REPLACE de MySQL

Introducción

En este post vamos a usar la función REPLACE de MySQL la cual nos va a permitir cambiar valores que encontremos en nuestras tablas por unos nuevo.

Uno de los ejemplos donde comúnmente se suele usar es a la hora de cambiar el dominio a un blog WordPress, ya que hay que cambiar estos valores en la base de datos.

Usando la función REPLACE de MySQL

Vamos a analizar un ejemplo clásico:

UPDATE wp_posts SET post_content = REPLACE( post_content, 'a class="url" href="www.', 'a class="url" href="http://www.' );

En este ejemplo lo que nos encontramos es lo siguiente:

  • tabla: wp_posts
  • campo: post_content
  • sustituir: vamos a sustituir ‘a class=»url» href=»www.’, ‘a class=»url» href=»http://www.’.
    • Es decir que donde había un href=»www. ahora será href=»http://www. Hemos agregado la parte del http.

Con esto lo que conseguimos, en el caso de wordpress, es que funcionen las imágenes a la hora de cambiar el nombre del dominio.

Incompatibilidad de versiones MySQL

Introducción

Nos encontramos con un problema de incompatibilidad de versiones MySQL. Tenemos 2 servidores 1 con una versión de MySQL 5.0.x y otro con versión 5.5.x y teníamos que tener una conexión entre ambos.

En este caso la conexión se estaba realizando desde el servidor nuevo al viejo.

El error que nos daba era algo similar a esto:

Connect Error (2000) mysqlnd cannot connect to MySQL 4.1+ using old authentication

Lo cual indicaba un problema de compatibilidades entre versiones (evidentemente porque en el nuevo servidor usaba las librerías nuevas).

Solución Incompatibilidad de versiones MySQL

La solución que hemos tomado para solventar este problema fueron dos pasos:

1) En la configuración del MySQL viejo (/etc/my.cnf) tuvimos que quitar la compatibilidad de old-password. En nuestro caso tuvimos que comentar la siguiente línea:

#old_passwords=1

2) Lo siguiente fue revisar el usuario que estábamos usando para conectar si tenía un formato de contraseñas correcto. Para ello tuvimos que acceder a nuestra consola de MySQL y ejecutar la siguiente sentencia:

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user;

Esto nos daba un listado de los usuarios que tienen contraseñas débiles y que deberíamos cambiar para mayor seguridad. Para ser exactos las contraseñas con tamaño 16 son las de contraseñas débiles.

Evidentemente entre ellas estaba el usuario que estábamos usando y tuvimos que ejecutar el siguiente comando para volver a reajustar la contraseña:

SET PASSWORD FOR 'usuariocambiar'@'host'=PASSWORD('mismacontraseña');

Con esto hemos vuelto a ejecutar de nuevo el comando y esta vez nos salía con un tamaño de 41 caracteres.

Con esto dejamos resuelto el problema del cliente.

Configuración de seguridad en certificados Apache

Introducción

En este post vamos a tratar acerca de la configuración de seguridad en certificados Apache, un problema común para mantener nuestros servidores seguros ante cualquier tipo de ataque SSL.

Siempre nos preguntamos cual es la configuración idónea para hoy en día para cuando instalamos certificados en nuestros servidores Linux/Windows sobre Apache. Pues bien hoy vamos a desvelar parte del misterio que solemos usar en nuestros servidores.

Configuración de seguridad en certificados Apache

La configuración es completa para el VirtualHost que queramos cifrar o para ponerlo en el de por defecto.

SSLEngine on
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
SSLHonorCipherOrder on

SSLCertificateFile RutaWeb/certificado.crt
SSLCertificateKeyFile RutaWeb/certificado.key
SSLCACertificateFile RutaWeb/certificado.ca

Entramos un poco en la explicación:

  • Activamos el SSL para el dominio (SSLEngine on)
  • Solo habilitamos los protocolos TLSv1, TLSv1.1 y TLSv1.2 (Quizás os aparezca el problema de la vulnerabilidad beast, pero esto ya se parchea a nivel de navegador).
  • Un cifrado fuerte, actualmente hemos puesto muchas líneas que son recomendadas. Esto viene dado por el parámetro SSLCipherSuite.
  • SSLHonorCipherOrder on, No permite que el cliente elija el método de negociación sino que fuerza a la que tenemos en el servidor.

 

Configurando Chroot con SFTP

Introducción

Se nos presentó la problemática de que un cliente quería crear un SFTP (Secure File Transfer Protocol) para que un usuario solo pudiera acceder de esa manera. Es decir, que no quería que por FTP tuviera acceso. Aparte de ello quería enjaularlo en su propio directorio y que no pudiera navegar a ningún lugar.

Recordemos que SFTP utiliza el puerto del SSH para realizar la transferencia de ficheros proporcionando una capa de seguridad extra.

Recordamos también que existe otras maneras de hacerlo cifrado y seguro con ssl sobre ftp con VSFTP y ssl sobre ftp con PROFTPD.

Configurando Chroot con SFTP

Antes de empezar debemos crear el entorno cerrado, en nuestro caso vamos a usar el directorio «/var/www/sftpusuarios/».

Los pasos que vamos a seguir para configurar Chroot con SFTP son los siguientes:

# Creando el grupo de sftp
groupadd sftp_users

# Creamos el usuario
adduser -d /var/www/sftpusuarios/ -G sftp_users sftpuser1

# Configuramos el SSH
vim /etc/ssh/sshd_config

# Comentamos la siguiente línea, suele estar al final
Subsystem sftp /usr/libexec/openssh/sftp-server


#Añadimos las siguientes
Subsystem sftp internal-sftp
Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /var/www/sftpusuarios
ForceCommand internal-sftp

Ahora mismo después de ejecutar dicha configuración tan solo tenemos que reiniciar y probar nuestro acceso por SFTP (recordad el mismo puerto del SSH).

Deshabilitar el usuario por FTP

Actualmente solo lo hemos probado por VSFTP, no sabemos si será igual para otros clientes FTP:

# Editamos el fichero siguiente
vim /etc/vsftpd/ftpusers

# Añadimos el usuario que no queremos que tenga FTP
sftpuser1

Guardamos el fichero y reiniciamos el servicio de VSFTP.

Bloqueando adjuntos con Postfix

Introducción

Bloqueando adjuntos con Postfix, Últimamente se está haciendo muy famoso el tema del cryptolocker debido a que llegan como adjuntos en los correos y los usuarios que no tienen mucho conocimiento suelen pulsar sobre ellos.

Existen varias maneras a la hora de poder gestionar estos correos:

  1. Ver las cabeceras de los distintos correos y buscar un patrón para bloquear:
    • Ya sean IP, Tipo de Mail, Asuntos, Etc
  2. Bloquear extensiones que no solamos trabajar con ello.

En nuestro caso vamos a usar el segundo punto para bloquear los adjuntos zip entre otras extensiones.

Bloqueando adjuntos con Postfix

Lo primero que haremos será modificar el fichero main.cf:

vim /etc/postfix/main.cf

Añadimos al final la siguiente línea:

mime_header_checks = regexp:/etc/postfix/mime_header_checks

Guardamos y creamos el nuevo fichero:

vim /etc/postfix/mime_header_checks

Añadimos las extensiones que queremos bloquear:

/name=[^>]*\.(bat|com|exe|dll|vbs|zip)/ REJECT

Guardamos y solo nos queda reiniciar el postfix

service postfix restart

Para comprobar que ha funcionado:

Sep 9 13:19:27 xxx-vdc postfix/cleanup[19683]: 79E3E754242: reject: header Content-Type: application/x-zip-compressed;? name=»@PD94118.ZIP» from 4.mo68.mail-out.ovh.net[46.105.59.63]; from=<xxxx@xxxx.es> to=<xxxx@xxxx.com> proto=ESMTP helo=<4.mo68.mail-out.ovh.net>: 5.7.1 message content rejected

Plesk Gzip Apache y Nginx

Introducción

Gzip Apache y Nginx, A menudo necesitamos en nuestra página web (sobre todo los que se dedican a marketing y SEO) que nuestra web vaya rápida y utilizando el servicio de page speed insight de google nos recomienda que habilitemos la compresión de nuestro site para que ocupe menos. Pues bien este manual se basa en como activar Gzip en Apache (Mod_Deflate) y en Nginx a nivel de sistema y en la configuración de nuestro PLESK.

Como esto no es necesario para todos los dominios esto lo habilitaremos por defecto a aquellos dominios que lo necesiten.

Los pasos que vamos a seguir en este manual son los siguientes:

  1. Comprobar que el módulo esté cargado.
  2. Configurar el módulo si es necesario.
  3. Habilitar las directivas a nivel de dominio en Plesk.
Leer más

Securizar el servidor web contra httpoxy

Introducción

En este artículo vamos aprender a securizar el servidor web contra httpoxy una vulnerabilidad que fue descubierta hace unos meses y que afecta a aplicaciones que corren bajo cgi. Esto quiere decir que servicios web como Apache, Nginx y PHP se ven afectadas. Pero esto no quiere decir que solo sea para esas sino que por ejemplo mod_php también esta siendo afectado.

Lo primero que diremos antes de avanzar es que las versiones que aún están siendo mantenidas han sacado actualizaciones de sus paquetes evitando el CVE-2016-5387, por lo tanto la primera recomendación de todas es actualizar los paquetes de apache/nginx.

Este documento lo centraremos más para aquellos sistemas que no tienen actualizaciones del sistema y aprovecharemos mecanismos del sistema para evitar estos problemas.

Leer más

Too Many Open Files Mysql o MariaDB

Introducción

Mirando los logs de Mysql o MariaDB nos hemos percatado de que un cliente estaba teniendo problemas de apertura (Too Many Open Files) con tablas aleatorias de distintas bases de datos. No había un patrón claro pero tuvimos que pasar por varios pasos para detectar el problema.

Los logs los encontramos en: /var/log/mariadb/mariadb.log

En el artículo vamos a mirar los siguientes puntos:

  1. Revisión de los permisos del directorio «datadir» de mysql/mariadb
  2. Revisión de la variable open_file de mysql.
  3. Revisión de las limitaciones del sistema a la hora de abrir ficheros por un servicio.

Con esto hemos conseguido acotar el problema y solventar la incidencia que se nos había presentado.

Leer más

Cambiando directorio backup de plesk

plesk-panel

Introducción

En este artículo vamos aprender a cambiar el directorio backup de plesk que viene por defecto. Dicho directorio suele ser /tmp.

El problema viene dado es que a veces este directorio suele ser una partición aparte con poco tamaño y a la hora de generar backups que sobrepasen dicho tamaño. Esto hace que plesk se vuelva inestable y de un error por pantalla.

Por lo tanto lo que haremos en resumidas cuentas es lo siguiente:

  1. Modificar dos ficheros de plesk.
  2. Reiniciar el panel de plesk.
  3. Comprobar su funcionamiento correcto.

Leer más

Exim y Postfix – Comandos en Linux

Introducción

Antes de realizar la introducción este artículo se basa principalmente en comandos para trabajar con Exim y Postfix.

Últimamente esta habiendo muchos ataques a vulnerabilidades de las programaciones o de los CMS/Plugins que no están actualizados de nuestra web. Esto como comprenderán es algo muy grave que la gente no suele realizar debido a que se les olvida, no tienen tiempo o directamente no quieren. Cuando ocurre esto es cuando vienen los problemas y sobre todo a las empresas hosting le piden explicaciones.

Pues bien recordad que debemos tener actualizados nuestros CMS/Plugins a la medida de lo posible.

El problema que encontramos a la hora que intrusionan es que suelen ser para ejecutar una SHELL (para robar información o usar el servidor como phising o hosting) o para enviar correos spam a un sin número de cuentas. Nosotros nos centraremos en esta última parte para detectar a posibles spammers y como ver las colas de correo, etc.

Leer más