Hacker typing at a computer

オンラインでの販売や取引に大きく依存している企業にとって、e コマース Web サイトを標的とするサイバー攻撃の増加に対する懸念が高まっています。

e コマース Web サイトは、分散型サービス妨害(DDoS) やブルート フォース攻撃などの攻撃に対して脆弱であり、正当な顧客からの貴重なビジネス トラフィックが失われたり、ユーザーの機密情報が侵害されたりする可能性があります。

幸いなことに、サーバーが Generic Routing Encapsulation (GRE) トンネルを使用しているときはいつでも、別の保護層をリモートで取得できます。このようなトンネルは、サーバーまたはネットワークとスクラビング センターの間にプライベート接続を確立するのに役立ちます。

これにより、保護プロバイダーはすべての受信トラフィックをスキャンして悪意のあるアクティビティを検出し、潜在的な脅威がサーバーに到達する前にブロックできます。

着信トラフィックがスキャンされた後、すべての安全なトラフィックがネットワークまたはサーバーに転送され、GRE トンネルを介して処理されます。サーバーの応答は、GRE トンネルを介してスクラビング センターに送信され、顧客に送信されます。

グローバルなセキュリティ プロバイダーであるGcoreと協力して、GRE トンネルとは何か、また、GRE トンネルがデータを安全に保つのにどのように役立つかを説明します。次に、GRE トンネル経由で Gcore のスクラビング センターへの安全でシームレスな接続を確立するために、データ センター内のルーターとホストを構成する方法について説明します。

具体的には、この記事では、GRE トンネル インターフェイスを設定して、Cisco ルーターまたは Linux ホストでインターネット経由で通信する方法について説明します。

GRE トンネルとは何ですか? どのように機能しますか?

Generic Routing Encapsulation (GRE) トンネルは、GRE プロトコルを使用して、インターネット プロトコル (IP) ネットワーク上の仮想ポイントツーポイント リンク内にさまざまなネットワーク層プロトコルをカプセル化するネットワーク接続です。これにより、リモート サイトが相互に直接接続されているか、同じ物理ネットワーク インフラストラクチャに接続されているかのように、リモート サイトを 1 つのネットワークに接続できます。

GRE は、パブリック インターネットを介してプライベート ネットワークを拡張するためによく使用され、リモート ユーザーがプライベート ネットワーク上のリソースに安全にアクセスできるようにします。

GRE トンネルと VPN は同じように聞こえるかもしれません。ただし、GRE トンネルはマルチキャスト トラフィックを転送または転送できます。これは、ルーティング プロトコル アドバタイズなどのアクションやビデオ会議アプリケーションに不可欠ですが、VPN はユニキャスト トラフィックしか転送できません。

さらに、GRE トンネルを介したトラフィックはデフォルトで暗号化されませんが、VPN は IPsec プロトコル スイートを介してさまざまな暗号化方法を提供し、それらのトラフィックはエンドツーエンドで暗号化できます。

それでも、ほとんどのサイトで送信されるトラフィックは、すべての通信に TLS/SSL などの暗号化標準を採用しています。

GRE トンネルは、2 つの異なるネットワーク (たとえば、会社のプライベート ネットワークと Gcore のスクラビング センター ネットワーク) を接続する「トンネル」または「地下鉄」と考えることができます。地下鉄のトンネルが人々が異なる駅間を移動できるように、GRE トンネルはデータが異なるネットワーク間を移動できるようにします。

GRE トンネル
GRE トンネル
出典:Gコア

この類推における「列車」は、トンネルを介して送信されるデータ パケットです。これらのパケットは「カプセル化」されるか、GRE ヘッダーでラップされます。GRE ヘッダーは、ネットワークにパケットの送信元と送信先を通知します。これは、地下鉄の列車の前後に目的地があるのと同様です。

元のパケットとカプセル化された GRE パケット
元のパケットとカプセル化された GRE パケット
出典:Gコア

パケットが「宛先ステーション」に到達すると、GRE ヘッダーが削除され、元のパケットが目的の宛先に送信されます。このようにして、データは、あたかもプライベート ネットワーク上にあるかのように、パブリック インターネットを介して安全かつプライベートに移動できます。

