连不通服务器怎么办--实践篇

当你访问不到自己web服务器数据,当你ssh登陆被拒,当你pop3读取邮件失败…一句话,当你连不通你的服务器服务,你该怎么办?本文将基于前篇理论举例二三加以说明.

实例一,万维网服务连接失败

上下文 利用Postman发送特定Request可以做api测试,而Newman是一个可以在命令行启动Postman的工具.API测试在本机跑时没有问题而替换成测试环境上的地址时则连接失败.
分析 1.首先在本地浏览器是可以访问API的,但是单独在命令行里使用postman则访问失败,放眼过去与两端点之间的网络无关,出于对postman模拟浏览器发request的敏感,应该是缺少某方面的信息模拟,从而被服务器端拒绝.观察log,提示403错误,意为禁止访问,出于服务的安全考虑.问题定位为服务器端.
2.登陆服务器查看error.log,提示user-agent 为空不合法,请求被拒.
解决办法 在Newman中,将user-agent的配置添上,再次请求,成功.

实例二,邮件读取服务连接失败

上下文 做端对端测试,且为分布式开发和部署.测试流程为一个系统注册了新用户并订阅了内容,然后测试邮件里服务器有发网该用户的邮件.环境基础构建如下图.在跑该测试时,邮件读取timeout.
分析 1.log能反馈的问题比较简单,不能联想到太多可能,所以首先来判断邮件服务器是否可以连通,ping邮件服务器,不通.telent110端口,不通.问题源为服务器.
解决办法 在邮件服务器上查看防火墙,打开对跑测试主机访问自己110端口的权限.
分析 2.再次跑测试,仍连接超时,ping邮件服务器,通.telent110端口,不通.但是在上一步时已经确认邮件服务器对测试主机端口畅通.但依然显示两主机间端口连接建立不成功,则很有可能是测试主机的防火墙问题.定位问题源为测试主机.
解决办法 查看测试主机防火墙,配置安全组确保目的主机110端口的包可以出站.
分析 3.再再次跑测试,问题依旧,telnet端口仍失败,确认测试主机及邮件服务器的防火墙都设置OK,此时有点疑惑,运行命令traceroute domain,观察如下,发现数据包在nat处传递失败,此时恍然大悟,原来忘了nat处的防火墙,果然安全组出站规则不允许110端口的包出去.问题源为本地网络部分.
解决办法 设置nat防火墙.最终服务访问成功.

实例三,远程安全登陆服务连接失败

上下文 编写本地自动化部署脚本时,远程命令执行语句需要ssh到AWS服务器执行命令,如下XXX.为了避免每条命令总是用sudo来给予权限,遂改为登陆服务器后先切换为root用户XXXX,发现脚本执行失败,提示XXX.
分析 1.在未使用sudo su之前可以成功的执行脚本该片段,说明本机到服务器的网络连通性是没有问题的,两端主机的防火墙可以通过,端口也没有问题,问题源初步定义为服务器端,与SSH 服务安全策略相关.
2.单独于命令行执行该命令语句,并加-vvv查看ssh 相关log,利用ssh 服务相关的只是积累确定问题出现在哪一步.log如图,标注一显示ssh建立过程中的第一步版本信息协商完成,标注二显示交换公钥步骤完成,标注三显示身份认证通过,标注四显示ssh通信开始,至此确认1中的分析猜想完全正确,接下来需要做的事情是登陆到服务器查看相关配置
3.查看配置文件XXX,发现rootpermission 为deny,显然是把sudo su这种情况识别为直接以root用户登陆了,故而拒绝.
解决办法 在本机脚本中放弃第二种实现方案或者在配置中改为allow.

最后说两句

举例完毕,也很想听大家遇到的问题和排查过程,有时间分享给我吧!