博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iptables防火墙规则导致端口不通的案例分析
阅读量:5937 次
发布时间:2019-06-19

本文共 2716 字,大约阅读时间需要 9 分钟。

iptables防火墙规则导致端口不通的案例分析

  • 问题现象:

一台服务器的8080端口访问不通,但其他端口正常,例如ssh的22端口,ping也正常。

从其他机器上进行telnet连接8080端口测试,显示是下边这个结果。

[root@iZ25a9b7bpcZ ~]# telnet xx.xx.xx.xx 8080Trying xx.xx.xx.xx...telnet: connect to address xx.xx.xx.xx: No route to host

从telnet测试的结果,仔细看其实会发现有问题,这里提示了错误“No route to host”。

正常进行telnet端口测试,如果端口不通,返回是这样的情况,会提示“Connection refused”

[root@iZ25a9b7bpcZ ~]# telnet xx.xx.xx.xx 9999Trying xx.xx.xx.xx...telnet: connect to address xx.xx.xx.xx: Connection refused

而访问8080端口会提示“No route to host”,没有路由能连接到目标地址。但实际ping是通的,路由肯定没有问题,这个异常的提示就是最大疑点。

  • 排查过程:

首先想到是进行抓包,具体看下网络连接情况。

在客户端机器上,进行telnet连接测试,然后用 tcpdump 抓取访问目标ip 120.xx.xx.xx 的数据包。

[root@iZ25a9b7bpcZ ~]# tcpdump -i any -s 0 host 120.xx.xx.xx19:58:07.985224 IP 101.200.xx.xx.33631 > 120.xx.xx.xx.webcache: Flags [S], seq 783998905, win 14600, options [mss 1460,sackOK,TS val 624230653 ecr 0,nop,wscale 6], length 019:58:08.018285 IP 120.xx.xx.xx > 101.200.xx.xx: ICMP host 120.xx.xx.xx unreachable - admin prohibited, length 68

从抓包的结果看,客户端访问目标服务器的8080端口(抓包里端口显示webcache),但目标服务器给返回了一个ICMP协议类型的,提示目标地址不可达 。host 120.xx.xx.xx unreachable ,这里明显不正常。

同时也在服务器端进行了抓包,抓取客户端ip 101.200.xx.xx 的连接。

root@iZ94jj4osq9Z:/etc/apache2# tcpdump -i any -s 0 host 101.200.xx.xx19:57:39.974605 IP 101.200.xx.xx.33623 > 120.xx.xx.xx.http-alt: Flags [S], seq 1047961079, win 14600, options [mss 1460,sackOK,TS val 624202626 ecr 0,nop,wscale 6], length 019:57:39.974679 IP 120.xx.xx.xx > 101.200.xx.xx: ICMP host 120.24.183.92 unreachable - admin prohibited, length 68

服务器端也收到了客户端访问8080端口的请求,但没有正常响应客户端发的tcp三次握手的syn包,而是返回了一个异常的ICMP协议数据包,告诉客户端目标不可达。

这里也就可以明白,为什么telnet端口测试,会提示“No route to host”

在Windows上用wireshark进行抓包查看,会看到服务器返回的错误信息“Host administratively prohibited”

服务器返回的ICMP协议的数据包中,是包含了客户端请求的数据包信息。

34460db922ce4ffa87ac28c006df5ecb62a98abb

  • 确定问题:

通过抓包的信息,基本分析清楚了问题。出现连接异常,肯定是服务器上有特殊限制,防火墙之类的。

在目标服务器上查看 iptables防火墙规则。

root@iZ:~# iptables -nLChain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- 0.0.0.0/0 0.0.0.0/0ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHEDACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 limit: avg 100/sec burst 100ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 10syn-flood tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080

其中有

REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

这条是拒绝所有连接的规则,而允许8080端口访问的规则,是在这条规则之后,优先级没有拒绝的高导致8080端口连接不上。

拒绝连接的规则有 reject-with icmp-host-prohibited 这个选项,所以被拒绝的连接会收到一个icmp,返回目标主机不可达,抓包里看到返回的icmp协议,就是这个拒绝的规则导致。

最后解决方式,关闭iptables防火墙,或者把允许8080端口访问的规则加到前边。

转载地址:http://vzxtx.baihongyu.com/

你可能感兴趣的文章
matlab练习程序(最大流/最小割)
查看>>
CentOS安装中文支持
查看>>
Java内部类详解
查看>>
(document).height()与$(window).height()
查看>>
Spring Boot|监控-Actuator
查看>>
java读取txt字符串挨个写入int数组
查看>>
RabbitMQ广播:fanout模式
查看>>
部署Java项目到阿里云服务器(Ubuntu16.04 64位)
查看>>
货币转换常用方法
查看>>
Manthan, Codefest 17
查看>>
TOJ4505: KOSARE
查看>>
csa Round #73 (Div. 2 only)
查看>>
Extjs4.2如何实现鼠标点击统计图时弹出窗口来展示统计的具体列表信息
查看>>
KeepAlive随笔
查看>>
你一定要知道的关于Linux文件目录操作的12个常用命令
查看>>
集合文件操作
查看>>
团队开发博客
查看>>
2012-06-04 老男孩老师 “我毕业了”(转)
查看>>
高可用软件heartbeat服务章节目录(草稿)
查看>>
内建校验器2
查看>>