GRE トンネリング用のネットワーク ホストの構成

GRE トンネルとは何かを理解したので、次のいくつかのセクションでは、データ センター内の Cisco ルーターおよび Linux サーバーでトンネル インターフェイスを設定する方法を示します。また、これらのトンネル インターフェイスでプライベート IP アドレスを構成し、接続をテストする方法も示します。

Cisco ルータでの GRE トンネルの設定

最初に、下の図に示すように、パブリック インターネット上の GRE トンネル経由で Gcore のスクラビング センターへの接続を確立するように Cisco ルーターをセットアップします。

Cisco ルータとスクラビング センター間の GRE トンネル
Cisco ルータとスクラビング センター間の GRE トンネル
出典:Gコア

上の図では、両方のルーターに物理的なパブリック IP があり、それぞれの ISP を介してインターネットに直接接続して対話するために使用できます。また、両端のルーターの背後にはプライベート ネットワークがあり、トンネル インターフェイスにはプライベート IP があります (クライアント ルーターには 192.168.1.1、スクラビング センター ルーターには 192.168.1.2)。

インターネット経由のパブリック接続を通じて、各デバイスの 2 つのトンネル インターフェイスが物理的に同じネットワークに直接接続されているかのように、トンネル インターフェイスのプライベート IP を使用してプライベート接続が確立されます。

まず、コンソール ケーブルを介して直接、または構成されている場合は SSH を介してルーターに接続し、次のコマンドでグローバル コンフィギュレーション モードに入ります。

bash CR1# configure terminal

仮想トンネル インターフェイスを作成できるようになりました。トンネル インターフェイスは任意の番号にすることができます。次の例では、77 を使用し、インターフェイス コンフィギュレーション モードに入ります。

CR1(config)# interface tunnel 77

次に、ルーター CR1 のプライベート IP アドレスを使用して、作成したばかりのトンネル インターフェイスを構成します。

CR1(config if)# ip address 192.168.1.1 255.255.255.0

トンネル ソース、またはトンネルがルーターからの接続を確立するためのインターフェイスを設定します。次の例では、送信元はクライアント ルーターのパブリック IP、3.3.3.1 です。

CR1(config if)# tunnel source 3.3.3.1

トンネルの宛先も構成する必要があります。この場合は、スクラビング センターのルーターのパブリック IP アドレスで、ルーターのプライベート トンネル インターフェイスに接続するために使用します。

CR1(config if)# tunnel destination 4.4.4.1

