web-dev-qa-db-fra.com

Comment puis-je restreindre l'accès à certaines URL par IP source dans Tomcat?

Je souhaite restreindre l'accès à certaines URL dans ma webapp Tomcat. Seules 3 adresses IP connues doivent être autorisées à accéder aux URL qui correspondent à un certain modèle.

par exemple. http://example.com:1234/abc/personId

Comment puis-je atteindre cet objectif?

14
Randeep

Utilisez org.Apache.catalina.filters.RemoteAddrFilter et mappez-le sur l'URL que vous souhaitez protéger. Voir http://Tomcat.Apache.org/Tomcat-7.0-doc/config/filter.html#Remote_Address_Filter pour les détails de configuration.

12
Mark Thomas

Vous pouvez le faire avec ceci dans server.xml:

 <Valve
    className="org.Apache.catalina.valves.RemoteAddrValve"
        deny="117.40.83.*,122.224.95.*,119.255.28.*,218.8.245.*,218.85.139.*,219.117.197.*,124.89.39.*,58.18.172.*,180.153.225.*"
        />

(ce sont de vraies adresses IP: propriétaires, vous savez pourquoi: - |) mais comme vous pouvez le voir c'est vraiment un bloqueur pas un facilitateur. Une meilleure solution serait de placer Apache HTTPD devant lui avec les instructions Deny All et Allow From, qui vous permettront d'autoriser uniquement les 3 adresses IP dont vous avez besoin pour accéder au service.

4
user207421

Vous pouvez utiliser quelque chose comme ça pour bloquer les IPS et si vous êtes derrière un proxy:

<Context path="/manager" docBase="manager" reloadable="true" privileged="true" >
  <Valve className="org.Apache.catalina.valves.RemoteIpValve"/>
  <Valve className="org.Apache.catalina.valves.RemoteHostValve" allow="<your IP regex>"/>
</Context>
3
The-Bat

Je ne restreindrais pas l'accès par adresse IP, pour les raisons suivantes:

  • Ce faisant, dites des adresses internes, par exemple 10.0.0.0/24, signifie que vous faites implicitement confiance à toute cette gamme. Que se passe-t-il s'il est compromis?
  • Tous vos clients ne peuvent pas ou ne pourront pas obtenir des adresses IP statiques - en supposant que vous souhaitiez autoriser certains clients à y accéder.
  • Clients derrière les périphériques de passerelle où les proxys ne prennent pas en charge x-forwarded-for les en-têtes vont juste avoir l'IP du périphérique passerelle; en faisant confiance à ce que IP approuve tout le monde derrière la passerelle, en supposant à nouveau que vous souhaitiez donner accès à certains clients.

Au lieu de cela, si vous devez exécuter un système où certains appels ne sont accessibles qu'à certains utilisateurs, j'utiliserais l'authentification - les certificats SSL côté client fonctionnent assez bien à cette fin. Alternativement, vous pouvez utiliser quelque chose comme OAuth .

0
user257111