¿Cómo mejorar considerablemente la seguridad de WordPress?

Vamos a blindar en la medida de lo posible la seguridad de nuestro sitio web

¿Cómo mejorar considerablemente la seguridad de WordPress?

Tras haber cambiado el prefijo de las tablas de la base de datos (¿Cómo cambiar el prefijo de las tablas de la base de datos de WordPress?), vamos a seguir mejorando la seguridad de nuestro WordPress. Para ello hoy vamos a instalar tres sencillos plugins.

Akismet

Akismet

El primer plugin damos por hecho que ya está instalado, pero, por si no es así, lo comentamos. Se llama Akismet y nos permite bloquear el spam masivo que llega entre nuestros comentarios. Para ello sólo hay que obtener una clave de API de Akismet aquí y listo, él se encarga absolutamente de todo. En caso de que ya tengamos una clave, podemos utilizar la misma tantas veces como queramos en distintas instalaciones de WordPress.

Tras haber bloqueado todo el spam posible, vamos a por el segundo plugin, que se llama Wordfence y es un potente firewall que nos va a ser muy útil para evitar esos ataques, últimamente masivos, a nuestras instalaciones de WordPress. En este plugin tenemos varias opciones:

  • Scan: nos permite escenar nuestra instalación de WordPress en búsqueda de archivos corruptos, modificados indebidamente o hackeados.
  • Live traffic: nos muestra el tráfico de nuestro sitio web en tiempo real, donde podremos filtrar el tráfico por:
    • All Hits: todo el tráfico generado.
    • Humans: el tráfico generado por nuestros visitantes humanos.
    • Registered Users: el tráfico que han generado nuestros usuarios registrados.
    • Crawlers: el tráfico generado por los buscadores de Internet.
    • Google Crawlers: el tráfico que ha generado Google.
    • Pages Not Found: el tráfico que ha llegado a algún error 404.
    • Logins and Logouts: todos los intentos de identificación y de acceso a nuestro panel de administración
    • Top Consumers: los visitantes que más páginas han visitado, lógicamente normalmente son buscadores web.
    • Top 404s: los visitantes bloqueados por visitar masivamente páginas inexistentes.
  • Blocked IPs: nos muestra las direcciones IP bloqueadas, nos permite bloquear alguna de forma manual y limpiar la tabla de direcciones IP bloqueadas, liberando a todas ellas.
    • IPs that are blocked from accessing the site: direcciones IP bloqueadas por hacer un uso indebido del sitio web, por ser visitantes indeseados o por proceder de sitios falsos.
    • IPs that are Locked Out from Login: direcciones IP bloqueadas por acceso indebido a wp-admin.
    • IPs who were recently throttled for accessing the site too frequently: direcciones IP bloqueadas por hacer un uso masivo de nuestro sitio web.
  • Country Bloking: esta opción sólo está disponible en la versión de pago y nos permite bloquear todo el tráfico procedente de un país, por ejemplo.
  • Scan Schedule: esta opción también es exclusiva de la versión de pago y nos permite programar escaneados de nuestros archivos.
  • Whois Lookup: nos permite averiguar todo lo posible sobre una dirección IP concreta.
  • Advanced Blocking: nos permite bloquear un rango de direcciones IP, un agente de usuario (User-Agent) e indicar la razón del bloqueo.
  • Wordfence

    Wordfence

    Options: aquí es donde radica la potencia de este gran plugin. En ellas podemos indicar los bloqueos que queremos que estén activos, las notificaciones de los mismos, las duraciones… En nuestro caso utilizamos la configuración que se puede ver en la captura de pantalla que acompaña a esta entrada y gracias a ella hemos rebajado hasta la mínima expresión el tráfico malicioso y los intentos de acceder de forma indebida a nuestro panel de administración.

