1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

docker で実行しているプログラムがどんな通信をしているのか監視したい!

Posted at

目的

謎のライブラリやアプリケーションがどんなサーバーと通信しているのか監視したいなぁ...
と思ってそんな環境を作りました。

システム構成

docker で下記の2つのサービスを立てる

  • squid コンテナ
    • 通信制御用
  • 開発用コンテナ
    • ここでプログラムを実行する

ファイル構成

下記のようにファイルを配置

$ tree .
.
├── compose.yml
├── dev
│   └── Dockerfile
└── proxy
    ├── Dockerfile
    ├── squid.conf
    └── whitelist.txt

compose.yaml

./compose.yaml
services:
  squid-container:
    build:
      context: .
      dockerfile: ./proxy/Dockerfile
    ports:
      - 3128:3128
    networks:
      - con-network
      - iso-network

  dev-container:
    build:
      context: .
      dockerfile: ./dev/Dockerfile
    networks:
      - iso-network
    tty: true

    environment:
      HTTP_PROXY: http://squid-container:3128
      HTTPS_PROXY: http://squid-container:3128
      http_proxy: http://squid-container:3128
      https_proxy: http://squid-container:3128

networks:
  iso-network:
    name: iso_network
    internal: true

  con-network:
    name: con_network

開発用 Dockerfile

apt install の中身はネットワーク通信の確認用

./dev/Dockerfile
FROM mcr.microsoft.com/devcontainers/base:jammy
ENV TZ=JST

RUN apt update
RUN apt upgrade -y
RUN apt install -y curl iproute2 dnsutils

Squid 用 Dockerfile

squid の設定ファイルやホワイトリストはあらかじめコピーする

./proxy/Dockerfile
FROM ubuntu/squid
ENV TZ=JST

RUN apt update
RUN apt upgrade -y
RUN apt install -y curl

RUN mkdir /etc/squid/acl

COPY proxy/squid.conf /etc/squid/squid.conf
COPY proxy/whitelist.txt /etc/squid/acl/whitelist.txt

squid.conf

ホワイトリストに記載されたサイトだけを許可し、それ以外の通信は拒否。

./proxy/squid.conf
http_port 3128

acl whitelist dstdomain "/etc/squid/acl/whitelist.txt"
http_access allow whitelist

http_access deny all

whitelist.txt

ホワイトリストのファイルに通信をしてもいいサイトを記述していきます。
.がはじめについてるとサブドメインを許可。なければそのサイトだけ許可。

./proxy/whitelist.txt
.google.com
yahoo.com

実行!

docker compose up -d

通信ができるパターン

$ curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

通信ができないパターン

$ curl www.yahoo.com    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta type="copyright" content="Copyright (C) 1996-2021 The Squid Software Foundation and contributors">
(以下略)

通信ログの確認

下記のコマンドを確認すれば、通信状況が確認できます。

docker logs -f squid-container-1

あとは通信を監視したいプログラムを開発コンテナ内で実装をするだけ...かな?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?