ウェブサーバーのアクセスログに、見覚えのないIPアドレスから大量のリクエストが押し寄せてくる——。しかしそのIPを逆引きしてみると、全く関係のない一般ユーザーのアドレスばかり。これがIPスプーフィングを悪用した攻撃の典型的な痕跡です。
IPスプーフィング(IP Spoofing)は、送信元のIPアドレスを偽装してパケットを送りつける手法です。DDoS攻撃の増幅に使われたり、ファイアウォールの信頼リストをすり抜けるために使われたりと、多くの攻撃の「下地」となっています。対策を講じるには、まず偽装の仕組みを正確に理解することが欠かせません。
この記事では、IPスプーフィングの仕組み・代表的な悪用パターン・BCP38やuRPF・Linuxのiptablesを使った具体的な防御手順まで、現場で使えるレベルで解説します。

IPスプーフィングとは?送信元IPアドレスを偽装する攻撃の概念
インターネット上のパケット通信は、TCP/IPという通信規約に従って行われます。すべてのパケットには「送信元IPアドレス」と「宛先IPアドレス」が含まれており、受信側はこれをもとに通信の相手を特定します。
IPスプーフィングとは、この送信元IPアドレスを任意の値に書き換えて送信する行為です。OSが提供するrawソケット(生のパケットを組み立てられる低レベルの通信インタフェース)を使えば、攻撃者は自分のIPアドレスではなく、被害者のIP、存在しないIP、あるいは信頼されたシステムのIPをヘッダに書き込んでパケットを送出できます。
・なぜ可能なのか: TCP/IPの設計当初は「送信元は正直に名乗る」という性善説が前提でした。送信元を検証する仕組みはプロトコル自体に組み込まれていないため、悪意ある実装者はヘッダを自由に改ざんできます。
・TCPとの関係: TCPは3ウェイハンドシェイクで接続を確立するため、応答パケットが届かないと通信が成立しません。そのためIPスプーフィングはTCPの双方向通信には直接使えず、主にUDP・ICMPや、TCPの接続確立前の段階を狙った攻撃に使われます。
・追跡の困難さ: 送信元が偽装されているため、ログに残るIPアドレスは実際の攻撃者とは無関係です。攻撃元の特定には複数のネットワーク機器のログを突き合わせる複雑な手順が必要になります。
攻撃の仕組み(敵を知る)
1. DDoSリフレクション・増幅攻撃(最も実害が大きい悪用)
現在、IPスプーフィングが最も広く悪用されているのがDDoSの増幅攻撃です。仕組みは次のとおりです。
① 攻撃者が被害者のIPを送信元に偽装し、インターネット上の「反射サーバー」に小さなリクエストを送る
② 反射サーバーは「被害者から問い合わせが来た」と思い込み、大きなレスポンスを被害者のIPに返す
③ 多数の反射サーバーから大量のレスポンスが被害者に集中し、回線やサーバーを圧迫する
DNSを反射サーバーに使う「DNS増幅攻撃」では、送った64バイトのクエリに対して最大4,000バイト超のレスポンスが返ることがあります。増幅率は60倍以上です。NTP(Network Time Protocol)を使った増幅攻撃では増幅率が数百倍に達した事例もあります。
攻撃者は自分のネットワーク帯域を最小限に抑えながら、被害者に何倍もの攻撃トラフィックを浴びせられるため、コストパフォーマンスが高い手法として攻撃者に好まれています。
# DNS増幅攻撃のパケットフロー(概念図) # # 攻撃者(1Mbpsの帯域) → 偽装パケット(送信元=被害者IP)→ DNSサーバー群 # ↓ # 被害者 ← 増幅された大量レスポンス(60倍以上) ← DNSサーバー群 # # 結果: 攻撃者1Mbpsの投資で被害者に60Mbps以上の攻撃トラフィック
2. TCPセッションハイジャック(古典的だが理解が重要)
IPスプーフィングの古典的な悪用例として、TCPセッションハイジャックがあります。
TCP通信では、各パケットにシーケンス番号と応答番号が含まれます。接続が確立した後、攻撃者が通信の相手方を偽装した正しいシーケンス番号を持つパケットを送り込めると、その接続を乗っ取ることができます。1990年代にはOSのシーケンス番号生成が予測可能だったため、実際にこの手法による侵入事件(有名なKevin Mitnickによる攻撃など)が発生していました。
現在のOSはシーケンス番号をランダムに生成するため、この古典的な手法の成功率は大幅に低下しています。しかし、同一ネットワークセグメント内でARP詐称と組み合わせた場合など、条件が揃うと今日でも脅威になります。
3. ファイアウォールのIPホワイトリスト回避
「このIPアドレスからの接続だけ許可する」というルールを設定しているファイアウォールを、信頼されたIPアドレスを偽装して回避しようとする攻撃です。
ただし前述のとおり、TCPの場合は3ウェイハンドシェイクが成立しなければ通信できません。そのため実質的な攻撃成立には、攻撃者が中間経路上でパケットを傍受できる立場(中間者攻撃との組み合わせ)にある場合に限られます。一方、UDPベースのサービス(DNS・NTPなど)では、応答の確認なしに単一方向でパケットを送れるため、ホワイトリスト偽装が有効なケースがあります。
具体的な防御手順
1. BCP38(Ingress Filtering)の理解と適用要請
BCP38(Best Current Practice 38)は、インターネットの根幹で使われているIPスプーフィング対策の標準的な考え方です。要点は「自分のネットワークから、自分に割り当てられていないIPアドレスを送信元とするパケットを外部に出さない」というものです。
ISP(インターネットサービスプロバイダ)や企業のエッジルーターでBCP38が適切に実装されていれば、偽装パケットはその出口で破棄されます。
中小企業として実践できることは次のとおりです。
・自社のエッジルーターでの適用: 自社が使用するIPアドレス範囲以外を送信元とするパケットが内部から出ようとした場合、出口でドロップするルールを設定する。
・ISPへの確認: 接続しているISPがBCP38を実装しているか確認する。大手ISPの多くは対応済みですが、中小規模のISPでは未対応のケースもあります。
・クラウドサービスのセキュリティグループ活用: AWSのセキュリティグループやAzureのNSGは、VPC/VNet内から外部へ出るパケットの送信元IPを強制的に自分のアドレスに書き換えるため、自動的にIPスプーフィングが防止されます。
2. uRPF(Unicast Reverse Path Forwarding)の設定
uRPF(ユニキャスト逆パス転送)は、ルーターレベルでIPスプーフィングを検知・遮断する仕組みです。原理はシンプルで、「受信したパケットの送信元IPアドレスが、そのパケットが届いたインタフェースを通じて到達可能かどうか」をルーティングテーブルで照合します。
Strict Mode(厳格モード)では、受信インタフェースと送信元IPへの最短経路のインタフェースが一致しない場合にパケットを破棄します。Loose Mode(緩和モード)では、送信元IPがルーティングテーブルに存在するかだけを確認します。
企業ネットワークのエッジルーターにuRPFを設定するとIPスプーフィングパケットを自動的に排除できます。主要なルーターベンダー(Cisco・Juniper・Fortinet等)は標準でこの機能をサポートしています。ただし非対称ルーティング環境(行きと帰りで異なる経路をたどるネットワーク)ではStrict Modeが誤って正規パケットを落とすことがあるため、Loose Modeから試すのが安全です。
3. Linuxサーバーのiptablesとnftablesによるなりすましパケット遮断
自社のLinuxサーバーが持つIPアドレス空間以外を送信元とするパケットがサーバー自身から送出されないよう、アウトバウンドの制御を設定します。あわせて、インバウンドで明らかに偽装と判断できるパケット(プライベートアドレスをインターネット側から受け取るなど)をドロップします。
iptablesによるスプーフィング対策の例:
# eth0がインターネット接続インタフェースとする # インターネット側から到達すべきでないプライベートアドレスを遮断 iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP iptables -A INPUT -i eth0 -s 169.254.0.0/16 -j DROP # ループバックアドレスを送信元とするパケットをeth0で受信した場合に遮断 iptables -A INPUT -i eth0 -s 0.0.0.0/8 -j DROP iptables -A INPUT -i eth0 -s 224.0.0.0/4 -j DROP iptables -A INPUT -i eth0 -s 240.0.0.0/4 -j DROP # 設定の確認 iptables -L INPUT -n -v
nftablesによる同等の設定例:
# /etc/nftables.conf に追記する例 table inet filter { chain input { type filter hook input priority 0; policy drop; # インターネット側インタフェース(eth0)からの明らかな偽装パケットを破棄 iifname "eth0" ip saddr { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8, 169.254.0.0/16, 0.0.0.0/8, 224.0.0.0/4, 240.0.0.0/4 } drop # 確立済み・関連トラフィックは許可 ct state established,related accept # ループバックインタフェースは許可 iifname lo accept } }
カーネルのrp_filterパラメータを有効化すると、Linuxカーネル自体がuRPFに相当する逆パス検証を行います。
# /etc/sysctl.conf または /etc/sysctl.d/99-antispoofing.conf に追記 net.ipv4.conf.all.rp_filter = 1 # 1=Strict Mode / 2=Loose Mode net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.eth0.rp_filter = 1 # 設定を即時反映 sysctl -p /etc/sysctl.d/99-antispoofing.conf # 設定確認 sysctl net.ipv4.conf.all.rp_filter
注意点: rp_filterはLinuxカーネルによる逆パス検証ですが、前述のとおり非対称ルーティング環境ではStrict Mode(値=1)が正規パケットを落とす可能性があります。その場合はLoose Mode(値=2)か、あるいはiptables/nftablesによる個別制御を検討してください。
中小企業でも今日からできること
企業ネットワーク全体でIPスプーフィングを撲滅するにはISPや上流ネットワーク事業者の協力が必要で、単独では限界があります。それでも、自社で管理するインフラ内での被害を最小化するために以下の対策を優先して実施しましょう。
・Linuxサーバーのrp_filter有効化: /etc/sysctl.confにnet.ipv4.conf.all.rp_filter=1を追記するだけで有効化できます。まず開発・検証環境で動作を確認してから本番に適用してください。
・ファイアウォールでのプライベートアドレス遮断: インターネット側インタフェースでプライベートIPアドレス帯域(RFC1918)を送信元とするパケットをドロップするルールを設定します。
・NTP・DNSサーバーのオープンリゾルバ化防止: 自社のNTPサーバーやDNSサーバーが外部から増幅攻撃の反射サーバーとして悪用されないよう、外部への応答を制限します。
・クラウド環境ではセキュリティグループを活用: AWSやAzureのマネージドサービスは標準でIPスプーフィングを防ぐ仕組みが備わっているため、オンプレミスより対策コストが低くなります。
・DDoS攻撃を受けたときの対処を事前に決めておく: IPスプーフィングを悪用したリフレクション攻撃を受けた場合の初動(上流プロバイダへの連絡先・ACLによる一時遮断手順)を文書化しておきます。
よくある誤解と注意点
誤解1: 「うちには攻撃する価値のある情報がないからIPスプーフィングは関係ない」
IPスプーフィングによるリフレクション増幅攻撃では、自社のサーバーが「踏み台」として悪用される被害も発生します。自社の業務影響だけでなく、加害者になるリスクも考慮してください。
誤解2: 「VPNを使えばIPスプーフィングを防げる」
VPNはVPNトンネル内の通信を暗号化しますが、VPN外部でのIPスプーフィング攻撃を根本的に防ぐわけではありません。rp_filterやIngress Filteringとは別の仕組みです。
誤解3: 「iptablesでプライベートアドレスを遮断すれば完璧だ」
プライベートアドレスの遮断は有効な対策ですが、攻撃者がパブリックIPアドレスを偽装した場合には効果がありません。BCP38・uRPF・レート制限など複数の対策を組み合わせることが重要です。
注意: 不正アクセスに関わる行為について
IPスプーフィングの技術を悪用して他者のシステムへ不正にアクセスする行為は、不正アクセス禁止法に違反します。本記事の情報は防御目的のみに活用してください。法的な詳細は法律の専門家にご確認ください。