ご存知のように、GRE は元のパケットに情報を含む追加のヘッダーを追加します。これにより、パケットのサイズが標準の [MTU 制限](https://en.wikipedia.org/wiki/Maximum_transmission_unit) の 1,500 バイトを 24 バイト超えて変化し、パケットがドロップする可能性があります。これを解決するには、MTU を 24 バイト減らして 1,476 にし、MTU と余分なヘッダーを合わせたものが 1,500 を超えないようにします。

CR1(config if)# ip mtu 1476

したがって、[MSS](https://en.wikipedia.org/wiki/Maximum_segment_size) を 1,436 の MTU より 40 バイト低くなるように変更する必要があります。

CR1(config if)# ip tcp adjust-mss 1436

ここで、特権 EXEC モードに戻り、ルーターの IP 構成を確認します。

CR1(config if)# end CR1# show IP interfaces brief

次のような出力が表示され、構成した IP を持つトンネル インターフェイスが示されます。

CR1# show IP interface brief
Interface IP-Address OK? Method Status Protocol GigabitEthernet0/0 3.3.3.1 YES manual up up GigabitEthernet0/1 unassigned YES NVRAM down down GigabitEthernet0/2 unassigned YES NVRAM administratively down down GigabitEthernet0/3 unassigned YES NVRAM administratively down down Tunnel77 192.168.1.1 YES manual up up

プライベート トンネル IP アドレス 192.168.1.2 を使用して、リモート ルーター SCR1 への接続をテストします。

CR1# ping 192.168.1.2

出力は以下の画像のようになり、接続が成功したことが確認されます。

ping コマンドの出力
ping コマンドの出力
出典:Gコア

最後に、実行中の構成を保存します。

CR1# copy running-config startup-config

GRE トンネル経由で接続を確立するようにルーターを正常に構成しました。

Linux サーバーでの GRE トンネルの構成

このセクションでは、トンネル インターフェイスを設定し、GRE トンネルを介してリモート サーバへの接続を確立する方法について説明します。この特定のセットアップでは、Ubuntu 20 LTS オペレーティング システムを使用します。

以下は、このセットアップのさまざまな側面の構成を示す図です。

Linux サーバーとスクラビング センター間の GRE トンネル
Linux サーバーとスクラビング センター間の GRE トンネル
出典:Gコア

GRE プロトコルを使用して、サーバーのパブリック IP アドレスからリモート サーバーの IP (この場合はそれぞれ 13.51.172.192 と 196.43.196.101) への新しいトンネルを作成します。

bash # ip tunnel add tunnel0 mode gre local 13.51.172.192 remote 196.43.196.101 ttl 255

アプリケーション ファイアウォールまたはネットワークの背後で Amazon EC2 インスタンスまたは同様の VPC を使用している場合、パブリック IP トラフィックはプライベート IP を介して VPC との間でルーティングされるため、インスタンスのプライベート IP を取得する必要があります。

次のコマンドの出力からわかるように、インスタンスのプライベート IP は、VPC の完全修飾ホスト名でハイフンでつながれています。

bash # hostname -f ip-172-31-38-152.eu-north-1.compute.internal

次に示すように、ローカルのパブリック IP 13.51.172.192 を取得したばかりのプライベート IP 172.31.38.152 に置き換えることで、トンネルを作成できます。物理サーバーでこれを行う場合、これは必要ありません。

bash # ip tunnel add tunnel0 mode gre local 172.31.38.152 remote 196.43.196.101 ttl 255

次に、トンネルで使用するプライベート サブネットを追加する必要があります。この例では 192.168.0.2/30 です。

bash # ip addr add 192.168.0.2/30 dev tunnel0

これが完了したら、次のコマンドを使用してトンネル リンクを起動できます。

bash # ip link set tunnel0 up

最後に、次の出力に示すように、トンネルの IP アドレスに ping を実行して、リモート サーバーがトンネル経由で到達可能かどうかをテストします。これは、GRE トンネル経由の接続が成功したことを示します。

bash # ping 192.168.0.1 -c4 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=275 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=275 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=275 ms 64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=281 ms --- 192.168.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 274.661/276.239/280.724/ ms as

この時点で、ルーティング テーブルにいくつかのルールを追加して、トンネル経由で到達するすべてのトラフィックがトンネル経由でルーティングされた応答を持つようにする必要があります。以下のコマンドを使用します。

bash // Create the routing table # echo '100 GRE' >> /etc/iproute2/rt_tables // Respect the rules for the private subnet via that table # ip rule add from 192.168.0.0/30 table GRE // Set the default route to make sure all traffic goes via the tunnel remote server # ip route add default via 192.168.0.1 table GRE

それでおしまい!サーバーから GRE トンネル経由でスクラビング センターへの接続を正常にセットアップしました。

結論

この記事では、GRE トンネルとは何か、およびそのしくみについて説明しました。 Gcore のスクラビング センターを介して着信ネットワーク トラフィックをルーティングすることにより、GRE トンネルがサービス拒否攻撃などのサイバー攻撃からサーバーを保護する方法について触れました。

次に、Cisco ルーターまたは Linux サーバーを使用して GRE トンネル接続をセットアップする方法について説明しました。

この記事は、南極大陸を除くすべての大陸でマルチ Tbps のフィルタリング能力を備えた強力な Web およびサーバー保護のプロバイダーであるGcoreと協力して作成しました。

Gcore は、GRE トンネルを使用して、データ センター内のサーバーとクライアントのデータ センター内のサーバーを保護できます。どちらの方法でも、1 ミリ秒未満のレイテンシで大量の攻撃からお客様を保護できます。

Gcoreによる後援および執筆