vlambda博客
学习文章列表

记一次web系统漏洞整改过程(nginx+Tomcat)


1. 漏洞问题


系统部署采用的是tomcat容器,使用nginx做的转发和处理


这次漏洞整改主要包括两个问题,其他都是升级jar包版本或进行一些系统设置就能完成


  •  限制IP访问,配置只有特定的域名才能访问

  • 设置Https 协议请求


2. 解决办法

2.1 Nginx+Tomcat配置的方式


目的就是禁止ip方式访问应用系统


只能使用特定的域名访问特定的端口应用


找到tomcat的conf/server.xml中的<Host>标签


默认是在148行内容如下


 <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" /> </Host>


然后添加上这么一行


<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1"/>


同时nginx配置如下


 server { listen 80; server_name www.xxxx.com xxxx.com; set $flag 0; if ($host != 'casiclibrary.com'){ set $flag "${flag}1"; } if ($host != 'www.casiclibrary.com'){ set $flag "${flag}1"; }# 只有同时不满足两个域名条件的时候,flag的值才是011# 这是则返回403错误 if ($flag = "011"){ return 403; } location / {
proxy_pass http://127.0.0.1:8080/项目名称/; # 本机必须用127.0.0.1,最后需要带‘/’ }}


其中server_name配置的是指定的域名


8080是tomcat的端口


80是对外提供服务的端口


至此,配置完成,只能通过www.xxxx.com或者xxxx.com访问应用系统了


2.2 Nginx+阿里云免费证书


用购买域名的那个帐号,登录阿里云控制台


在上边的控制台输入“SSL证书”进入操作页面



点击购买证书


记一次web系统漏洞整改过程(nginx+Tomcat)


记一次web系统漏洞整改过程(nginx+Tomcat)


记一次web系统漏洞整改过程(nginx+Tomcat)


记一次web系统漏洞整改过程(nginx+Tomcat)


记一次web系统漏洞整改过程(nginx+Tomcat)



记一次web系统漏洞整改过程(nginx+Tomcat)


记一次web系统漏洞整改过程(nginx+Tomcat)


记一次web系统漏洞整改过程(nginx+Tomcat)



很快,10S左右 ,就申请完成了


记一次web系统漏洞整改过程(nginx+Tomcat)


点击下载按钮,选择你需要配置的环境,我选的nginx


压缩包里边包含两个文件,分别是.key和.pem结尾的文件



在nginx目录中的conf中新建一个文件夹,自己取一个名字


我新建的文件夹叫cert


将从阿里云上申请的证书下载下来放到这个路径下


并在nginx的conf/nginx.conf配置文件中新添加一个server配置


 # HTTPS server # server { listen 10443 ssl; server_name xxxx.com www.xxxx.com; set $flag 0; if ($host != 'xxxx.com'){ set $flag "${flag}1"; } if ($host != 'www.xxxx.com'){ set $flag "${flag}1"; } if ($flag = "011"){ return 403; } ssl_certificate cert/3202289_xxxx.com.pem; ssl_certificate_key cert/3202289_xxxx.com.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:8080; add_header X-Frame-Options SAMEORIGIN; #index index.html index.htm; } }


其中listen中配置的是对外提供服务的端口



 ssl_certificate cert/3202289_xxxx.com.pem; ssl_certificate_key cert/3202289_xxxx.com.key;


这就是配置的证书的路径


经过以上配置,就可以通过

https://xxxx.com:10443和https://www.xxxx.com:10443

对外提供https协议的服务了


整改完成


3. 补充

随着互联网技术的发展


网络安全已经不仅仅是一个技术问题了


而应该是我们人人都应该注意的常识问题


技术永远都是有漏洞的


对于普通个人来说


保障我们信息安全的最有效的方式就是


不要打开不明来历的网址


不要轻易将自己的信息输入到不够正规的网站或APP


不要浏览**网站(竟然被和谐了)


当你在凝视深渊,深渊也在凝视你



文/戴先生@2020年6月30日


---end---


更多精彩推荐