¿Necesitas proteger tu web de WordPress con un firewall de nivel servidor? Es imperativo proteger el archivo .htaccess de nuestro sitio de WordPress con un firewall confiable y eficiente. Esto, para asegurarnos de no exponer este archivo a robots maliciosos, exploits, malware, virus y similares.
El Firewall 6G de Perishable Press está diseñado específicamente para proteger los sitios de WordPress de estos peligrosos ataques en Internet.
En este artículo de Ayuda Hosting, les mostraremos cómo proteger una web de WordPress con un firewall de nivel servidor. Además, lo haremos empleando códigos de una manera sencilla y en pocos pasos.
Índice
¿Cómo proteger una web de WordPress con un firewall de nivel servidor?
El rendimiento de un sitio web mejora cuando se usa un firewall basado en códigos, frente a los plugins, porque protege el sitio a nivel del servidor. Asimismo, elimina la necesidad de cargar mediante PHP, la base de datos, los activos del sitio o cualquier codificación adicional. Además, mantiene el tiempo de carga de nuestro sitio web más rápido que una solución empleando un plugin.
Nota: Debemos asegurarnos de hacer una copia de seguridad de nuestro sitio web o emplear un sitio de prueba antes de seguir los pasos que señalaremos a continuación.
Tan fácil como copiar y pegar
A continuación, con cualquier cliente FTP, nos vamos a la carpeta raíz de nuestro sitio web y buscamos el archivo .htaccess.
La mayoría de las instalaciones de WordPress vienen con el archivo .htaccess por defecto. Sin embargo, si no tenemos dicho archivo, podemos crearlo.
A continuación, copiamos y pegamos al principio de nuestro archivo .htaccess el siguiente código:
# 6G FIREWALL/BLACKLIST # @ https://perishablepress.com/6g/ # 6G:[QUERY STRING] <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} (eval\() [NC,OR] RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR] RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR] RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR] RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR] RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR] RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR] RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR] RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR] RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR] RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|insert|md5|select|union) [NC] RewriteRule .* - [F] </IfModule> # 6G:[REQUEST METHOD] <IfModule mod_rewrite.c> RewriteCond %{REQUEST_METHOD} ^(connect|debug|move|put|trace|track) [NC] RewriteRule .* - [F] </IfModule> # 6G:[REFERRER] <IfModule mod_rewrite.c> RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000,}) [NC,OR] RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC] RewriteRule .* - [F] </IfModule> # 6G:[REQUEST STRING] <IfModule mod_alias.c> RedirectMatch 403 (?i)([a-z0-9]{2000,}) RedirectMatch 403 (?i)(https?|ftp|php):/ RedirectMatch 403 (?i)(base64_encode)(.*)(\() RedirectMatch 403 (?i)(=\\\'|=\\%27|/\\\'/?)\. RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&?)/?$ RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\\"\\\") RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\\|\{|\}|\[|\]|\|) RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|muieblack) RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ) RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$ RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php </IfModule> # 6G:[USER AGENT] <IfModule mod_setenvif.c> SetEnvIfNoCase User-Agent ([a-z0-9]{2000,}) bad_bot SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot # Apache < 2.3 <IfModule !mod_authz_core.c> Order Allow,Deny Allow from all Deny from env=bad_bot </IfModule> # Apache >= 2.3 <IfModule mod_authz_core.c> <RequireAll> Require all Granted Require not env bad_bot </RequireAll> </IfModule> </IfModule>
Una vez pegado el código, no se requieren cambios adicionales, solo guardar y subir de nuevo el archivo .htaccess. Sin embargo, volvemos a verificar que no hayamos cometido ningún error al copiar y pegar el código. Asimismo, esta verificación nos garantiza que el servidor no nos arroje un error en caso de encontrarlo.
Nota: Si tenemos problemas, simplemente eliminamos la codificación de Firewall 6G y consultamos con la página de inicio oficial de Firewall 6G .htaccess para obtener sugerencias sobre la solución de problemas.
Seguidamente, después de cargar el código, regresamos a nuestro sitio para asegurarnos de que todos los enlaces y puntos de acceso funcionen correctamente.
¿Cómo funciona el código?
En esta sección, veremos cómo funciona el código y cómo protege nuestro sitio web. Además, la instalación de Firewall 6G para .htaccess es fácil. Sin embargo, están sucediendo muchas cosas detrás de escena.
La primera parte del código Firewall 6G verifica la cadena de consulta y la protege de cualquier malware entrante.
# 6G FIREWALL/BLACKLIST # @ https://perishablepress.com/6g/ # 6G:[QUERY STRING] <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} (eval\() [NC,OR] RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR] RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR] RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR] RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR] RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR] RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR] RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR] RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR] RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR] RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|insert|md5|select|union) [NC] RewriteRule .* - [F] </IfModule>
La segunda parte, el Firewall 6G bloquea todas las solicitudes innecesarias para evitar un ataque.
Estas dos partes del código son importantes para la estabilidad general del firewall.
# 6G:[REQUEST METHOD] <IfModule mod_rewrite.c> RewriteCond %{REQUEST_METHOD} ^(connect|debug|move|put|trace|track) [NC] RewriteRule .* - [F] </IfModule>
La siguiente sección del código bloquea referencias incorrectas.
El firewall a nivel de servidor prohíbe los valores de referencia demasiado largos, junto con referencias inusualmente erróneas. Además, podemos agregar tantas referencias nuevas a esta lista como queramos.
# 6G:[REFERRER] <IfModule mod_rewrite.c> RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000,}) [NC,OR] RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC] RewriteRule .* - [F] </IfModule>
La siguiente parte del código verifica la sección principal de la URL, incluido todo excepto la cadena de consulta. No obstante, si sólo incluyera una parte del Firewall 6G, esta es la sección a elegir.
Esta sección contiene un bloqueo contra la basura.
# 6G:[REQUEST STRING] <IfModule mod_alias.c> RedirectMatch 403 (?i)([a-z0-9]{2000,}) RedirectMatch 403 (?i)(https?|ftp|php):/ RedirectMatch 403 (?i)(base64_encode)(.*)(\() RedirectMatch 403 (?i)(=\\\'|=\\%27|/\\\'/?)\. RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&?)/?$ RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\\"\\\") RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\\|\{|\}|\[|\]|\|) RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|muieblack) RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ) RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$ RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php </IfModule> # 6G:[USER AGENT] <IfModule mod_setenvif.c> SetEnvIfNoCase User-Agent ([a-z0-9]{2000,}) bad_bot SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot # Apache < 2.3 <IfModule !mod_authz_core.c> Order Allow,Deny Allow from all Deny from env=bad_bot </IfModule> # Apache >= 2.3 <IfModule mod_authz_core.c> <RequireAll> Require all Granted Require not env bad_bot </RequireAll> </IfModule> </IfModule>
La siguiente parte del código verifica los agentes del usuario y bloquea a muchos de los delincuentes moderados.
# 6G:[BAD IPS] <Limit GET HEAD OPTIONS POST PUT> Order Allow,Deny Allow from All # uncomment/edit/repeat next line to block IPs # Deny from 123.456.789 </Limit>
Esta sección final del código 6G proporciona un lugar para bloquear fácilmente direcciones IP erróneas. Para esto, lo que necesitamos hacer es copiar y pegar la línea correcta [# Deny from 123.456.789]. Esto podemos hacerlo tantas veces como sea necesario para crear marcadores de posición. Seguidamente, regresamos y actualizamos las líneas para que coincidan con las direcciones IP que deseamos bloquear. Es bueno saber que no hay límite para la cantidad de direcciones IP que podemos evitar.
Un pequeño esfuerzo para mucha protección
No hacer nada más que copiar y pegar el 6G Server Level Firewall pre-creado puede proteger nuestro sitio de múltiples maneras. Cada sección de código se une para formar un firewall rápido y potente que se integra perfectamente con una instalación predeterminada para sitios de WordPress. No interfiere con plugins, temas y cumple con los estándares API de WordPress.
Mantengamos nuestro sitio seguro para nosotros y para nuestros usuarios. No olvidemos verificar las opciones de firewall gratuito a nuestra disposición.
Esperamos que este artículo sobre cómo proteger una web de WordPress con un firewall de nivel servidor, les haya resultado útil. Más información sobre este y otros temas en Ayuda Hosting.