Generador de Fragmentos Require ip (Apache)
Genera directivas Require ip de Apache
IP Addresses / CIDRs
Apache Configuration
Enter IP addresses to generate Apache config
El Generador de fragmentos Apache Require ip crea directivas de control de acceso correctamente formateadas para Apache 2.4+ a partir de listas de direcciones IP o bloques CIDR. Ingresa direcciones como 192.168.1.0/24 y 10.0.0.0/8, elige modo de allowlist o blocklist, y obtén bloques completos <RequireAny> o <RequireAll> con sintaxis correcta de Require ip listos para pegar en archivos .htaccess, bloques <Directory> o directivas <Location>.
Entendiendo el control de acceso de Apache 2.4
Apache 2.4 introdujo un sistema de control de acceso completamente nuevo que reemplazó las directivas Allow/Deny/Order usadas en Apache 2.2 y versiones anteriores. Si todavía estás escribiendo Order deny,allow o Allow from 192.168.1.0/24, estás usando sintaxis deprecada que dejará de funcionar cuando tu servidor sea actualizado. El enfoque moderno usa directivas Require envueltas en etiquetas contenedoras como <RequireAny> y <RequireAll>, y la lógica es más explícita y menos propensa a errores una vez que la entiendes.
El viejo sistema de Apache 2.2 era notoriamente confuso. La directiva Order determinaba qué conjunto de reglas se evaluaba primero, y la interacción entre Allow y Deny llevó a innumerables servidores mal configurados. Order deny,allow significaba "denegar por defecto, luego aplicar reglas Allow" -- pero si accidentalmente escribías Order allow,deny, el comportamiento se invertía y tu directorio supuestamente restringido quedaba abierto. Apache 2.4 elimina esta ambigüedad con directivas contenedoras que hacen la lógica explícita: <RequireAny> significa "permitir si cualquier condición coincide" (lógica OR), y <RequireAll> significa "permitir solo si todas las condiciones coinciden" (lógica AND).
Este generador ahorra tiempo y previene errores de sintaxis al producir bloques de control de acceso Apache 2.4 correctamente estructurados. Maneja las etiquetas contenedoras, el formateo correcto de Require ip y el uso correcto de Require not ip para el modo blocklist. Si estás migrando desde Apache 2.2, actualizando desde nginx o construyendo nuevos controles de acceso desde cero, el generador te da configuración lista para desplegar que puedes pegar directamente en tus archivos de configuración de Apache.
Cómo generar directivas Apache Require ip
- Ingresa tus direcciones IP o bloques CIDR -- una por línea o separadas por comas.
- Selecciona el modo: allowlist (permitir las IPs listadas, denegar todo lo demás) o blocklist (denegar las IPs listadas, permitir todo lo demás).
- El generador produce un bloque completo de directiva Apache con la estructura contenedora correcta.
- Copia la salida en tu archivo
.htaccess, bloque<Directory>o bloque<Location>. - Reinicia Apache o recarga la configuración para aplicar los cambios.
Ejemplos de salida de control de acceso Apache 2.4
Modo allowlist
Entrada:
192.168.1.0/24
10.0.0.0/8
203.0.113.50
Salida:
<RequireAny>
Require ip 192.168.1.0/24
Require ip 10.0.0.0/8
Require ip 203.0.113.50
</RequireAny>
Modo blocklist
Entrada:
198.51.100.0/24
203.0.113.0/24
Salida:
<RequireAll>
Require all granted
Require not ip 198.51.100.0/24
Require not ip 203.0.113.0/24
</RequireAll>
Uso en bloque Directory
<Directory "/var/www/html/admin">
<RequireAny>
Require ip 192.168.1.0/24
Require ip 10.10.0.0/16
</RequireAny>
</Directory>
Comparación de sintaxis Apache 2.2 vs. Apache 2.4
| Característica | Apache 2.2 (deprecado) | Apache 2.4 (actual) |
|---|---|---|
| Permitir IP específica | Allow from 192.168.1.0/24 | Require ip 192.168.1.0/24 |
| Denegar IP específica | Deny from 10.0.0.0/8 | Require not ip 10.0.0.0/8 |
| Denegar por defecto | Order deny,allow / Deny from all | Require all denied |
| Permitir por defecto | Order allow,deny / Allow from all | Require all granted |
| Contenedor | No necesario | <RequireAny> o <RequireAll> |
Cuándo usar el generador Apache Require ip
- Migración de Apache 2.2 a 2.4 -- Convierte reglas heredadas
Allow/Denya sintaxis modernaRequire ipdurante actualizaciones del servidor. - Protección de directorios de administración -- Restringe el acceso a
/admin,/phpmyadmino/server-statussolo a IPs de confianza. - Migración entre plataformas -- Convierte reglas
allow/denyde nginx o reglas de iptables a formato Apache al cambiar de servidor web. - Despliegue con .htaccess -- Genera reglas de acceso para configuraciones distribuidas donde los archivos
.htaccesscontrolan el acceso por directorio. - Configuraciones multi-entorno -- Crea archivos include separados para allowlists de IP de desarrollo, staging y producción.
Cómo funciona el control de acceso de Apache 2.4
RequireAny vs. RequireAll
Apache 2.4 usa directivas contenedoras para controlar la relación lógica entre las reglas de acceso:
<RequireAny>-- Se otorga acceso si cualquier directiva contenida coincide (lógica OR). Se usa para allowlists donde cualquier IP listada debe ser permitida.<RequireAll>-- Se otorga acceso solo si todas las directivas contenidas coinciden (lógica AND). Se usa para blocklists donde el tráfico debe pasar todas las condiciones.<RequireNone>-- Se deniega el acceso si cualquier directiva contenida coincide. Útil dentro de<RequireAll>para excepciones.
Ubicación de directivas
Las directivas de control de acceso funcionan en varios contextos:
# En httpd.conf o configuración de vhost
<Location "/api/internal">
<RequireAny>
Require ip 10.0.0.0/8
</RequireAny>
</Location>
# En .htaccess (si AllowOverride AuthConfig está configurado)
<RequireAny>
Require ip 192.168.1.0/24
</RequireAny>
Error común: contenedor faltante
Una directiva Require ip sin contenedor funciona pero se comporta de manera diferente cuando se combina con otras directivas de autenticación. Siempre envuelve las reglas de acceso en <RequireAny> o <RequireAll> para un comportamiento predecible:
# Frágil -- puede entrar en conflicto con otros módulos de auth
Require ip 192.168.1.0/24
# Robusto -- define explícitamente la lógica de evaluación
<RequireAny>
Require ip 192.168.1.0/24
</RequireAny>
Combinando autenticación por IP y por usuario
Uno de los patrones más comunes es permitir el acceso ya sea desde un rango de IP de confianza o con credenciales válidas:
<RequireAny>
Require ip 10.0.0.0/8
Require valid-user
</RequireAny>
Esto significa que los usuarios en la red interna entran automáticamente, mientras que los usuarios externos deben iniciar sesión. El contenedor <RequireAny> hace explícita esta lógica OR.
Consejos prácticos para el control de acceso en Apache
La fuente más frecuente de confusión al migrar a Apache 2.4 es que tanto la sintaxis antigua como la nueva pueden parecer funcionar simultáneamente si el módulo mod_access_compat está cargado. Este módulo proporciona compatibilidad hacia atrás para las directivas Allow/Deny/Order, así que tu configuración antigua sigue funcionando después de una actualización -- pero mezclar sintaxis antigua y nueva en el mismo bloque <Directory> crea un comportamiento impredecible. Al migrar, convierte todo de una vez o asegúrate de que la sintaxis antigua y la nueva nunca aparezcan en el mismo ámbito. El generador produce solo sintaxis Apache 2.4, así que verifica que mod_access_compat no esté interfiriendo antes de desplegar.
Para despliegues con .htaccess, recuerda que la configuración del servidor debe permitir explícitamente las anulaciones de control de acceso. La directiva AllowOverride en la configuración principal debe incluir AuthConfig (o All) para el directorio en cuestión. Si AllowOverride None está configurado, Apache ignora silenciosamente todas las directivas de .htaccess, incluyendo tus reglas Require ip cuidadosamente elaboradas. Este es un problema común en hosting compartido donde el administrador del servidor controla AllowOverride.
Al proteger directorios sensibles como /phpmyadmin o /server-status, considera combinar restricciones por IP con autenticación. El control de acceso solo por IP es vulnerable a la suplantación de IP a nivel de aplicación (encabezados X-Forwarded-For falsificados) si Apache está detrás de un proxy inverso. Configura RemoteIPHeader y RemoteIPTrustedProxy correctamente para prevenir la inyección de encabezados, y agrega Require valid-user como un segundo factor para que incluso los atacantes en tu red interna necesiten credenciales para acceder a herramientas críticas.
Preguntas frecuentes
¿Por qué obtengo un error 500 después de agregar directivas Require ip?
La causa más común es usar sintaxis de Apache 2.2 (Allow from, Deny from) en un servidor Apache 2.4, o viceversa. Verifica tu versión de Apache con httpd -v o apache2 -v y usa la sintaxis correspondiente. El generador produce sintaxis exclusivamente para Apache 2.4+.
¿Puedo combinar autenticación basada en IP y basada en usuario?
Sí. Usa <RequireAny> para permitir el acceso si el usuario está desde una IP de confianza o tiene credenciales válidas:
<RequireAny>
Require ip 10.0.0.0/8
Require valid-user
</RequireAny>
¿Funciona esto con archivos .htaccess?
Sí, siempre que la configuración AllowOverride del servidor incluya AuthConfig. Si AllowOverride None está configurado en la configuración del servidor, las directivas de .htaccess se ignoran silenciosamente.
¿Cómo sé si mi servidor usa Apache 2.2 o 2.4?
Ejecuta httpd -v o apache2 -v en la línea de comandos. Si la versión comienza con 2.4, usa la sintaxis Require ip que produce este generador. Si comienza con 2.2, necesitas la sintaxis antigua Allow/Deny -- pero también deberías planificar una actualización, ya que Apache 2.2 llegó al fin de su vida útil en 2018.
¿Cuál es la diferencia entre Require all denied y Require not ip?
Require all denied bloquea todo el tráfico incondicionalmente. Require not ip 10.0.0.0/8 bloquea el tráfico de un rango específico mientras permite todo lo demás (cuando se usa dentro de <RequireAll> con Require all granted). Usa Require all denied como respaldo para directorios completamente bloqueados, y Require not ip para blocklists dirigidas.
¿Puedo usar nombres de host en lugar de direcciones IP?
Sí, Apache soporta Require host example.com que realiza una búsqueda DNS inversa. Sin embargo, esto es más lento (DNS agrega latencia a cada solicitud), menos confiable (DNS puede ser falsificado) y no se recomienda para configuraciones críticas de seguridad. Usa direcciones IP o bloques CIDR para el control de acceso.
Herramientas relacionadas
- CIDR Allow/Deny Snippet Generator (nginx) - Genera directivas allow/deny de nginx a partir de una lista CIDR
- Allowlist Builder - Construye una allowlist CIDR mínima a partir de una lista de IPs
- Blocklist Builder - Construye una blocklist CIDR mínima a partir de una lista de IPs
- iptables Rule Generator - Genera reglas de iptables desde CSV
- IP:Port Allowlist Validator - Valida entradas masivas de IP:puerto