Fondo Servidores

Portal de Ayuda

¿Cómo bloquear los accesos con el .htaccess?

Estás en Inicio > Hosting > Programación > ¿Cómo bloquear los accesos con el .htaccess?

¿Cómo bloquear los accesos con el .htaccess?

En dinahosting siempre te recomendamos mejorar de forma constante la seguridad de tu página web. Una de las formas más comunes de trabajar en esta seguridad es usar reglas para bloquear los accesos innecesarios en el fichero .htaccess.

A continuación te mostramos algunas de las reglas más comunes que se pueden añadir al fichero .htaccess para mantener tu hosting seguro.

Reglas para bloquear accesos

Bloquear el acceso al propio archivo .htaccess

Antes de nada, recomendamos bloquear los accesos al propio fichero .htaccess. Es muy sencillo y solo necesitamos añadir estas cuatro líneas: 

<Files .htaccess>
order allow,deny
deny from all
</Files>

Impedir los accesos a un archivo específico

Si deseamos bloquear los accesos a un archivo en concreto, podemos hacerlo con el siguiente ejemplo que bloquea los accesos al fichero llamado “nombre.jpg”: 

<files nombre.jpg>
order allow,deny
deny from all
</files>

Bloquear los accesos a varias extensiones

Igual que en el ejemplo anterior, podemos bloquear los accesos a una o varias extensiones. A continuación podemos ver cómo bloquear los accesos a archivos de distintas extensiones: 

<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>

Disfrazar la extensión de los archivos

Otro modo de aumentar la seguridad de tu web es cambiando las extensiones de tus archivos. Con este ejemplo, podemos modificar los ficheros PHP a .foo y se reconocerán como .php:

AddType application/x-httpd-php .foo

Proteger el directorio bloqueando el acceso mediante una IP y/o dominio

Si vemos peticiones indebidas desde una IP o desde un dominio, podemos bloquearlos. Con este código estamos bloqueando las peticiones GET, POST y PUT desde la IP 123.45.67.890 y desde el dominio ejemplo.com:

<Limit GET POST PUT>
order allow,deny
allow from all
deny from 123.45.67.890
deny from .*ejemplo\.com.*
</Limit>

Denegar todo acceso a un directorio excepto a la IP especificada

Al contrario de la regla anterior, podemos permitir esas peticiones solo desde una IP o un dominio: 

<Limit GET POST PUT>
order deny,allow
deny from all
allow from 123.123.123.123
allow from .*ejemplo\.com.*
</Limit>

Bloquear visitantes que provienen del dominio especificado

A menudo hay muchas peticiones que pueden sobrecargar tu servidor, como por ejemplo aquellas generadas desde foros. Una manera de evitar esto es bloquear las peticiones que vienen desde un dominio en concreto. En este ejemplo se bloquean los accesos que provienen de los dominios foro1.com y foro2.com: 

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} foro1\.com NC,OR
RewriteCond %{HTTP_REFERER} foro2\.com NC,OR
RewriteRule .* - F
</ifModule>

Denegar o permitir acceso a IP

Podemos permitir o bloquear los accesos desde una IP o desde distintos rangos. Esto puede ser muy útil si queremos evitar accesos desde países en concreto o si solo queremos permitir accesos desde una IP. A continuación veremos ambos ejemplos:  

Denegar rangos de IP:

Deny from 99.88.77.66
Deny from 99.88.77
Deny from 99.88
Deny from 99

Permitir rangos de IP:

Allow from 99.88.77.66
Allow from 99.88.77
Allow from 99.88
Allow from 99

Evitar Hotlinking

Hotlinking es una práctica muy utilizada que puede sobrecargar el servidor donde tienes alojado tu página web. Esto ocurre cuando una persona incluye una imagen en su página web, pero en realidad está alojado en tu servidor. Es decir, no tiene esa imagen en su servidor, sino que hace una petición a tu página para cargar la imagen. Esto puede crear peticiones innecesarias y consumo de recursos en el servidor donde estás alojado.

Esta práctica se puede evitar fácilmente mediante el .htaccess con el siguiente código donde bloqueamos la carga de imágenes a no ser que vengan desde dominio1.com y dominio2.com e indicamos qué imagen mostrar en lugar de la que nos solicitan, dominio.com/fichero.jpe: 

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?dominio1\.com/.*$ NC
RewriteCond %{HTTP_REFERER} !^http://(www\.)?dominio2\.com/.*$ NC
RewriteRule .*\.(gif|jpg)$ http://www.dominio.com/fichero.jpe R,NC,L
</ifModule>

Bloquear robots maliciosos