本記事のまとめ
| ポイント | 内容 | 優先度 |
|---|---|---|
| IPスプーフィングの本質 | TCP/IPの設計上の前提(送信元の正直さ)を悪用した偽装パケット送信 | 理解必須 |
| 最大の実害 | DDoSリフレクション・増幅攻撃(DNS/NTP増幅で数十~数百倍に増幅) | 高 |
| Linuxサーバー対策 | rp_filter有効化+iptables/nftablesでRFC1918アドレスをブロック | 高 |
| ネットワーク機器対策 | エッジルーターでuRPF設定・BCP38準拠のIngress Filtering適用 | 高 |
| 踏み台被害の防止 | 自社NTP・DNSサーバーがオープンリゾルバにならないよう設定制限 | 中 |
| クラウド環境 | AWSセキュリティグループ・AzureNSGは標準でスプーフィング防止済み | 確認推奨 |
IPスプーフィングは単独で深刻な被害をもたらすというよりも、DDoS増幅やセッションハイジャックなど他の攻撃を強化するための「土台」として機能します。rp_filterの有効化とファイアウォールでのプライベートアドレス遮断は、サーバー1台から今日にでも実施できます。ISP側のBCP38対応状況を確認し、上流ネットワークとの連携を深めておくことが長期的な対策の柱になります。
ネットワークのパケット制御を詳しく知りたい方は、ACL(アクセス制御リスト)とは?ルーターとスイッチのパケットフィルタリング設定を現場目線で解説もあわせてご確認ください。SYNフラッド攻撃の対策についてはSYNフラッド攻撃とは?TCPの弱点を突くDDoSの仕組みとLinuxサーバーの防御設定ガイドも参考になります。
Linuxのファイアウォール設定(iptables・nftables)の詳細については、姉妹サイトLinuxMaster.JPでも実践的な解説を公開しています。
PR
実践 パケット解析 第3版(Chris Sanders/オライリー・ジャパン)
Wiresharkを使ったパケット解析の定番書。IPスプーフィングを含む不審なトラフィックの見極め方を実際のキャプチャデータとともに学べます。ネットワーク防御担当者の手元に一冊あると心強い実践書です。
