开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

通过网站不能跳转登录的案例来看IP白名单的设置

简介:
+关注继续查看

最近在公司遇到一个问题,进入公司的游戏产品官网注册一个普通用户账号,登录官网

然后点击进入该游戏产品的论坛,不能自动跳转到论坛实现自动登录


于是自己去官网注册了一个普通用户账号,登录官网,测试看看,发现确实不能自动跳转到论坛

登录论坛的服务器数据库,查看到数据库里已经有刚刚注册的用户数据了,但密码没有同步过来

 

经过和开发的一起分析和故障排查,发现一个报错程序

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

wKioL1kjxMzCaUmlAAJ7BvVvBIY350.png-wh_50


一.异常信息以及解决办法

1
2
3
4
      com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure org.springframework.transaction.CannotCreateTransactionException: 
    Could not open JDBC Connection for transaction; 
    nested exception iscom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 
    Communications link failureThe last packet successfully received from the server was 6,388 milliseconds ago.  The last packet sent successfully to the server was 1,504 milliseconds ago.at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:240)

异常分析:程序与MySQL通讯失败了,即连接失败了。

此为程序打开数据库连接后,等到做数据库操作时,发现连接被MySQL关闭掉了

而在MySQL这一层,MySQL5配置上默认将连接的等待时间(wait_timeout)缺省为8小时

连接超过8小时,会导致mysql认为这个连接超时无效,然后进行关闭。

1
2
3
4
5
mysql﹥ 
mysql﹥ show global variables like 'wait_timeout'
+---------------+---------+ | Variable_name | Value | 
+---------------+---------+ | wait_timeout | 28800 
+---------------+---------+ 1 row in set (0.00 sec) 28800 seconds,也就是8小时。

解决办法(尝试方案顺序可为:(1)(3)(2)):
(1)在jdbc连接url的配置中,你可以附上“autoReconnect=true”,但这仅对mysql5以前的版本起作用。

(2)既然问题是由mysql5的全局变量wait_timeout的缺省值太小引起的,我们将其改大就好了。 
查看mysql5的手册,发现对wait_timeout的最大值分别是24天/365天(windows/linux)

以windows为 例,假设我们要将其设为21天,我们只要修改mysql5的配置文件“my.ini”(mysql5 installation dir)

增加一行:wait_timeout=1814400 ,需要重新启动mysql5。 
linux系统配置文件:/etc/my.cnf 

(3)我们可以将数据库连接池的 validateQuery、testOnBorrow(testOnReturn)打开,这样在 每次从连接池中取出且准备使用之前(或者使用完且在放入连接池之前)先测试下当前使用是否好用,如果不好用,系统就会自动destory掉
或者testWhileIdle项是设置是否让后台线程定时检查连接池中连接的可用性。


二.根本解决办法:代码优化

112628_Ywpi_1394041.bmp

112552_1l26_1394041.png

112553_98MA_1394041.png

最终发现是服务器的IP没有漂白,需要添加IP白名单就可以了

[root@localhost ~]# cat /etc/sysconfig/iptables

################################ db #####################################

-A INPUT -s server IP1/32 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

-A INPUT -s server IP2/32 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT


通过这个公司网站跳转登录的问题,下面介绍一下Linux如何设置 IP 白名单黑名单


防攻击可以增加IP白名单/etc/hosts.allow和黑名单/etc/hosts.deny

配置文件格式参考:


修改/etc/hosts.allow文件
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the ‘/usr/sbin/tcpd’ server.
#
sshd:210.13.218.*:allow
sshd:222.77.15.*:allow


以上写法表示允许210和222两个ip段连接sshd服务(这必然需要hosts.deny这个文件配合使用)

当然:allow完全可以省略的。www.111cn.net
当然如果管理员集中在一个IP那么这样写是比较省事的


all:218.24.129.110//他表示接受110这个ip的所有请求!
/etc/hosts.deny文件,此文件是拒绝服务列表,文件内容如下:
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the ‘/usr/sbin/tcpd’ server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
sshd:all:deny


注意看:sshd:all:deny表示拒绝了所有sshd远程连接。:deny可以省略
所以:当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准


注意修改完后:www.111Cn.net
service xinetd restart 才能让刚才的更改生效


/etc/hosts.allow(允许)和/etc/hosts.deny(禁止)这两个文件是tcpd服务器的配置文件
tcpd服务器可以控制外部IP对本机服务的访问
linux 系统会先检查/etc/hosts.deny规则,再检查/etc/hosts.allow规则,如果有冲突 按/etc/hosts.allow规则处理

 

