selfhostblocks/modules/blocks/mitmdump/docs/default.md
2025-07-31 23:21:57 +02:00

2.7 KiB

Mitmdump Block

Defined in /modules/blocks/authelia.nix.

This block sets up an Mitmdump service in reverse proxy mode. In other words, you can put this block between a client and a server to inspect all the network traffic.

Multiple instances of mitmdump all listening on different ports and proxying to different upstream servers can be created.

The systemd service is made so it is started only when the mitmdump instance has started listening on the expected port.

Usage

Put mitmdump in front of a HTTP server listening on port 8000 on the same machine:

shb.mitmdump.instances."my-instance" = {
  listenPort = 8001;
  upstreamHost = "http://127.0.0.1";
  upstreamPort = 8000;
  after = [ "server.service" ];
};

upstreamHost is the default here and can be left out.

Put mitmdump in front of a HTTP server listening on port 8000 on another machine:

shb.mitmdump.instances."my-instance" = {
  listenPort = 8001;
  upstreamHost = "http://otherhost";
  upstreamPort = 8000;
  after = [ "server.service" ];
};

Replace http with https if the server expects an HTTPS connection.

Example

Let's assume a server is listening on port 8000 which responds a plain text response test1 and its related systemd service is named test1.service. Sorry, creative naming is not my forte.

Let's put an mitmdump instance in front of it, like so:

shb.mitmdump.instances."test1" = {
  listenPort = 8001;
  upstreamPort = 8000;
  after = [ "test1.service" ];
};

This creates an mitmdump-test1.service systemd service. We can then use journalctl -u mitmdump-test1.service to see the output.

If we make a curl request to it: curl -v http://127.0.0.1:8001, we will get the following output:

mitmdump-test1[971]: 127.0.0.1:40878: GET http://127.0.0.1:8000/ HTTP/1.1
mitmdump-test1[971]:     Host: 127.0.0.1:8000
mitmdump-test1[971]:     User-Agent: curl/8.14.1
mitmdump-test1[971]:     Accept: */*
mitmdump-test1[971]:  << HTTP/1.0 200 OK 5b
mitmdump-test1[971]:     Server: BaseHTTP/0.6 Python/3.13.4
mitmdump-test1[971]:     Date: Thu, 31 Jul 2025 20:55:16 GMT
mitmdump-test1[971]:     Content-Type: text/plain
mitmdump-test1[971]:     Content-Length: 5
mitmdump-test1[971]:     test1

Tests

Specific integration tests are defined in /test/blocks/mitmdump.nix.

Options Reference

id-prefix: blocks-mitmdump-options-
list-id: selfhostblocks-block-mitmdump-options
source: @OPTIONS_JSON@