Si se utiliza el servidor web Apache para operar sitios, es posible restringir el acceso mediante un archivo.htaccess, que se aplica a un directorio o a todos los subdirectorios anidados. Existen varios tipos de restricciones de acceso que pueden ser útiles en diferentes casos. Veamos estas posibles opciones:

Restricción de la dirección IP

El diseño de tal restricción es muy simple:

order allow,deny
deny from 1.1.1.1
deny from 2a01:230::6d0a:8406:c4e4:9e19
deny from 10.10
deny from 192.168.0.0/24
deny from domain.dom
allow from all

Requisitos del sistema para que estas reglas funcionen: Apache 2.2.x servidor web con el módulo mod_authz_host habilitado.

En este ejemplo, he dado todas las variaciones posibles de restricciones de acceso. Y a continuación analizaremos cada línea por separado.

La primera línea establece la lógica de las reglas posteriores. En qué orden se ejecutarán las reglas de bloqueo y permisivas.

La segunda y tercera líneas bloquean el acceso a direcciones IP específicas (ipv4 e ipv6, respectivamente).

La cuarta línea muestra que puede especificar una dirección IP parcial y, en este caso (como se indica en el ejemplo), se tratará como una subred /16.

La quinta línea es que puede bloquear redes y subredes completas especificando un rango.

Para que las opciones de bloqueo funcionen, como en la sexta línea, deberá habilitar el parámetro HostnameLookups.

Y finalmente, la última línea de permitir de todos dice que todos los demás pueden acceder.

Aunque Apache 2.2.x ha quedado obsoleto, todavía se usa con frecuencia. Las reglas serán diferentes para Apache 2.4.x:

<RequireAll>
Require all granted
Require not ip 1.1.1.1
Require not ip 2a01:230::6d0a:8406:c4e4:9e19
Require not ip 10.10
Require not ip 192.168.0.0/24
Require not host domain.dom
</RequireAll>

La primera y la última línea son directivas, que se utilizan para resaltar un grupo de reglas.

La segunda línea es un análogo del orden permitir, denegar + permitir de todos los bloques en Apache 2.2. Establece la lógica de las reglas.

Las líneas 3-6 son similares a las líneas 2-5 de las reglas de Apache 2.2, y la línea 7 es análoga a la línea 6 en Apache 2.2.

Restricción de contraseña

Consideremos la forma más sencilla de restringir el acceso con autorización de inicio de sesión y contraseña.:

AuthType Basic
AuthName "Access is limited by the password "
AuthUserFile "/path/to/.htpasswd"

Requisitos del sistema para este diseño: Apache 2.2.x o 2.4.x servidor web con módulos conectados auth_basic, authn_file.

Generación de contraseñas

La creación de un par de inicio de sesión y contraseña se lleva a cabo con la participación directa de la aplicación htpasswd, que se incluye en el paquete de distribución de Apache. Cuando se ejecuta sin parámetros, esta utilidad mostrará ayuda, cuya traducción tengo a continuación.:

Using:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password

        htpasswd -n[mdps] username
        htpasswd -nb[mdps] username password

 -c Create a new file.
 -n Do not update the file, display the result on the screen.
 -m Encrypt the password using [[MD5]].
 -d Encrypt the password using [[CRYPT]] (default).
 -p Do not encrypt the password (plaintext).
 -s Encrypt the password using [[SHA]].
 -b Specify the password in the command line parameter.
 -D Delete the specified user.
On [[Windows]], [[NetWare]] and [[TPF]] systems, the '-m' flag is used by default.
The '-p' flag may not work on all other systems.

Ejemplos de operación htpasswd

Por lo tanto, para crear un archivo con un nombre de usuario y contraseña para la autorización con una contraseña cifrada en MD5, deberá ejecutar el comando:

htpasswd -bcm /path/to/.htpasswd sampleuser samplepass

Agregar contraseña para el usuario sampleuser

El resultado será un archivo.htpasswd con una cadena:

sampleuser:$apr1$i5Kx715D$qkWbaZLztXohMGOdfCUy5/

Para agregar un usuario a un archivo existente, ejecute el comando

htpasswd -bm /path/to/.htpasswd sampleuser1 samplepass1

Actualización de la contraseña para el usuario sampleuser1

Si el archivo contiene más de un usuario y necesita eliminar uno, el comando se verá así:

htpasswd -D /path/to/.htpasswd sampleuser2

Eliminación de la contraseña para el usuario sampleuser2

Hojas de trucos

Algunos ejemplos más que pueden ser útiles a la hora de trabajar con ellos .htaccess.

Prohibir todo en Apache 2.2.x:

Order deny,allow
Deny from all

Prohibir todo en Apache 2.4.x:

Require all denied

Bloqueo de bots en Apache 2.2.x:

SetEnvIfNoCase User-Agent «DotBot» bad_bot
Deny from env=bad_bot

Bloqueo de bots en Apache 2.4.x:

<If «%{HTTP_USER_AGENT} =~ m#DotBot#i»>
Require expr %{HTTP_USER_AGENT} != ‘DotBot’

#DotBot es un ejemplo, puede haber muchos bots de este tipo.

Permitir el acceso a un archivo específico desde una IP específica en Apache 2.2.x:

<Files path to file>
Order Deny,Allow
Deny from all
Allow from 1.1.1.1
</Files>

Permitir el acceso a un archivo específico desde una IP específica en Apache 2.4.x:

<Files path to file>
Require ip 1.1.1.1
</Files>