Una vez que ya hemos bloqueado todo el spam y el tráfico indeseable posible, vamos a ver el tercer plugin que cerrará el círculo de la seguridad. En este caso se trata de Better WP Security, que nos permite hacer muchas, pero que muchas cosas. En él tenemos distintas pestañas:

  • Dashboard: Aquí tenemos toda la información posible sobre la seguridad de nuestro sitio web, y podemos acceder de forma directa a las principales características de Better WP Security. Su aspecto es similar a la captura de pantalla que acompañamos, además de información de sistema y del archivo .htaccess, que obviamente hemos omitido.
  • Better WP Security

    Better WP Security

    User: aquí podemos cambiar el nombre del usuario admin a otro más seguro, y modificar el ID 1 del mismo por otro mucho más seguro. De esta forma se evitan vulnerabilidad bien conocidas de WordPress y le pondremos las cosas un poco más complicadas a los “chicos malos”.

  • Away: en esta opción podemos programas horas y días de acceso a nuestro panel de administración, de esta forma dejará de estar disponible todos los días y a todas horas. En nuestro caso, dado que tenemos unos horarios muy anárquicos, no lo utilizamos, pero para aquellos que siempre entran a las mismas horas y/o días, les puede resultar muy útil.
  • Ban: aquí podemos bloquear servidores y agentes de usuario al más puro estilo de lo que podemos hacer con Wordfence, pero, dado que ya lo tenemos instalado, lo único que aprovechamos de esta opción es la lista negra de HackRepair.com.
  • Dir: en esta opción podemos cambiar el nombre de la carpeta wp-content por cualquier otro. Aunque esto mejora considerablemente la seguridad de nuestra instalación, nosotros nunca la utilizamos para evitar problemas con plugins, temas, cachés y demás opciones que hacen uso de esa carpeta. Si lo pruebas nos cuentas tu experiencia, por favor.
  • Backup: nos crea copias de seguridad de la base de datos, pero desde que descubrimos el fantástico plugin WP-DBManager, ya no lo utilizamos. Este plugin además de realizar copias de seguridad programadas, nos optimiza y nos repara las tablas de forma igualmente programada, además de permitirnos vaciar y borrar tablas, ejecutar consultas SQL, restaurar copias de seguridad… Recomendable al 100%.
  • Prefix: nos permite modificar el prefijo de las tablas de la base de datos, cosa que hace de forma totalmente automática y aleatoria, desde el original wp_, pero, dado que nosotros ya lo hemos modificado a nuestro gusto, tal y como explicamos en ¿Cómo cambiar el prefijo de las tablas de la base de datos de WordPress?, esta opción tampoco la utilizamos.
  • Hide: esta opción nos permite modificar las rutas de acceso al panel de administración, al registro y al logueo, pero nosotros tampoco lo utilizamos al tener bloqueado todo acceso indebido gracias a Wordfence. Además de que alguna vez nos ha dado algún problema al activarlo, pero, de nuevo, si lo pruebas nos cuentas tu experiencia.
  • Detect: aquí podemos ser informados de intrusiones en búsquedas de páginas inexistentes y de cambios de archivos, cosa que también hace Wordfence, así que podéis usar ambos o uno de los dos. En nuestro caso particular utilizamos sólo la detección de errores 404, cosa que hacemos en ambos plugins.
  • Login: Aquí, de nuevo al igual que Wordfence, nos permite bloquear un número máximo de intentos de accesos al panel de administración. En nuestro caso utilizamos ambos.
  • SSL: nos permite utilizar SSL en el sitio web, en el acceso y en el panel de administración. Lógicamente debemos tener soporte SSL instalado en nuestro servidor web. En nuestro caso, y de momento, no lo utilizamos.
  • Tweaks: aquí es donde están la mayor parte de las opciones de este plugin. Nosotros activamos todas, salvo la última, y bajamos a Suscriptor la obligación de crear contraseñas fuertes. Algunas de estas mejoras hay que meterlas en el archivo .htaccess y se agrupan en:
    • Mejoras del servidor.
    • Mejoras del encabezado.
    • Mejoras de escritorio.
    • Mejoras de fortaleza de contraseñas.
    • Otras mejoras.
  • Logs: aquí tenemos todos los registros de bloqueos, accesos indebidos, errores 404…, además podemos limpiar la base de datos y liberar bloqueos.

Por último nos queda meter algunos de los cambios en nuestro archivo .htaccess. La propuesta que nos hace Better WP Security tras seleccionar todo lo que os proponemos es esta:


<code># BEGIN Better WP Security
Options -Indexes

