怎么用Tomcat实现IP限制访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用Tomcat实现IP限制访问相关的知识,希望对你有一定的参考价值。

Tomcat中的ip访问限制,即设置允许某个(或某些)客户端能够访问到tomcat服务器,或不能访问tomcat服务器。

    实现方法:

    限制tomcat的IP访问只需要编辑tomcat的server.xml,增加适当代码即可。

    操作步骤:

    A、设定我们有一个名为Zweb的虚拟目录。用文本编辑器打开tomcat的 server.xml配置文件,找到其配置代码如下:

    <contextpath=”/Zweb” reloadable=”true” docBase=”/var/www/Zweb” />

    B、将其改成下面代码:

    <contextpath=”/Zweb” reloadable=”true” docBase=”/var/www/Zweb”>
        <valueclassName=”org.apache.catalina.values.RemoteAddrValue”
            allow=”127.0.0.1” deny=”″ />
    </context>经过这样设置后,将只允许本机访问Tomcat。

    C、如要限制只能192.168.1.0-192.168.5.255和192.168.10.0-192.168.15.255这样的IP段,可以这样写:

    <contextpath=”/Zweb” reloadable=”true” docBase=”/var/www/Zweb”>
        <valueclassName=”org.apache.catalina.values.RemoteAddrValue”
            allow=”192.168.[1-5].*,192.168.[10-15].*” deny=”″ />
    </context>
    设置好后重新启动Tomcat。

    效果:只有指定的主机或IP地址才可以访问部署在Tomcat下的应用。

    Tomcat供了两个参数供你配置:RemoteHostValve 和RemoteAddrValve,前者用于限制主机名,后者用于限制IP地址。

    通过配置这两个参数,可以让你过滤来自请求的主机或IP地址,并允许或拒绝哪些主机/IP。

    全局设置,对Tomcat下所有应用生效,server.xml中添加下面一行,重启服务器即可:

    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>此行放在</Host>之前。

    实例:

    A、只允许192.168.1.10访问:
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10" deny=""/>
    B、只允许192.168.1.*网段访问:
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
    C、只允许192.168.1.10、192.168.1.30访问:
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30" deny=""/>
    D、根据主机名进行限制:
    <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="baidu.com" deny=""/>

    注:设置好后重新启动Tomcat才生效。

参考技术A

    Tomcat供了两个参数供配置:RemoteHostValve 和RemoteAddrValve,前者用于限制主机名,后者用于限制IP地址。通过配置这两个参数,可以过滤来自请求的主机或IP地址,并允许或拒绝哪些主机/IP。

    全局设置,对Tomcat下所有应用生效:
    server.xml中添加下面一行,重启服务器即可:
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
    此行放在</Host>之前。

    例:
    1,只允许192.168.1.10访问:
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10" deny=""/>
    2,只允许192.168.1.*网段访问:
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
    3,只允许192.168.1.10、192.168.1.30访问:
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30" deny=""/>
    4,根据主机名进行限制:
    <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="abc.com" deny=""/>

    局部设置,仅对具体的应用生效,根据项目配置情况进行设置:
    1)使用conf目录下xml文件进行配置$tomcat_root\\conf\\proj_1.xml
    2)直接在server.xml中进行设置$tomcat_root\\conf\\server.xml
    在上述文件对应项目的</Context>前增加下面一行:
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>

    特别需求:测试版本不想提供别人访问,打开tomcat6\\conf\\server.xml文件,如果是要限制整个站点别人不能访问,则要将
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"  allow="192.168.1.*,192.168.2.*,*.mysite.com" deny=""/>
    加入到<HOST></HOST>标签中,如果是要限制某个站点不能被访问,则要加入到<Context>里面就可以。
    <Context path="/myweb" reloadable="true" docBase="E:\\tomcat6\\webapps\\myweb">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.13.110,192.168.1.*,220.250.13.21" deny=""/>
    < /Context>
    RemoteHostValve

    根据主机名进行限制:

    <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="tmachine1" deny=""/>
    修改文件:
    tomcat/conf/server.xml
    通过tomcat限制ip访问。

[WebServer] Tomcat 配置访问限制:访问白名单和访问黑名单

前言:

  昨天配置了 Tomcat 服务器运行 PHP 的环境,但是通过观察 Tomcat 这几天的日志发现,有很多莫名其妙的 IP 访问主机下莫名其妙的地址,如:/80、/testproxy.php、/cache/global/img/gs.gif、CONNECT check.best-proxies.ru:80 等等,后来通过搜索得知是一些进行 端口扫描 和其他网络攻击的的IP地址,为了防止这些 IP 的扫描和攻击,进一步保证服务器的安全和稳定,可以通过配置 Tomcat 的 server.xml 限制一些 IP 的访问。

