Ограничить внешний доступ Tomcat Webapp по IP
Я успешно могу получить доступ к своему веб-приложению, используя внешний IP-адрес для моего сервера. Однако сейчас я хотел бы ограничить доступ к серверу по IP.
Я добавил следующее в conf/server.xml:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="true"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\\.0\\.0\\.1|192\\.*\\.*\\.*|0\\.*\\.*\\.*|<my external machine ip>" deny=""/>
Однако я все еще не могу получить доступ к веб-приложению от моего. Если я удаляю блок RemoveAddrValue, я могу получить доступ к веб-приложению с внешнего компьютера.
Я использую apache-tomcat-7.0.47
Как я могу ограничить внешний доступ через IP. Это правильный подход?
3 ответа
Envite прав, подход с брандмауэром намного проще:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -s $SOME_IP1 --dport 8080 -j ACCEPT
iptables -A INPUT -s $SOME_IP2 --dport 8080 -j ACCEPT
iptables -A INPUT --dport 8080 -j DROP
Весьма вероятно, что вы неправильно настроили брандмауэр, или перед тем, как вы вставили, существует другое правило, разрешающее трафик на этот порт / хост
Я бы использовал другой подход. Либо используйте брандмауэр (это лучший метод, если вам не нужен доступ к веб-серверу, но не требуется доступ к серверу приложений), либо используйте собственные элементы управления Apache Allow и Deny.
Вы изучили журналы котов? Это должно быть первое место, где вы будете искать для устранения таких проблем. Этот файл обычно называется catalina.out. Воспроизведите проблему и обновите свой вопрос соответствующими записями журнала.
Тем не менее, несколько вещей выделяются:
Попробуйте заменить двойной \\
с одним \
, Например, это в контейнерах Engine, Host или Context позволит получить доступ из 127.0.0.1
а также 11.22.33.44
(из фильтра удаленных адресов):
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|11\.22\.33\.44"/>
Вы также можете попробовать сбросить deny=""
,