# Begin HackRepair.com Blacklist
RewriteEngine on
# Abuse Agent Blocking
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Bolt\ 0 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot\@yahoo\.com [NC,OR]
RewriteCond %{HTTP_USER_AGENT} CazoodleBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Default\ Browser\ 0 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^DIIbot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} discobot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ecxi [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailCollector [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [NC,OR]
RewriteCond %{HTTP_USER_AGENT} GT::WWW [NC,OR]
RewriteCond %{HTTP_USER_AGENT} heritrix [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [NC,OR]
RewriteCond %{HTTP_USER_AGENT} HTTP::Lite [NC,OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ia_archiver [NC,OR]
RewriteCond %{HTTP_USER_AGENT} IDBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} id-search [NC,OR]
RewriteCond %{HTTP_USER_AGENT} id-search\.org [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InternetSeer\.com [NC,OR]
RewriteCond %{HTTP_USER_AGENT} IRLbot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ISC\ Systems\ iRc\ Search\ 2\.1 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Java [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [NC,OR]
RewriteCond %{HTTP_USER_AGENT} libwww [NC,OR]
RewriteCond %{HTTP_USER_AGENT} libwww-perl [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Link [NC,OR]
RewriteCond %{HTTP_USER_AGENT} LinksManager.com_bot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} linkwalker [NC,OR]
RewriteCond %{HTTP_USER_AGENT} lwp-trivial [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Maxthon$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} MFC_Tear_Sample [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^microsoft\.url [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Microsoft\ URL\ Control [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Missigua\ Locator [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla\.*Indy [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla\.*NEWT [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^MSFrontPage [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Nutch [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [NC,OR]
RewriteCond %{HTTP_USER_AGENT} panscient.com [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [NC,OR]
RewriteCond %{HTTP_USER_AGENT} PECL::HTTP [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^PeoplePal [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [NC,OR]
RewriteCond %{HTTP_USER_AGENT} PHPCrawl [NC,OR]
RewriteCond %{HTTP_USER_AGENT} PleaseCrawl [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^psbot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Rippers\ 0 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} SBIder [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^SeaMonkey$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^sitecheck\.internetseer\.com [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Snoopy [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Steeler [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Toata\ dragostea\ mea\ pentru\ diavola [NC,OR]
RewriteCond %{HTTP_USER_AGENT} URI::Fetch [NC,OR]
RewriteCond %{HTTP_USER_AGENT} urllib [NC,OR]
RewriteCond %{HTTP_USER_AGENT} User-Agent [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Web\ Sucker [NC,OR]
RewriteCond %{HTTP_USER_AGENT} webalta [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^[Ww]eb[Bb]andit [NC,OR]
RewriteCond %{HTTP_USER_AGENT} WebCollage [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Wells\ Search\ II [NC,OR]
RewriteCond %{HTTP_USER_AGENT} WEP\ Search [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WWW-Mechanize [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} zermelo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus\.*Webster [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ZyBorg [NC]
RewriteRule ^.* - [F,L]
# Abuse bot blocking rule end
# End HackRepair.com Blacklist
<files .htaccess>
Order allow,deny
Deny from all
</files>

<files readme.html>
Order allow,deny
Deny from all
</files>

<files readme.txt>
Order allow,deny
Deny from all
</files>

<files install.php>
Order allow,deny
Deny from all
</files>

<files wp-config.php>
Order allow,deny
Deny from all
</files>

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteCond %{SCRIPT_FILENAME} !^(.*)wp-includes/ms-files.php
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]

RewriteCond %{REQUEST_METHOD} ^(TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]

RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^(.*)wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !^(.*)tudominio.es.*
RewriteCond %{HTTP_REFERER} !^http://jetpack\.wordpress\.com/jetpack-comment/ [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^(.*)$ - [F,L]

RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*\.(bash|git|hg|log|svn|swp|cvs) [NC,OR]
RewriteCond %{QUERY_STRING} etc/passwd [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} ftp\:  [NC,OR]
RewriteCond %{QUERY_STRING} http\:  [NC,OR]
RewriteCond %{QUERY_STRING} https\:  [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*("|'|<|>|\|{||).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|concat|insert|union|declare).* [NC]
RewriteCond %{QUERY_STRING} !^loggedout=true
RewriteCond %{QUERY_STRING} !^action=rp
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteCond %{HTTP_REFERER} !^http://maps\.googleapis\.com(.*)$
RewriteRule ^(.*)$ - [F,L]

</IfModule>
# END Better WP Security</code>

Gracias a las mejoras que nos proporcionan estos tres plugins, vamos a ganar en seguridad y, obviamente, en tranquilidad, asi que ya estáis tardando en instalarlos y configurarlos.

Sin comentarios


    Deje un comentario

    « »