社内のPCがどのWebサイトに接続しているか、全部把握できていますか?マルウェアに感染したPCが攻撃者のサーバーと通信するC2トラフィックのほとんどは、外見上は普通のHTTPやHTTPSアクセスに見えます。出口制御が整っていなければ、不審な通信が流れ続けても気づく手段がありません。
この記事では、フォワードプロキシの仕組みとWebフィルタリングを活用したネットワーク出口制御について、現場で使えるレベルで解説します。オープンソースのSquidを使った設定例から、予算が限られた中小企業でも導入しやすいクラウド型の選択肢まで幅広くカバーします。
フォワードプロキシとは?リバースプロキシとの違い
フォワードプロキシは、社内のクライアントが外部のWebサーバーへアクセスする際に間に入る中継サーバーです。クライアントはプロキシに対してリクエストを送り、プロキシが代わりに外部へ接続して結果を返します。
よく混同されるリバースプロキシとの違いは「誰の代わりに立つか」です。
| 種別 | 誰の前に立つか | 代表的な用途 |
|---|---|---|
| フォワードプロキシ | クライアント(社内PC)側 | Webフィルタリング・帯域制御・キャッシュ |
| リバースプロキシ | サーバー(自社Webサーバー)側 | 負荷分散・WAF・SSL終端 |
セキュリティの文脈でフォワードプロキシが注目される理由は、すべての外向きWebトラフィックを一点に集約して検査・制御できる点にあります。ネットワークの「出口」に番人を置くイメージです。
リバースプロキシについてはリバースプロキシとは?仕組み・セキュリティ効果・設定ポイントをわかりやすく解説で詳しく解説しています。
攻撃者の視点:出口制御がないとどうなるか
マルウェアはC2(Command and Control:攻撃者が感染端末を遠隔操作するための通信)にHTTP/HTTPSを使います。理由は単純で、ほとんどの組織でポート80と443は外向きに開放されているからです。
攻撃者が悪用するパターンを整理すると次のようになります。
・HTTPS暗号化によるペイロード隠蔽: 通信が暗号化されているため、パケットを見ても何が流れているかわからない
・正規ドメインの悪用(ドメインフロンティング): CDNやクラウドサービスのドメイン経由で通信を隠す
・DNSトンネリング: DNS問い合わせにデータを埋め込んでプロキシをすり抜ける
・ビーコン通信: 一定間隔で少量のデータを送ることで気づかれにくくする
出口制御のない環境では、感染したPCが数週間にわたって攻撃者のサーバーに接続し続けるケースも珍しくありません。フォワードプロキシを導入することで、少なくとも「すべてのHTTP/HTTPS通信を経由させる」という強制が可能になり、不審な宛先へのアクセスをブロックしたりログに残したりできます。
フォワードプロキシによる防御手順
1. Squidのインストールと基本設定
オープンソースのSquidは、フォワードプロキシの定番実装です。RHELやAlmaLinux系でのセットアップは次のとおりです。
# Squidのインストール(RHEL/AlmaLinux 8/9) sudo dnf install -y squid # サービスの有効化と起動 sudo systemctl enable --now squid # 起動確認 sudo systemctl status squid
基本の設定ファイル `/etc/squid/squid.conf` では、許可するクライアントネットワークとポートを指定します。
# /etc/squid/squid.conf(変更箇所のみ抜粋) # 社内ネットワーク(例: 192.168.10.0/24)を定義 acl localnet src 192.168.10.0/24 # 許可するポートを制限(未定義ポートへのCONNECT等を防止) acl Safe_ports port 80 # HTTP acl Safe_ports port 443 # HTTPS acl SSL_ports port 443 http_access deny !Safe_ports http_access deny CONNECT !SSL_ports # 定義したlocalnetからのアクセスだけ許可 http_access allow localnet http_access deny all # プロキシのリスニングポート(デフォルト3128を使用) http_port 3128
クライアント側はブラウザやOS設定で `プロキシIP:3128` を指定します。Active Directory環境であればグループポリシー(GPO)で全社のPCに一括配布できます。
SquidはLinuxサーバー上で動作するため、導入先サーバーの初期セキュリティ設定については姉妹サイトLinuxMaster.JPのLinuxサーバー構築ガイドも合わせてご参照ください。
2. URLフィルタリングの設定
Squidの `acl` 機能を使うと、接続先ドメインやURLパターンでアクセスを制御できます。シンプルなブラックリスト方式の例です。
# squid.conf に追記 # ブロック対象ドメインをファイルで管理 # 行頭に「.」を付けるとサブドメインも一括ブロック acl blocklist dstdomain "/etc/squid/blocklist.txt" http_access deny blocklist # /etc/squid/blocklist.txt の記載例 # .malware-example.com # .phishing-site.net
脅威インテリジェンスの観点から、URLhaus(abuse.ch が運営するマルウェア配布URLのデータベース)のフィードをcronで定期取得し、blocklist.txtを自動更新する運用が効果的です。
より高度なカテゴリフィルタリングにはE2guardian(SSL/TLS対応・コンテンツ検査機能あり)やSquidGuard(軽量・高速)をSquidと組み合わせる方法もあります。
3. アクセスログの活用と監査
Squidのログは `/var/log/squid/access.log` に記録されます。各行は「タイムスタンプ 処理時間 クライアントIP アクション/HTTPステータス データ量 メソッド URL」の形式です。
# リアルタイムでアクセス状況を確認 sudo tail -f /var/log/squid/access.log # 特定クライアントIPのアクセスを抽出 sudo grep "192.168.10.50" /var/log/squid/access.log | tail -100 # ブロック(DENIED)ログだけ抽出 sudo grep "DENIED" /var/log/squid/access.log | tail -50 # アクセスの多いドメインTOP20を集計 sudo awk '{print $7}' /var/log/squid/access.log \ | sort | uniq -c | sort -rn | head -20
SIEMと連携させると、深夜の定期的な外部接続(ビーコン通信の特徴)や見慣れないドメインへの集中アクセスを自動検知できます。
SSLインスペクションとの組み合わせ
現代のWebトラフィックの大半はHTTPSで暗号化されているため、フォワードプロキシだけではコンテンツの中身まで検査できません。この限界を補うのがSSLインスペクション(TLSインスペクション)です。
プロキシがHTTPS通信を中継する際に一度復号し、コンテンツを検査してから再暗号化して転送します。詳しい仕組みと実装上の注意点はSSLインスペクション(TLSインスペクション)とは?仕組み・企業での活用・プライバシー配慮をわかりやすく解説をご覧ください。
実装前に押さえておくポイントは次のとおりです。
・従業員への事前説明と就業規則への明記: 業務端末のHTTPS通信を検査することをあらかじめ周知する
・自社CAの展開: Squidが生成するサーバー証明書を信頼するよう、社内の全クライアントに自社ルートCA証明書を配布する
・除外リストの設定: インターネットバンキング・医療機関・政府機関サイトはSSL検査対象から外すのが一般的
中小企業でも今日からできること
Squidの構築・運用が難しい場合、クラウド型のSWG(Secure Web Gateway)が現実的な選択肢になります。
・Cloudflare Gateway(Cloudflare Zero Trust): 無料プランでも基本的なDNSフィルタリングが使える。DNSをCloudflare向けに変更するだけで即日利用可能で、小規模組織の第一歩に最適
・Cisco Umbrella(旧OpenDNS): DNSベースのフィルタリングに加えてプロキシ機能も持つ。有料プランで悪意あるサイトのカテゴリフィルタリングが使える
・UTM(統合脅威管理)アプライアンス: FortiGateやSophos XGなどはWebフィルタリング機能が組み込まれており、追加ソフトなしで利用できる
DNS次元でのフィルタリングはHTTPSの中身を検査できませんが、マルウェアのC2通信先として知られる悪意あるドメインへの名前解決をブロックできます。実装コストが低く効果も即日出るため「まず第一歩」として有効です。
ゼロトラストアーキテクチャへの移行を見据えると、フォワードプロキシはSWGへ、さらにクラウドベースのZTNA(ゼロトラストネットワークアクセス)へと発展します。ゼロトラストの基本についてはゼロトラストとは?概念・仕組み・導入手順をわかりやすく解説をご参照ください。
よくある誤解と注意点
「プロキシがあればVPNは不要」は誤り
フォワードプロキシはWebトラフィックの出口制御が目的です。社外から社内への安全なアクセス経路を提供するVPNとは役割が根本的に異なります。両者は補完関係にあります。
「プロキシを迂回するマルウェアには効果がない」は半分誤り
DNSトンネリングやICMPトンネリングなど、プロキシを経由しない通信経路は存在します。ただし、ネットワーク設計でクライアントからの直接インターネット接続をファイアウォールで遮断しプロキシ経由のみを許可することで、プロキシを通らないトラフィックを「異常」として検知・ブロックできます。多層防御の一環として捉えることが重要です。
「設定したら終わり」は危険
ブラックリストは定期更新しなければ陳腐化します。URLhausなどの脅威インテリジェンスフィードと自動連携する仕組みを整え、月1回以上のルール棚卸しを運用フローに組み込みましょう。
本記事のまとめ
| 項目 | 内容 |
|---|---|
| フォワードプロキシの役割 | 社内クライアントの代わりに外部へ接続し、通信を記録・制御する |
| リバースプロキシとの違い | クライアント側(フォワード)かサーバー側(リバース)か |
| 主なセキュリティ効果 | C2通信ブロック・URLフィルタリング・アクセスログ監査 |
| 代表ツール(オンプレ) | Squid + SquidGuard / E2guardian |
| 代表サービス(クラウド) | Cloudflare Gateway / Cisco Umbrella / UTMアプライアンス |
| HTTPS対応 | SSLインスペクションと組み合わせることで暗号化トラフィックも検査可能 |
| 今日からできる第一歩 | Cloudflare GatewayのDNSフィルタリング(無料プランから) |
PR
ゼロトラストネットワーク[実践]入門(野村総合研究所・NRIセキュアテクノロジーズ)
フォワードプロキシからSWG、ZTNAへの移行を体系的に解説した実践書。ネットワーク出口制御の次のステップを考えている情シス担当者に特に役立つ一冊です。
