7 Replies Latest reply on Mar 9, 2010 2:07 AM by kkt

    Configure webapp to accept requests only from a specific port

      Hi all,

       

      I would like to restrict a webapp to accept requests only from a specific port and am using JBOSS 5.0.1. I see the <Connector> element in server.xml (under jbossweb.sar) is used to specify port but it seems to apply to all webapps. Is there a way to bind a webapp to one specific port?

       

      Thanks,

      KT

        • 1. Re: Configure webapp to accept requests only from a specific port

          Here are more details:

           

          This is the current setting in server.xml:

           

          <Service name="jboss.web">

           

                <!-- A HTTP/1.1 Connector on port 8888 -->
                <Connector protocol="HTTP/1.1" port="8888" address="${jboss.bind.address}"

                         connectionTimeout="20000" redirectPort="8443" maxThread="200" />

           

          This port is available to all webapps. I would like to add another connector with different port but need to to be bound to one webapp only from the same JBOSS instance.

           

          Thanks,

          KT

          • 2. Re: Configure webapp to accept requests only from a specific port
            ylp_1

            i think there are four ways can do this.

            1、 use muti instance 

            2、 add a httpd before jboss ,add control different ports in httpd.conf

            3、modify the jboss server.xml,add a  service .(i tested this in tomcat 6,but hav't in jboss 5)

            4、add valve

            • 3. Re: Configure webapp to accept requests only from a specific port

              Hi ylp,

               

              Can you give more details on the "add service" to server.xml? I am not sure how this "service" can be bound to a specific webapp.

               

              Thanks,

              KT

              • 4. Re: Configure webapp to accept requests only from a specific port
                ylp_1

                This is tomcat 6 server.xml, i tested it works fine,but i had't teste it in jboss.  i will have a try about using valve.

                <!-- Note:  A "Server" is not itself a "Container", so you may not
                     define subcomponents such as "Valves" at this level.
                     Documentation at /docs/config/server.html
                -->
                <Server port="8005" shutdown="SHUTDOWN">

                  <!--APR library loader. Documentation at /docs/apr.html -->
                  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
                  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
                  <Listener className="org.apache.catalina.core.JasperListener" />
                  <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->
                  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
                  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

                  <!-- Global JNDI resources
                       Documentation at /docs/jndi-resources-howto.html
                  -->
                  <GlobalNamingResources>
                    <!-- Editable user database that can also be used by
                         UserDatabaseRealm to authenticate users
                    -->
                    <Resource name="UserDatabase" auth="Container"
                              type="org.apache.catalina.UserDatabase"
                              description="User database that can be updated and saved"
                              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                              pathname="conf/tomcat-users.xml" />
                  </GlobalNamingResources>

                  <!-- A "Service" is a collection of one or more "Connectors" that share
                       a single "Container" Note:  A "Service" is not itself a "Container",
                       so you may not define subcomponents such as "Valves" at this level.
                       Documentation at /docs/config/service.html
                   -->
                  <Service name="Catalina">
                 
                    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
                    <!--
                    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
                        maxThreads="150" minSpareThreads="4"/>
                    -->
                   
                   
                    <!-- A "Connector" represents an endpoint by which requests are received
                         and responses are returned. Documentation at :
                         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
                         Java AJP  Connector: /docs/config/ajp.html
                         APR (HTTP/AJP) Connector: /docs/apr.html
                         Define a non-SSL HTTP/1.1 Connector on port 8080
                    -->
                    <Connector port="8080" protocol="HTTP/1.1"
                               connectionTimeout="20000"
                               redirectPort="8443"
                               compressionLevel="1000"
                              
                         />
                    <!-- A "Connector" using the shared thread pool-->
                    <!--
                    <Connector executor="tomcatThreadPool"
                               port="8080" protocol="HTTP/1.1"
                               connectionTimeout="20000"
                               redirectPort="8443" />
                    -->          
                    <!-- Define a SSL HTTP/1.1 Connector on port 8443
                         This connector uses the JSSE configuration, when using APR, the
                         connector should be using the OpenSSL style configuration
                         described in the APR documentation -->
                    <!--
                    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
                               maxThreads="150" scheme="https" secure="true"
                               clientAuth="false" sslProtocol="TLS" />
                    -->

                    <!-- Define an AJP 1.3 Connector on port 8009 -->
                    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


                    <!-- An Engine represents the entry point (within Catalina) that processes
                         every request.  The Engine implementation for Tomcat stand alone
                         analyzes the HTTP headers included with the request, and passes them
                         on to the appropriate Host (virtual host).
                         Documentation at /docs/config/engine.html -->

                    <!-- You should set jvmRoute to support load-balancing via AJP ie :
                    <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">        
                    -->
                    <Engine name="Catalina" defaultHost="localhost">

                      <!--For clustering, please take a look at documentation at:
                          /docs/cluster-howto.html  (simple how to)
                          /docs/config/cluster.html (reference documentation) -->
                      <!--
                      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
                      -->      

                      <!-- The request dumper valve dumps useful debugging information about
                           the request and response data received and sent by Tomcat.
                           Documentation at: /docs/config/valve.html -->
                      <!--
                      <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
                      -->

                      <!-- This Realm uses the UserDatabase configured in the global JNDI
                           resources under the key "UserDatabase".  Any edits
                           that are performed against this UserDatabase are immediately
                           available for use by the Realm.  -->
                      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                             resourceName="UserDatabase"/>

                      <!-- Define the default virtual host
                           Note: XML Schema validation will not work with Xerces 2.2.
                       -->
                      <Host name="localhost"  appBase="webapps"
                            unpackWARs="true" autoDeploy="true"
                            xmlValidation="false" xmlNamespaceAware="false">

                        <!-- 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 -->
                        <!--
                        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
                               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
                        -->

                      </Host>
                    </Engine>
                  </Service>
                 
                 
                 
                    <Service name="Catalina1">
                 
                    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
                    <!--
                    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
                        maxThreads="150" minSpareThreads="4"/>
                    -->
                   
                   
                    <!-- A "Connector" represents an endpoint by which requests are received
                         and responses are returned. Documentation at :
                         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
                         Java AJP  Connector: /docs/config/ajp.html
                         APR (HTTP/AJP) Connector: /docs/apr.html
                         Define a non-SSL HTTP/1.1 Connector on port 8080
                    -->
                    <Connector port="8081" protocol="HTTP/1.1"
                               connectionTimeout="20000"
                               redirectPort="8443"
                               compressionLevel="1000"
                              
                         />
                    <!-- A "Connector" using the shared thread pool-->
                    <!--
                    <Connector executor="tomcatThreadPool"
                               port="8080" protocol="HTTP/1.1"
                               connectionTimeout="20000"
                               redirectPort="8443" />
                    -->          
                    <!-- Define a SSL HTTP/1.1 Connector on port 8443
                         This connector uses the JSSE configuration, when using APR, the
                         connector should be using the OpenSSL style configuration
                         described in the APR documentation -->
                    <!--
                    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
                               maxThreads="150" scheme="https" secure="true"
                               clientAuth="false" sslProtocol="TLS" />
                    -->

                    <!-- Define an AJP 1.3 Connector on port 8009 -->
                    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


                    <!-- An Engine represents the entry point (within Catalina) that processes
                         every request.  The Engine implementation for Tomcat stand alone
                         analyzes the HTTP headers included with the request, and passes them
                         on to the appropriate Host (virtual host).
                         Documentation at /docs/config/engine.html -->

                    <!-- You should set jvmRoute to support load-balancing via AJP ie :
                    <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">        
                    -->
                    <Engine name="Catalina" defaultHost="localhost">

                      <!--For clustering, please take a look at documentation at:
                          /docs/cluster-howto.html  (simple how to)
                          /docs/config/cluster.html (reference documentation) -->
                      <!--
                      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
                      -->      

                      <!-- The request dumper valve dumps useful debugging information about
                           the request and response data received and sent by Tomcat.
                           Documentation at: /docs/config/valve.html -->
                      <!--
                      <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
                      -->

                      <!-- This Realm uses the UserDatabase configured in the global JNDI
                           resources under the key "UserDatabase".  Any edits
                           that are performed against this UserDatabase are immediately
                           available for use by the Realm.  -->
                      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                             resourceName="UserDatabase"/>

                      <!-- Define the default virtual host
                           Note: XML Schema validation will not work with Xerces 2.2.
                       -->
                      <Host name="localhost"  appBase="webapps"
                            unpackWARs="true" autoDeploy="true"
                            xmlValidation="false" xmlNamespaceAware="false">

                        <!-- 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 -->
                        <!--
                        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
                               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
                        -->

                      </Host>
                    </Engine>
                  </Service>
                </Server>

                • 5. Re: Configure webapp to accept requests only from a specific port
                  ylp_1

                  in jboss ,you can use  Remote Host Valve  to control.

                   

                  like host www.jboss.org ,you can config it  analysis as http://x.x.x.x:9000

                   

                  server.xml

                  <Engine name="jboss.web" defaultHost="localhost">
                         <Host name="localhost"
                              autoDeploy="false" deployOnStartup="false" deployXML="false">
                                 <Valve className="org.apache.catalina.valves.RemoteHostValve"
                                              allow="*www.jboss.org"/>
                         </Host>
                    </Engine>

                   

                   

                  http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html

                  • 6. Re: Configure webapp to accept requests only from a specific port
                    ylp_1

                    some about Remote Address valve .

                    maybe you can use java regex to filter differert ports

                     

                     

                    can this help you?

                     

                     

                    Remote Address Filter
                    Introduction

                    The Remote Address Filter allows you to compare the IP address of the client that submitted this request against one or more regular expressions, and either allow the request to continue or refuse to process the request from this client. A Remote Address Filter can be associated with any Catalina container (Engine, Host, or Context), and must accept any request presented to this container for processing before it will be passed on.

                    The syntax for regular expressions is different than that for 'standard' wildcard matching. Tomcat uses the java.util.regex package. Please consult the Java documentation for details of the expressions supported.

                    Attributes

                    The Remote Address Filter supports the following configuration attributes:

                    AttributeDescription
                    className

                    Java class name of the implementation to use. This MUST be set to org.apache.catalina.valves.RemoteAddrValve.

                    allow

                    A comma-separated list of regular expression patterns that the remote client's IP address is compared to. If this attribute is specified, the remote address MUST match for this request to be accepted. If this attribute is not specified, all requests will be accepted UNLESS the remote address matches a deny pattern.

                    deny

                    A comma-separated list of regular expression patterns that the remote client's IP address is compared to. If this attribute is specified, the remote address MUST NOT match for this request to be accepted. If this attribute is not specified, request acceptance is governed solely by the accept attribute.

                    • 7. Re: Configure webapp to accept requests only from a specific port

                      Hi YLP,

                       

                      I am not sure how Valve would help as the port must be specified in the incoming request inorder for it to be serviced. This implies the port must match already.

                       

                      Thanks,

                      KT