1 123.249.27.191 - - [04/Apr/2016:00:18:33 +0800] "GET /80 HTTP/1.0" 404 576
2 185.25.151.159 - - [04/Apr/2016:00:36:39 +0800] "GET /testproxy.php HTTP/1.1" 404 576
3 172.82.166.210 - - [04/Apr/2016:02:01:49 +0800] "GET /cache/global/img/gs.gif HTTP/1.1" 404 576
4 95.213.187.189 - - [04/Apr/2016:02:03:05 +0800] "CONNECT check.best-proxies.ru:80 HTTP/1.1" 400 -
5 91.196.50.33 - - [04/Apr/2016:03:26:23 +0800] "GET /testproxy.php HTTP/1.1" 404 576
6 123.249.27.193 - - [04/Apr/2016:03:51:22 +0800] "GET /80 HTTP/1.0" 404 576
7 213.246.45.128 - - [04/Apr/2016:08:11:22 +0800] "GET /cache/global/img/gs.gif HTTP/1.1" 404 576
查看日志

 

配置:

  找到 Tomcat 服务器根目录下的 conf/server.xml,在 <Host> 节点内添加一个属性 className 的值为 "org.apache.catalina.valves.RemoteAddrValve" 的 <Valve> 节点:

1 <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="" 
2 deny="123.249.27.19[1-3]|115.239.228.1[4-6]|169.54.233.1(1[6-9]|2[0-6])|62.138.2.(209|12(2|3)|21(3|4))|123.151.(149.222|42.61)|61.147.(121.73|103.119|247.85)|115.239.228.202|112.74.206.117" 
3 denyStatus="403" />

  其中 allow 属性可以配置访问白名单,deny 属性可以配置访问黑名单,都支持正则表达式。上面的代码中 deny 属性的值,是我的服务器日志中一些进行端口扫描的IP地址的正则表达式,写的很长但很简单。 在此附上一些进行端口扫描的 IP 地址的列表:http://antivirus.neu.edu.cn/scan/list.php

  denyStatus 属性值为403表示:当 deny 中的 IP 访问时,返回 403 的状态码,即没有访问权限。

  修改完成保存server.xml文件后重启服务器,当黑名单中的 IP 再次访问时即可看到效果,返回的状态码为 403:

    123.249.27.192 - - [04/Apr/2016:21:29:53 +0800] "GET /80 HTTP/1.0" 403 - 

  

  到这里配置就结束了,不过个人觉得应该还有另外一种方式,不过并没有尝试,那就是通过配置 Tomcat 服务器仅能通过域名访问,不允许通过 IP 访问,也不失为一种避免端口扫描的方法,不知道说的对不对。附上禁用 IP 访问的参考资料:

  1.http://www.iyunv.com/thread-42853-1-1.html

  2.http://blog.csdn.net/tangdc88/article/details/17283617

 

2016年4月17日 更新扫描和攻击IP:

123.249.27.19[1-3]|115.239.228.1[4-6]|169.54.233.1(1[6-9]|2[0-6])|62.138.2.(209|12(2|3)|21(3|4))|123.151.(149.222|42.61)|61.147.(121.73|103.119|247.85)|115.239.228.202|115.230.124.164|112.74.206.117|169.229.3.91|61.154.154.97|213.246.45.128|95.213.187.18[8-9]|185.25.151.159|185.106.92.47|91.196.50.33|172.82.166.210|179.99.200.39 
查看IP

 

2016年4月19日 更新扫描和攻击IP:

123.249.27.19[1-3]|115.239.228.1[4-6]|169.54.233.1(1[6-9]|2[0-6])|62.138.2.(209|12(2|3)|21(3|4))|123.151.(149.222|42.61)|61.147.(121.73|103.119|247.85)|115.239.228.202|115.230.124.164|112.74.206.117|169.229.3.91|61.154.154.97|213.246.45.128|95.213.187.1(8[6-9]|90)|185.25.151.159|185.106.92.47|91.196.50.33|172.82.166.210|179.99.200.39|5.178.86.7[4-5]|63.115.64.47|185.49.14.190|80.82.78.38
查看IP

 

 2016年4月23日 更新扫描和攻击IP:

123.249.27.19[1-3]|115.239.228.1[4-6]|169.54.233.1(1[6-9]|2[0-6])|62.138.2.(209|12(2|3)|21(3|4))|123.151.(149.222|42.61)|61.147.(121.73|103.119|247.85)|115.239.228.202|115.230.124.164|112.74.206.117|169.229.3.91|61.154.154.97|213.246.45.128|95.213.187.1(8[6-9]|90)|185.25.(151.159|148.240)|185.106.92.47|91.196.50.33|172.82.166.210|179.99.200.39|5.178.86.7[4-6]|63.115.64.47|185.49.14.190|80.82.78.38|118.161.65.165|185.103.252.98|104.128.144.131|106.185.47.161|111.248.(112.44|56.178)|114.43.3.196|62.67.9.30|37.233.101.128|112.115.49.201

 

 

Done.

以上是关于怎么用Tomcat实现IP限制访问的主要内容,如果未能解决你的问题,请参考以下文章

tomcat 用自己的IP不能访问

公网ip被X网站限制访问,现有啥手段可以继续访问X网站?

nginx 怎么限制访问

Tomcat8限制指定域名或者IP访问

如何使用 IPTables 限制Ip访问

[WebServer] Tomcat 配置访问限制:访问白名单和访问黑名单