Estoy configurando Solr usando Jetty. Me gustaría restringir el acceso a solo unas pocas direcciones IP. No parece inmediatamente obvio que esto se puede hacer usando Jetty. ¿Es posible y, de ser así, cómo?Restricción de direcciones IP para Jetty y Solr
Respuesta
Solr 4.2.1 utiliza Jetty 8.1.8. Jetty 8 (según lo notado por jonas789) no es compatible con .htaccess. En cambio, usa IPAccessHandler, que no tiene una gran documentación disponible. Tuve que jugar bastante para que funcione, así que estoy publicando una solución actualizada aquí.
IPAccessHandler gestiona una lista negra y una lista blanca, acepta intervalos arbitrarios de IP y admite la conexión de rutas de URI específicas a cada entrada de lista blanca/negra. IPAccessHandler también subclasifica a HandlerWrapper, que resulta ser importante.
La aplicación solr aún vive en un WebAppContext (como en la solución de Lyndsay), pero un WebAppContext ahora se rige por un ContextHandler, que reside en un ContextHandlerCollection que ocupa la ranura del primer controlador en el servidor. Para evitar que las solicitudes provenientes de una dirección IP incorrecta lleguen a la aplicación, debemos envolverla dentro de un IPAccessHandler en algún lugar a lo largo de esa ruta. IPAccessHandler se comporta de forma extraña si está en el lugar equivocado: intenté insertarlo antes de los controladores de contexto y dio 403 Prohibido a las máquinas equivocadas, lanzó tantrums NullPointerException sin mensajes de error adicionales, todo tipo de tonterías. Finalmente logré que funcionara envolviendo ContextHandlerCollection, en el nivel del servidor.
Vaya a etc/jetty.xml
y vaya a la sección de controladores. Luego envuelva el elemento ContextHandlerCollection existente de la siguiente manera:
<!-- =========================================================== -->
<!-- Set handler Collection Structure -->
<!-- =========================================================== -->
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<!-- here begins the new stuff -->
<New class="org.eclipse.jetty.server.handler.IPAccessHandler">
<Call name="addWhite">
<Arg>xxx.xxx.xxx.xxx</Arg>
</Call>
<Set name="handler">
<!-- here's where you put what was there before: -->
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Set>
</New>
<!-- here ends the new stuff -->
</Item>
<Item>
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
</Item>
<Item>
<New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
Recursos:
Lo he probado y funciona perfecto! Bloquea el acceso a 'solr admin' y al' cliente' utilizado desde otros hosts que no sea el utilizado por usted. – h4k1m
Llego independientemente a esta misma solución; No encontré esto primero. Para tu información, esta cosa de IPAccessHandler solo funciona con IPv4, es un error/limitación. Por lo tanto, al iniciar Java, pase: '-Djava.net.preferIPv4Stack = true'. Y para aquellos que buscan reglas sugeridas, la mía es así:
Encontré la solución.
En primer lugar, extraiga el contenido de solr.war en la carpeta example/webapps. A continuación, cree un archivo llamado .htaccess y colocarlo en el ejemplo webapps/carpeta/Solr (la que acaba de extraer) que contiene lo siguiente:
<Limit>
satisfy all
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Limit>
En el ejemplo etc/editar el archivo/jetty.xml y comentario la parte org.mortbay.jetty.deployer.WebAppDeployer. Entonces, finalmente, crear una carpeta en el ejemplo/llamados contextos (si es que aún no existe) y añadir un archivo llamado solr.xml a ella que contiene:
<Configure id="solr" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/webapps/solr</Set>
<Set name="contextPath">/solr</Set>
<Call name="setSecurityHandler">
<Arg>
<New class="org.mortbay.jetty.security.HTAccessHandler">
<Set name="protegee">
<Ref id="solr"/>
</Set>
</New>
</Arg>
</Call>
</Configure>
entonces poner en marcha su nueva Solr seguro!
Para otros, esto no funcionará en las versiones más nuevas de Jetty alojadas en eclipse. Básicamente, no hay más HTAccessHandler. Referencia: http://jetty.4.n6.nabble.com/jira-Created-JETTY-962-Clean-room-implementation-of-org-mortbay-jetty-securtiy-HTAccessHandler-td41205.html – jonas789
- 1. Restricción de IP con htaccess
- 2. Direcciones IP para dominios y sus subdominios de la misma?
- 3. Comprobando las direcciones IP
- 4. 3G/Edge/GPRS Direcciones IP y geocodificación
- 5. rangos de direcciones IP privadas
- 6. ¿Diferentes navegadores, direcciones IP diferentes?
- 7. UserHostAddress da direcciones IP incorrectas
- 8. Dns.GetHostEntry devuelve varias direcciones IP
- 9. Ordenando direcciones IP en vim
- 10. Asociar direcciones IP con países
- 11. IIS 7.5 obras de direcciones IP y nombre completo no
- 12. Técnicas de detección de ubicación para direcciones IP
- 13. lista de direcciones IP ordenar usando C#
- 14. Google App Engine: lista de direcciones IP
- 15. Bash lista completa de direcciones IP para un dominio
- 16. Cómo bloquear direcciones IP o clases IP en ASP.NET
- 17. ¿Cómo puedo analizar las direcciones IP y los rangos de direcciones con Perl?
- 18. ¿Las direcciones IP y los puertos deben considerarse confidenciales?
- 19. Restricción de IP para una carpeta de una aplicación web, en IIS7
- 20. ¿Cómo se escucha en múltiples direcciones IP?
- 21. IP todas las direcciones en una subred
- 22. Distinguir entre la intranet y direcciones IP oficiales
- 23. ¿Qué tipo debo almacenar direcciones IP para MySQL?
- 24. C#: Enumerar direcciones IP en un rango
- 25. ¿Todos los dominios tienen direcciones IP únicas?
- 26. Cómo configurar postgresql postgresql.conf listen_addresses para múltiples direcciones IP
- 27. Script Bash para obtener todas las direcciones IP
- 28. ¿Cómo crear un registro SPF para múltiples direcciones IP?
- 29. Jetty Classpath issues
- 30. ¿Cómo grep registro de acceso del servidor para direcciones IP únicas y una página específica?
I cree que no puede hacerlo directamente sin escribir un controlador o filtro personalizado. De todos modos, podrías poner Jetty detrás de otro servidor web como Apache. – Chewie