Как вы упомянули, RemoteAddrValve
слишком широк для ваших нужд. Решение состоит в том, чтобы использовать RewriteValve
, соответствующий обоим условиям (IP + путь) и правилу, запрещающий трафик. Не забудьте прочитать Tomcat doc , чтобы узнать больше о переписываниях.
Сначала добавьте соответствующий клапан в определение своего хоста в server.xml:
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
Предполагая, что ваше имя хоста является именем по умолчанию (localhost), вам нужно создать файл $CATALINA_BASE/conf/Catalina/localhost/rewrite.config
с таким содержанием:
RewriteCond %{REMOTE_ADDR} bad.ip.addr.ess
RewriteRule ^/forbidden-path(.*)$ / [F]
Флаг F отправит запрещенный HTTP-код 403. Вы можете изменить правило по своему усмотрению, например, перенаправить на страницу входа (флаг R).
Если ваш сайт открыт в Интернете, не забывайте, что любой может использовать прокси, чтобы скрыть свой реальный IP-адрес. Если вы используете обратный прокси-сервер перед вашим Apache, вам может потребоваться настроить его соответствующим образом, чтобы реальный IP-адрес вашего Tomcat пользователя не мог видеть только ваш обратный прокси-сервер.