Подтвердить что ты не робот

Как ограничить доступ к определенным URL-адресам по исходному IP-адресу в Tomcat?

Я хочу ограничить доступ к определенным URL-адресам в моем Tomcat webapp. Только 3 известных IP-адреса должны иметь доступ к URL-адресам, которые соответствуют определенному шаблону.

например. http://example.com:1234/abc/personId

Как я могу это достичь?

4b9b3361

Ответ 2

Вы можете сделать это с помощью этого в 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.*"
        />

(это настоящие IP-адреса: владельцы, вы знаете, почему: - |), но, как вы видите, это действительно блокиратор, а не средство защиты. Лучшим решением было бы поставить Apache HTTPD перед ним с помощью команд Deny All и Allow From, которые позволят вам разрешить только 3 IP-адреса, необходимые для доступа к службе.

Ответ 3

Вы можете использовать что-то вроде этого, чтобы блокировать ips, и если вы находитесь за прокси-сервером:

<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>

Ответ 4

Я бы не ограничивал доступ по IP-адресу по следующим причинам:

  • Выполнение этого действия означает внутренние адреса, например. 10.0.0.0/24, означает, что вы неявно доверяете всему этому диапазону. Что произойдет, если он скомпрометирован?
  • Не все ваши клиенты могут или смогут получать статические IP-адреса - при условии, что вы захотите разрешить доступ некоторым клиентам.
  • Клиенты за шлюзовыми устройствами, в которых прокси не поддерживают заголовки x-forwarded-for, будут иметь IP-адрес шлюзового устройства; полагая, что IP доверяет всем, кто находится за шлюзом, снова полагая, что вы захотите предоставить некоторым клиентам доступ.

Вместо этого, если вам нужно запустить систему, где некоторые вызовы доступны только для определенных пользователей, я бы использовал аутентификацию - сертификаты на стороне клиента SSL работают достаточно хорошо для этой цели. В качестве альтернативы вы можете использовать что-то вроде OAuth.