我的学校有一台服务器。如果我traceroute
对学校网络内的某个主机执行命令,我就能够访问该主机。例如,
traceroute hostname.xxx.edu
traceroute to hostname.xxx.edu (xxx.xxx.xx.xx), 30 hops max, 40 byte packets
1 reserved-xxx-2.xxx.edu (xxx.xxx.xxx.x) 0.858 ms 0.924 ms 0.980 ms
2 hostname.xxx.edu (xxx.xxx.xx.xx) 0.446 ms !X 0.438 ms !X 0.423 ms !X
同样,ping hostname.xxx.edu
也运行成功。
然而,如果我尝试,
traceroute to www.google.com (64.233.160.99), 30 hops max, 40 byte packets
1 reserved-xxx-2.xxx.edu (xxx.xxx.xxx.x) 34.605 ms 34.658 ms 34.711 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 *
因此,当我尝试时ping www.google.com
,它按预期失败了。
问题
据我了解,我学校网络的防火墙阻止了我的服务器与外界的联系。它是否正确?
但是,如果我像这样执行命令,curl www.google.com
我会得到完美的输出。事实上,我已经使用此服务器中的 shell 脚本从网站中提取了很多信息。如果防火墙阻止外界访问我的服务器,shell 脚本如何工作?
答案1
是的,您的防火墙完全有可能阻止跟踪路由成功。要了解失败的原因,最好查阅traceroute
手册页。
摘抄
该程序尝试通过启动具有较小 ttl(生存时间)的探测数据包,然后侦听来自网关的 ICMP“超时”回复,来跟踪 IP 数据包到某个互联网主机的路由。
我们以 1 的 ttl 开始探测,然后增加 1,直到得到 ICMP“端口不可达”(或 TCP 重置),这意味着我们到达“主机”,或达到最大值(默认为 30 跳)。
每个 ttl 设置发送三个探测(默认情况下),并打印一行,显示 ttl、网关地址和每个探测的往返时间。根据要求,地址后可附有附加信息。如果探测答案来自不同的网关,则将打印每个响应系统的地址。如果 5.0 秒(默认)内没有响应,则为该探测器打印“*”(星号)。
因此,您看到的星号是您正在路由数据包的服务器,这些服务器超时(5.0+秒),因此traceroute
默认打印*
.
另一件会导致traceroute
工作失败的事情是,当沿途的服务器/路由器被配置为不回复 ICMP(又名 ping)数据包时。如果不回复 ping,traceroute 通过增加发送到实际目的地的每个数据包的 TTL(生存时间)来诱导每个服务器的技巧将会失败。
笔记:手册页中甚至有关于此的警告traceroute
。
摘抄
在现代网络环境中,由于防火墙的广泛使用,传统的traceroute方法并不总是适用。此类防火墙会过滤“不太可能”的 UDP 端口,甚至 ICMP 回显。为了解决这个问题,实现了一些额外的跟踪路由方法(包括 tcp),请参阅下面的可用方法列表。此类方法尝试使用特定的协议和源/目标端口,以绕过防火墙(防火墙将其视为允许的网络会话类型的开始)。
因此,根据您的配置方式,traceroute
它可能会使用 ICMP、UDP 甚至 TCP 数据包来引发处理数据包从 A 点到 B 点的路由的各个系统的响应。
再次查阅traceroute
手册页,记下以下 3 个选项:
-I, --icmp
Use ICMP ECHO for probes
-T, --tcp
Use TCP SYN for probes
-U, --udp
Use UDP to particular destination port for tracerouting (instead
of increasing the port per each probe). Default port is 53 (dns).
当然还有更多,参见可用方法列表获取完整列表。
那么卷曲呢?
与企业或大学等边界防火墙的常见情况一样,仅允许目标端口 80 (HTTP) 和 443 (HTTPS) 的流量流出。完全有可能的是ICMP ECHO_REQUEST数据包被大学防火墙丢弃,这可以解释为什么一旦你开始访问大学网络外部的服务器,你就会得到星号。
通过端口 80 传出数据包,您可以利用这一点并告诉traceroute
在特定端口(本例中为 80)使用 TCP 来获得您想要的内容。
例子
$ sudo traceroute -T -p 80 www.google.com
traceroute to www.google.com (173.194.46.81), 30 hops max, 60 byte packets
1 byers.bubba.net (192.168.1.6) 3.265 ms 3.236 ms 3.213 ms
2 * * *
3 24.93.10.17 (24.93.10.17) 21.359 ms 35.414 ms 48.045 ms
4 rdc-72-230-153-79.wny.east.twcable.com (72.230.153.79) 48.064 ms 48.044 ms 54.523 ms
5 rdc-72-230-153-243.wny.east.twcable.com (72.230.153.243) 70.067 ms 70.013 ms 73.312 ms
6 be35.cr0.chi10.tbone.rr.com (107.14.19.104) 73.201 ms be45.cr0.chi10.tbone.rr.com (107.14.19.106) 62.289 ms be35.cr0.chi10.tbone.rr.com (107.14.19.104) 65.485 ms
7 ae0.pr1.chi10.tbone.rr.com (107.14.17.192) 62.056 ms 48.685 ms ae1.pr1.chi10.tbone.rr.com (107.14.17.194) 32.193 ms
8 * * *
9 209.85.254.130 (209.85.254.130) 42.624 ms 45.159 ms 42.777 ms
10 * * *
11 ord08s11-in-f17.1e100.net (173.194.46.81) 48.036 ms 42.543 ms 44.751 ms
答案2
据我了解,我学校网络的防火墙阻止了我的服务器与外界的联系。它是否正确?
不,我猜它可以阻止几乎所有流量,但至少允许TCP port 80
.traceroute
在Linux中默认使用 use UDP
,ping
use ICMP
,所以作为你的输出,似乎这些流量已被防火墙阻止。
如果防火墙阻止外界访问我的服务器,shell 脚本如何工作?
如上所述,当您可以从 获得结果时curl www.gooogle.com
,我确信防火墙至少允许TCP port 80
和UDP port 53
(对于 DNS 工作)。您可以通过使用traceroute
but using进行简单的检查来断言这一点TCP
:
traceroute -T -p 80 www.google.com
这是我的结果:
$ sudo traceroute -T -p 80 www.google.com
[sudo] password for cuonglm:
traceroute to www.google.com (74.125.128.103), 30 hops max, 60 byte packets
1 172.16.50.253 (172.16.50.253) 0.133 ms 0.133 ms *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 XXX.XXX (Y.Y.Y.Y) 13.954 ms XXX.XXX (Y.Y.Y.Y) 14.198 ms X.X.X.X (123.29.10.110) 14.140 ms
9 unknown.telstraglobal.net (134.159.208.165) 85.353 ms 85.349 ms 85.338 ms
10 i-0-2-0-3.hkth-core01.bi.telstraglobal.net (202.84.153.234) 85.780 ms 85.765 ms 85.748 ms
11 i-0-0-0-3.hkth12.bi.telstraglobal.net (202.84.153.182) 85.723 ms i-0-0-0-1.hkth12.bi.telstraglobal.net (202.84.153.150) 86.731 ms i-0-0-0-2.hkth12.bi.telstraglobal.net (202.84.153.178) 85.305 ms
12 72.14.221.126 (72.14.221.126) 51.635 ms 51.535 ms 51.177 ms
13 209.85.241.58 (209.85.241.58) 51.137 ms 51.372 ms 51.086 ms
14 209.85.253.71 (209.85.253.71) 51.601 ms 209.85.253.69 (209.85.253.69) 52.172 ms 51.888 ms
15 * * *
16 hg-in-f103.1e100.net (74.125.128.103) 51.639 ms 52.632 ms 51.670 ms
值得学习的一课
在为防火墙(或类似的安全设备)制定规则时,黄金法则是“拒绝全部,允许具体内容”
答案3
您的学校防火墙可能会阻止除 TCP/80(Web 流量的默认 IP 端口)之外的端口上的大多数出站流量。
特别是 ping 和(大多数时候)traceroute 发送ICMP ECHO_REQUEST 数据包许多公司和学校阻止所有通过其防火墙的 ICMP 流量,因为它可用于查找防火墙后面的网络设备的信息。