Este artículo explica cómo restringir el acceso a un sitio o directorio en un servidor Web Apache para que sólo sea accesible desde cierta dirección IP o red.
Tal vez parezca un error filtrar el acceso a un sitio Web a nivel aplicación (servidor Web) en lugar de a nivel TCP/IP (mediante el firewall netfilter/iptables del kernel Linux). Sin embargo, en ciertos casos un mismo servidor Web provee acceso a diferentes sitios a través del mismo nombre de host o IP (y puerto), donde algunos son de acceso público mientras que otros son de acceso restringido. Por ende, en estos escenarios no es posible filtrar el acceso por IP a través del firewall, ya que se filtra el acceso a un puerto e IP destino de forma completa (todo o nada).
Para filtrar el acceso a un recurso en la capa de aplicación, Apache provee el módulo authz_host. Vemos directamente un ejemplo.
Se desea permitir el acceso a un sitio o aplicación Web (accesible mediante el alias "/app") sólo a clientes dentro de la subred 192.168.134.0/24
. La configuración del módulo authz_host varía entre versiones de Apache:
Apache 2.2:
Alias /app /usr/local/app/www <Directory "/usr/local/app/www"> Order deny,allow Deny from all Allow from 192.168.134 </Directory>
Apache 2.4:
Alias /app /usr/local/app/www <Directory "/usr/local/app/www"> Requiere ip 192.168.134 </Directory>
Referencias
- Access Control - Apache HTTP Server Version 2.2
- Apache Module mod_authz_host - Apache HTTP Server Version 2.2
- Access Control - Apache HTTP Server Version 2.4
- Apache Module mod_authz_host - Apache HTTP Server Version 2.4
- Upgrading to 2.4 from 2.2 - Apache HTTP Server Version 2.4