Los robots, o también conocido como bots, son programas que realizan tareas automáticamente. Es muy común ver peticiones por parte de bots que pertenecen a motores de búsqueda como Google, Yahoo, etc. pero también existen bots maliciosos. Estos bots maliciosos pueden ser utilizados para generar carga, robar información delicada, crear phishing y mucho más. Por este motivo, es importante poder saber como bloquear las peticiones generadas por los mismos. 

Una forma de poder hacer esto es con el siguiente código: 

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow OR
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule .* - F

En este ejemplo, estamos redireccionando las peticiones generadas por los bots llamados “BlackWidow” y “Zeus” a una dirección inexistente. Se puede personalizar el error generado a estos robots modificando la última línea RewriteRule.

Bloquear “referers” específicos

El referer es una cabecera HTTP que contiene la dirección URL desde donde proviene la visita. Por ejemplo, si estamos en un foro llamado foro.com y accedemos mediante ella al tu página dominio.com, en la cabecera HTTP, el referer será foro.com. Esta regla es útil para evitar visitas que provienen de páginas ilícitas o problemáticas. 

En este ejemplo se bloquean las visitas de usuarios que vienen desde ejemplo.com:

RewriteCond %{HTTP_REFERER} ^http://www.ejemplo.com$
RewriteRule !^http://^/.\.dominio\.com.* - F,L

Protección contra ataques DDoS, limitando el tamaño de archivos que suben al servidor

Al realizar ataques DDoS, las peticiones pueden venir acompañadas de intentos de subidas de ficheros de varios megas para saturar el ancho de banda del servidor. Con la directiva “LimitRquestBody” podemos establecer un límite al tamaño de los ficheros que se intenta subir mediante peticiones. Esta directiva es útil si permites que los usuarios de tu sitio suban archivos (10000000 bytes equivale a 10 megabytes):

LimitRequestBody 10000000

Bloqueo para WordPress contra ataques wp-login en .htaccess

Un ataque muy común es el producido contra el wp-login de un WordPress. Consiste en generar varias peticiones POST que puede llegar a sobrecargar el servidor donde tienes alojada tu página web o incluso acceder a la administración de tu WordPress mediante fuerza bruta. Una manera eficaz de evitar esto es usando el .htaccess con el siguiente código: 

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_REFERER} !^<a class="moz-txt-link-freetext" href="http://%28.*%29?.dominio.com">http://(.*)?.dominio.com</a> NC
RewriteCond %{REQUEST_URI} ^/wp-login\.php(.*)$ OR
RewriteCond %{REQUEST_URI} ^/wp-admin$
RewriteRule ^(.*)$ - R=403,L
</IfModule>

Protección de carpetas con contraseña mediante .htaccess y .htpasswd

De este modo puedes evitar que cualquier usuario o bot acceda a un directorio en concreto, como por ejemplo, un entorno de staging, incluso si ignoran el robots.txt.

Dentro de tu fichero .htaccess agrega las siguientes líneas:

AuthType Basic
AuthName "Acceso Restringido"
AuthUserFile /ruta/al/directorio/protegido/.htpasswd
Require valid-user

Recuerda cambiar “/ruta/al/directorio/protegido/.htpasswd” por la ruta real de tu hosting que quieres proteger

Una vez creado, en la misma ruta del directorio que queremos proteger, utilizamos el siguiente comando via SSH

htpasswd -c /etc/apache2/.htpasswd usuario

Esto te pedirá una contraseña y la guardará cifrada en este fichero.
cada vez que quieras acceder a ese directorio vía web, necesitarás la contraseña para acceder.

Y esto es todo. Si quieres ampliar la información, en este post te explicamos cómo aplicar algunas medidas de seguridad en tu WordPress. También puedes acceder a la sección de bloqueos de tu hosting dentro del Panel de Control. 

Vídeos relacionados

Webinar | Cómo escoger un hosting para tu proyecto web

Webinar | Cómo escoger un hosting para tu proyecto web

Tanto si vendes productos o servicios como si tienes un blog o un sitio de noticias, elegir un buen hosting para tu web es …

Webinar | Introducción a la Optimización en WordPress (WPO)

Webinar | Introducción a la Optimización en WordPress (WPO)

Mantener tu web en WordPress rápida y segura ha de ser una de tus prioridades online. Aquí te explicamos algunas de las …

Tutoriales de Ayuda. Panel Dinahosting | ¿Cómo sé si un correo se ha enviado correctamente?

Tutoriales de Ayuda. Panel Dinahosting | ¿Cómo sé si un correo se ha enviado correctamente?

Comprueba si un envío de correo se ha efectuado correctamente desde tu Panel de Control de dinahosting, accediendo al menú …

Skip to content