Puesta en marcha correcta de WordPress

Poner un WordPress en marcha de forma correcta no es algo tan fácil como dar al autoinstalador de nuestro hosting o hacer una instalación estándar, eso lo sabe hacer cualquiera, hay que seguir muchos más pasos y realizarlos concienzudamente, no es algo ni obvio ni automático, hay que dedicar esfuerzo y atención.

Instalar y mantener un sitio WordPress seguro, y rápido es algo que todos queremos y deseamos, pero que muy pocos lo consiguen. Internet está lleno de WordPress desactualizados, pesados y/o inseguros, y tampoco es cuestión de volverse loco ni obsesivo con la seguridad, simplemente hay que instalar la herramienta de forma correcta y realizar un mantenimiento de periódico de actualizaciones y ajustes necesarios.

En el post de hoy quiero daros una guía para poder instalar un WordPress de forma adecuada con los pasos que personalmente creo que son interesantes, obviamente habrá muchas más opciones por Internet, pero esta es la forma que yo recomiendo.

Instalación

El primer paso será obviamente instalar Wordress, para ello realizaremos una instalación estándar, la única diferencia que recomiendo es que cuando nos pregunte por el prefijo de la base de datos no lo dejemos en wp_, seguro que podemos ser mucho más creativos y poner otras cosas como epsteuagi_vlodaor_ o cualquier cosa que se nos pase por la cabeza en ese momento.

[…]simplemente hay que instalar la herramienta de forma correcta y realizar un mantenimiento de periódico de actualizaciones y ajustes necesarios[…]

No os cuento como realizar una instalación básica de WordPress pues tenéis miles de tutoriales para hacer esto, símplemente recordar cambiar el prefijo de las tablas de la base de datos.

Una vez instalado lo primero va a ser establecer el esquema de URL, a lo que nosotros queramos, esto lo haremos en Ajustes – Enlaces Permanentes.

El siguiente paso puede ser si queréis quitar el famoso category, cuando entras en una categoría, pero no cambiarlo por otra cosa, sino directamente quitarlo, a mi me resulta muy molesto tener ese category u otra palabra ahí en medio, por eso siempre recomiendo quitarlo, el problema es que si lo quitamos poniendo en la misma página en la que estamos un punto «.» en Categoría Base nos van a fallar otras cosas en el futuro, y si váis directamente a modificar en el .htaccess también, así que hay que modificar dentro de WordPress, para eso hay un plugin muy tontorrón que se llama No Category Base (WPML) y que lo hará por vosotros, esto obviamente no es necesario ni va a hacer que nuestro sitio sea más seguro, pero siempre quedará mejor que las URLs no tengan cosas en medio que estorben y como estábamos en la sección de establecer los enlaces permanentes era interesante comentarlo aquí.

Certificado SSL

Ahora vamos a activar el SSL, es decir, el https, para ello lo primero que vais a necesitar es un certificado, puede ser desde un Let’s Encrypt hasta el certificado más caro que os podáis imaginar, esto tenéis que preguntarlo en vuestro hosting, entiendo que estando en 2018 esto estará ya superado, así que no deberíais de encontrar ningún problema para ello. Una vez instalado podéis cambiar a mano la URL base de vuestro Wordress e ir con mucho cuidado o instalar otro plugin, en este caso se llama Really Simple SSL que lo hará todo por vosotros.

Siguiente paso arreglar un poco el .htaccess, necesitamos que todo esto que estamos montando funcione correctamente, así que vamos a editar el fichero .htaccess y vamos a añadir las siguientes líneas para solucionar problemas del strict transport, entiendo que vuestro dominio va a ser con www, si lo queréis sin www tenéis que modificar las dos últimas líneas.

<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; preload" env=HTTPS
</IfModule>
#FORZAR A www con HTTPS
RewriteEngine On
RewriteCond %{HTTP_HOST} ^vuestro_dominio.com [NC]
RewriteRule ^(.*)$ https://www.vuestro_dominio.com/$1 [L,R=301]

Ahora ya está nuestro WordPress instalado con https, con las URLs como queremos y si lo consultamos con http:// nos va a responder siempre con https:, esto empieza a tomar forma.

Seguridad

