Назад | Перейти на главную страницу

Ограничить внешний доступ 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 &quot;%r&quot; %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. Это правильный подход?

Вы изучили журналы Tomcat? Это должно быть первое место, куда вы должны обратить внимание при устранении таких проблем. Этот файл обычно называется 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="".

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.