学校にサーバーがあります。学校のネットワーク内のホストに対して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
完璧な出力が得られます。実際、このサーバーでシェルスクリプトを使用して、Webサイトから多くの情報を抽出しました。ファイアウォールが外部からのサーバーへのアクセスをブロックしている場合、シェルスクリプトはどのように機能しましたか?
はい、ファイアウォールがtracerouteの成功をブロックしている可能性があります。これが失敗する理由を理解するには、traceroute
のマニュアルページを参照するのが最善です。
抜粋
このプログラムは、小さなttl(存続時間)でプローブパケットを起動し、ゲートウェイからのICMP「timeexceeded」応答をリッスンすることにより、IPパケットがインターネットホストまでたどるルートを追跡しようとします。
プローブを1のttlで開始し、ICMPの「ポート到達不能」(またはTCPリセット))になるまで1ずつ増やします。つまり、「ホスト」に到達するか、 max(デフォルトは30ホップ)。
3つのプローブ(デフォルト)が各ttl設定で送信され、ttl、ゲートウェイのアドレス、および各プローブのラウンドトリップ時間を示す行が印刷されます。要求された場合、アドレスの後に追加情報を続けることができます。プローブの回答が異なるゲートウェイからのものである場合、各応答システムのアドレスが出力されます。 5.0秒以内に応答がない場合(デフォルト)、そのプローブに対して「*」(アスタリスク)が出力されます。
したがって、表示されているアスタリスクは、パケットがルーティングされているサーバーであり、タイムアウト(5.0秒以上)しているため、traceroute
はデフォルトで*
を出力します。
traceroute
が機能しなくなるもう1つの原因は、途中のサーバー/ルーターがICMP(別名ping)パケットに応答しないように構成されている場合です。 pingに応答しないと、実際の宛先に送信するパケットごとにTTL(Time To Live))をインクリメントして各サーバーを誘導する `tracerouteのトリックは失敗します。
注:traceroute
のmanページに、これに関する警告さえあります。
抜粋
最新のネットワーク環境では、ファイアウォールが広く使用されているため、従来の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
ですから、私の理解では、学校のネットワークのファイアウォールがサーバーが外の世界に接続するのをブロックしています。これは正しいです?
いいえ、ほとんどすべてのトラフィックをブロックできますが、少なくともTCP port 80
は許可されます。 Linuxのデフォルトではtraceroute
はUDP
を使用し、ping
はICMP
を使用するため、出力として、これらのトラフィックはファイアウォールによってブロックされているようです。
ファイアウォールが外部からのサーバーへのアクセスをブロックしている場合、シェルスクリプトはどのように機能しましたか?
上記のように、curl www.gooogle.com
から結果を得ることができる場合、ファイアウォールは少なくともTCP port 80
とUDP port 53
(DNS作業用)を許可していると確信しています。 traceroute
を使用して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
学ぶべき教訓
ファイアウォール(または同様のセキュリティデバイス)のルールを作成する場合、ゴールデンルールは「すべて拒否、詳細を許可」です。
学校のファイアウォールは、WebトラフィックのデフォルトのIPポートであるTCP/80以外のポートで送信されるほとんどのトラフィックをブロックしている可能性があります。
特に、pingと(ほとんどの場合)tracerouteは ICMP ECHO_REQUESTパケット を送信します。多くの企業や学校は、ファイアウォールを通過するすべてのICMPトラフィックをブロックします。これは、背後にあるネットワークデバイスの情報を見つけるために使用できるためです。ファイアウォール。