El siguiente aso será potenciar la seguridad del sitio, esto lo vamos a hacer modificando permisos de ficheros, añadiendo líneas en el .htaccess y con plugins, la combinación de las tres cosas.

Todos los ficheros estarán en 644 y los directorios en 755, esto es fundamental y tiene que ser así.

Ahora llegamos a un tema peliagudo, hay muchos sitios que recomiendan que se cambie la base del wp-content y del wp-admin. Cambiar el wp-content, esto se recomienda como una acción que hay que realizar sí o sí, pero el wp-content se ve perfectamente en el código fuente que genera WordPress por qué se ha cambiado y wp-admin sí podría ser interesante si nuestro servidor no puede ofrecernos una capa de seguridad basada en fail2ban para evitar ataques de fuerza bruta, bueno, se pueden cambiar, no hay problema, pero yo relego la parte del wp-admin a la seguridad que proporciona el servidor gracias al fail2ban evitando ataques de fuerza bruta o más fácil restringiendo el acceso por .htaccess. El cambio se puede hacer fácilmente con el plugin WP better security, pero yo no utilizo ese plugin.

En el .htaccess bloqueo el spam referido, es decir, que nos puedan meter comentarios en vuestro WordPress desde cualquier sitio que nos sea el propio post, esto os va a quitar muchísimo spam, y lo que también hago es bloquear el acceso al xmlrpc.php y al wp-login desde mis IPs, ojo que también lo que hago es permitir acceso al xmlrpc.php desde el rango 192.0.64.0/18, ese es el direccionamiento de Automatic, si no permitís esto no os funcionará el Jetpack.

También nos vamos a proteger de la ejecución de ficheros que ahí no deberían de estar.