比如:
1.禁止所有ip访问linux 的ssh功能
可以在/etc/hosts.deny添加一行 sshd:all:deny

2.禁止某一个ip(192.168.11.112)访问ssh功能
可以在/etc/hosts.deny添加一行sshd:192.168.11.112

3.如果在/etc/hosts.deny和/etc/hosts.allow同时 有sshd:192.168.11.112 规则,则192.168.11.112可以访问主机的ssh服务


总结:通过这种方法可以控制部分非授权访问,但不是一劳永逸的方法!我们在看服务日志的时候或许会看到很多扫描记录,不是还是直接针对root用户的,这时控制你的访问列表就非常有作用了!

 

 Linux下防火墙增加白名单

Linux系统中安装yum install iptables-services

然后 vim /etc/sysconfig/iptables

 

# Generated by iptables-save v1.4.7 on Sun Aug 28 12:14:02 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]


-N whitelist
-A whitelist -s 8.8.8.8 -j ACCEPT
-A whitelist -s x.x.x.x -j ACCEPT

-A whitelist -s x.x.x.x -j ACCEPT

-A whitelist -s x.x.x.x -j ACCEPT

-A whitelist -s x.x.x.x -j ACCEPT

-A whitelist -s x.x.x.x -j ACCEPT


-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j whitelist
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

 

上边是白名单的IP列表

下边是针对白名单里的内容开启的一些端口

要把ACCEPT的写在上边

把REJECT的内容写在下边

这样白名单里的IP就可以访问我们限制的端口及服务了,而没有在白名单里的IP则会被拒绝

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j whitelist 这种是针对白名单里的端口开启,即只能白名单里的IP能够通过这个端口访问

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT这种是全白的开启,即任何机器都能通过这个端口访问




本文转自 2012hjtwyf 51CTO博客,原文链接:http://blog.51cto.com/hujiangtao/1928838,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
全方位解读服务网格(Service Mesh)的背景和概念
为了解决微服务框架的侵入性问题,我们引入服务网格。
1245 0
PolarDB 并行查询的前世今生
本文会深入介绍PolarDB MySQL在并行查询这一企业级查询加速特性上做的技术探索、形态演进和相关组件的实现原理,所涉及功能随PolarDB MySQL 8.0.2版本上线。
509 0
企业内部应用接入钉钉获取部门及人员信息
企业内部应用接入钉钉,同时通过API获取当前企业下部门及人员信息
1190 0
MySQL模糊查询再也用不着 like+% 了!
我们都知道 InnoDB 在模糊查询数据时使用 "%xx" 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根基用户数据的关键字进行全文查找,电子商务网站需要根据用户的查询条件,在可能需要在商品的详细介绍中进行查找,这些都不是B+树索引能很好完成的工作。 通过数值比较,范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较,全文索引就是为这种场景设计的。
25671 0
阿里云云原生一体化数仓正式发布  助力企业数据驱动业务创新
云原生一体化数仓是集阿里云大数据产品MaxCompute、DataWorks、Hologres三种产品能力于一体的一站式大数据处理平台。核心是3个一体化和全链路数据治理能力,包括离线实时一体、湖仓一体、分析服务一体、全链路数据治理。
1612 0
全面公测|Grafana服务:一张图表胜过千行指标&日志
Grafana 帮助运维人员轻松处理各类运维过程中遇到的各类数据可视化与分析难题。目前阿里云 Grafana 服务全面免费公测,帮助企业轻松构建运维数据可视化平台,轻松实现数据驱动运维!
1162 0
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
前面介绍了Go语言的基础语法,所谓磨刀不误砍柴工,希望大家还是能熟悉掌握这些基础知识,这样后面真正学起Go来才会得心应手。 作为初学者。Go语言的语法有些和java类似,但也有很多不一样的地方。刚开始都会遇到各种各样的坑。下面就来总结下学习go语言的过程中,遇到的各种坑。
1035 0
设备接入--海康摄像头SDK
springboot-对接海康摄像头,兼容window和Linux环境
1349 0
Flink SQL 在快手的扩展和实践
快手实时计算团队技术专家张静、张芒在 FFA 2021 的分享
1149 0
无影云桌面,企业与个人的应用神器
阿里云无影云桌面( Elastic Desktop Service)的原产品名为弹性云桌面,融合了无影产品技术后更名升级。它可以为您提供易用、安全、高效的云上桌面服务,帮助您快速构建、高效管理桌面办公环境,提供安全、灵活的办公体系。
276299 0
13688
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载