# BLOQUEO SPAM NO REFERIDO
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^http(s)?://([^.]+\.)?vuestro_dominio\.com [NC]
RewriteCond %{REQUEST_URI} /wp-comments-post\.php [NC]
RewriteRule .* - [F,L]
</IfModule>
#BLOQUEO AL xmlrpc.php
<Files xmlrpc.php>
order deny,allow
deny from all
allow from x.x.x.x
allow from x.x.x.x
allow from 192.0.64.0/18
</Files>
#BLOQUEO ACCESO AL wp-config.php
<files wp-config.php>
order allow,deny
deny from all
allow from x.x.x.x
allow from x.x.x.x
</files>
# FICHEROS QUE NO DEBERIAN ESTAR
<IfModule mod_alias.c>
RedirectMatch 403 (?i)(^#.*#|~)$
RedirectMatch 403 (?i)/readme\.(html|txt)
RedirectMatch 403 (?i)\.(ds_store|well-known)
RedirectMatch 403 (?i)/wp-config-sample\.php
RedirectMatch 403 (?i)\.(7z|bak|bz2|com|conf|dist|fla|git|inc|ini|log|old|psd|rar|tar|tgz|save|sh|sql|svn|swo|swp)$
</IfModule>

Y ahora vamos a por los plugins, que también hay que ponerlos, los que os recomiendo son: Akismet Anti-Spam, All In One WP Security, Block Bad Queries (BBQ) y WP fail2ban, os voy contando para que sirve cada uno y cual es el objetivo de cada uno de los plugins.

  • Akismet Anti-Spam: Este plugin está desarrollado por Automatic y es un antispam, al instalarlo hay que registrarlo en la web de WordPress, nos da el enlace, no tiene mayor complicación, si es para uso personal podemos elegir si pagamos o no y cuanto queremos pagar.
  • All In One WP Security: Este es uno de esos plugins enormes que hacen de todo, aquí tendréis que ver las opciones que más os interesen, a mi me gusta mucho la parte de exploración donde nos revisa los ficheros modificados y podremos detectar automáticamente si hay modificación de ficheros. Luego hay otras opciones que no utilizo como por ejemplo la del antispam porque akismet es mucho mejor, o la de bloqueos porque lo relego en otros plugins que lo hacen mejor.
  • Block Bad Queries (BBQ): Gracias a BBQ evitaremos peticiones maliciosas por http, inyecciones de código, etc… este plugin es muy recomendable.
  • WP fail2ban: Para poder utilizar este plugin tu hosting tiene que soportarlo, en el caso de Neodigit se soporta sin problemas ya que los servidores están configurados para integrar el plugin con los firewalls. Cualquier intento de ataque de fuerza bruta será bloqueado por el firewall y no por el php, lo cual hará que no baje el rendimento de la web, si lo hicieramos con algún plugin de seguridad, el rendimento de la web se vendría abajo pues aunque no mostremos la página tendremos que procesar esa petición.

Por supuesto además de instalar plugins es totalmente necesario estar atentos a las actualizaciones que vayan surgiendo y a la posible obsolescencia de plugins y temas, ya que es por los temas y plugins no mantenidos por donde suelen venir todos los problemas de WordPress.

Optimización

Llegamos un punto que es importante para la calidad de nuestro sitio, pero que no va a hacer que sea más seguro, sino más rápido y va a mejorar la experiencia del usuario.

Para optimizar lo más importante es elegir bien el tema y tenerlo cuidado y trabajado, pero si eso no lo podemos hacer al menos que podamos hacer otras cosas, pero que nunca van a sustituir a la elección correcta del tema, sólo podrán complementarlo.

Definir en el .htaccess los expires necesarios:

<IfModule mod_expires.c>
ExpiresDefault                              "access plus 1 month"
ExpiresByType text/html                     "access plus 1 seconds"
ExpiresByType text/xml                      "access plus 1 seconds"
ExpiresByType text/plain                    "access plus 1 seconds"
ExpiresByType application/xml               "access plus 1 seconds"
ExpiresByType application/json              "access plus 1 seconds"
ExpiresByType application/rss+xml           "access plus 1 hour"
ExpiresByType text/css                      "access plus 1 month"
ExpiresByType text/javascript               "access plus 1 month"
ExpiresByType application/javascript        "access plus 1 month"
ExpiresByType application/x-javascript      "access plus 1 month"
ExpiresByType image/x-ico                   "access plus 1 month"
ExpiresByType image/x-icon                  "access plus 1 month"
ExpiresByType image/gif                     "access plus 1 month"
ExpiresByType image/png                     "access plus 1 month"
ExpiresByType image/jpe                     "access plus 1 month"
ExpiresByType image/jpg                     "access plus 1 month"
ExpiresByType image/jpeg                    "access plus 1 month"
ExpiresByType font/truetype                 "access plus 1 month"
ExpiresByType font/opentype                 "access plus 1 month"
ExpiresByType application/x-font-woff       "access plus 1 month"
ExpiresByType video/ogg                     "access plus 1 month"
ExpiresByType audio/ogg                     "access plus 1 month"
ExpiresByType video/mp4                     "access plus 1 month"
ExpiresByType video/webm                    "access plus 1 month"
ExpiresByType image/svg                     "access plus 1 month"
ExpiresByType image/svg+xml                 "access plus 1 month"
ExpiresByType application/pdf               "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
</IfModule>

Y ahora pasaremos a los plugins que hay que instalar que son básicamente cinco: AMP, Autoptimize, WP Super Cache, WP-Sweep y Heartbeat Control

  • AMP: Este plugin nos adaptará las páginas al AMP de Google, se supone que Google funcionará con AMP si puede y las páginas cargarán más rápidas
  • Autoptimize: Realiza una optimización de html, css y javascript, con esto conseguiremos mejorar el tiempo de carga de nuestras webs.
  • WP-Sweep: Limpieza de bases de datos. La base de datos de WordPress si no se mantiene limpia va creciendo hasta el infinito, haciendo que nuestro WordPress cada vez sea más y más lento.
  • WP Super Cache: Un plugin de caché indispensable que tiene una relación usabilidad, facilidad y resultado excelentek, hay otros como W3 Total Cache, pero la dificultad que nos ofrece hace que no merezca la pena.
  • Heartbeat Control: Este plugin va a modificar el tiempo entre chequeos del API de WordPress, lo que hará que use muchos menos recursos y que el servidor funcione mejor.

Solo agregar que es de total importancia que la versión de php sea superior a la 7.0 que mejora el rendimiento enormemente, en Neodigit ya tenemos la versión 7.2 en estado alpha, pero totalmente usable, este blog es prueba de ello :).

Espero que este post os sirva para poder configurar correctamente vuestro WordPress.