1
0
mirror of https://github.com/Mailu/Mailu.git synced 2024-12-02 09:02:08 +02:00

as requested

This commit is contained in:
Florent Daigniere 2024-06-28 12:44:29 +02:00
parent 1917bf7ee4
commit d3ea0f898a
6 changed files with 107 additions and 616 deletions

1
.gitignore vendored
View File

@ -9,6 +9,7 @@ pip-selfcheck.json
/docs/lib*
/docs/bin
/docs/include
/docs/contributors/mailu-network-diagram.svg
/docs/_build
/.env
/.venv

View File

@ -9,7 +9,7 @@ COPY . /docs
RUN set -euxo pipefail \
; machine="$(uname -m)" \
; deps="gcc musl-dev" \
; deps="gcc musl-dev graphviz" \
; [[ "${machine}" != x86_64 ]] && \
deps="${deps} cargo" \
; apk add --no-cache --virtual .build-deps ${deps} \
@ -17,7 +17,8 @@ RUN set -euxo pipefail \
mkdir -p /root/.cargo/registry/index && \
git clone --bare https://github.com/rust-lang/crates.io-index.git /root/.cargo/registry/index/github.com-1285ae84e5963aae \
; pip3 install -r /requirements.txt \
; mkdir -p /build/$VERSION \
; mkdir -p /build/$VERSION/ \
; dot -Tsvg /docs/mailu-network-diagram.dot -o /docs/contributors/mailu-network-diagram.svg \
; sphinx-build -W /docs /build/$VERSION \
; apk del .build-deps \
; rm -rf /root/.cargo

View File

@ -0,0 +1,10 @@
Firewalling
===========
Network flows within Mailu
--------------------------
The following diagram may prove useful in understanding how the different components interact.
.. image:: mailu-network-diagram.svg

View File

@ -81,3 +81,4 @@ the version of Mailu that you are running.
contributors/database
contributors/memo
contributors/localization
contributors/firewalling

View File

@ -0,0 +1,92 @@
digraph mailu {
label = "Mailu";
fontname = "arial";
node [shape = box; fontname = "arial"; fontsize = 8; style = filled; color = "#d3edea";];
splines = "compound";
// node [shape = "box"; fontsize = "10";];
edge [fontsize = "8";];
# Components
internet [label = "Internet";];
proxy [label = "Optional proxy"; shape = "polygon"];
front [label = "Front";];
admin [label = "Admin";];
smtp [label = "SMTP";];
redis [label = "Redis";];
antispam [label = "Antispam";];
antivirus [label = "Anti-Virus";];
imap [label = "IMAP";];
webdav [label = "WebDAV";];
webmail [label = "Webmail";];
fetchmail [label = "Fetchmail";];
oletools [label = "Oletools"];
fts_attachments [label = "Tika"];
# proxy from internet
internet -> proxy [label = "25/tcp";];
internet -> proxy [label = "80/tcp";];
internet -> proxy [label = "443/tcp";];
internet -> proxy [label = "465/tcp";];
internet -> proxy [label = "587/tcp";];
internet -> proxy [label = "110/tcp";];
internet -> proxy [label = "995/tcp";];
internet -> proxy [label = "143/tcp";];
internet -> proxy [label = "993/tcp";];
internet -> proxy [label = "4190/tcp";];
# Front from proxy
proxy -> front [label = "25/tcp";];
proxy -> front [label = "80/tcp";];
proxy -> front [label = "443/tcp";];
proxy -> front [label = "465/tcp";];
proxy -> front [label = "587/tcp";];
proxy -> front [label = "110/tcp";];
proxy -> front [label = "995/tcp";];
proxy -> front [label = "143/tcp";];
proxy -> front [label = "993/tcp";];
proxy -> front [label = "4190/tcp";];
front -> front [label = "8008/tcp";];
front -> front [label = "8000/tcp";];
front -> admin [label = "8080/tcp";];
front -> imap [label = "4190/tcp";];
front -> imap [label = "143/tcp";];
front -> imap [label = "110/tcp";];
front -> smtp [label = "25/tcp";];
front -> smtp [label = "10025/tcp";];
front -> webmail [label = "80/tcp";];
front -> antispam [label = "11334/tcp";];
front -> webdav [label = "5232/tcp";];
smtp -> admin [label = "8080/tcp";];
smtp -> front [label = "2525/tcp";];
smtp -> antispam [label = "11332/tcp";];
imap -> admin [label = "8080/tcp";];
imap -> antispam [label = "11334/tcp";];
imap -> proxy [label = "25/tcp";];
imap -> fts_attachments [label = "9998/tcp";];
webmail -> front [label = "14190/tcp";];
webmail -> front [label = "10025/tcp";];
webmail -> front [label = "10143/tcp";];
# carddav
webmail -> proxy [label = "443/tcp";];
admin -> redis [label = "6379/tcp";];
admin -> front [label = "2525/tcp";];
antispam -> redis [label = "6379/tcp";];
antispam -> admin [label = "8080/tcp";];
antispam -> oletools [label = "11343/tcp";];
antispam -> antivirus [label = "3310/tcp";];
fetchmail -> admin [label = "8080/tcp"]
fetchmail -> proxy [label = "25/tcp"]
fetchmail -> front [label = "2525/tcp"]
#
# those don't need internet:
# oletools
# fts_attachments
# redis
}

View File

@ -1,614 +0,0 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Title: mailu Pages: 1 -->\n",
"<svg width=\"883pt\" height=\"553pt\"\n",
" viewBox=\"0.00 0.00 883.00 553.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 549)\">\n",
"<title>mailu</title>\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-549 879,-549 879,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"437.5\" y=\"-7.8\" font-family=\"arial\" font-size=\"14.00\">Mailu</text>\n",
"<!-- internet -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>internet</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"451,-545 397,-545 397,-509 451,-509 451,-545\"/>\n",
"<text text-anchor=\"middle\" x=\"424\" y=\"-525.1\" font-family=\"arial\" font-size=\"8.00\">Internet</text>\n",
"</g>\n",
"<!-- proxy -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>proxy</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"485,-464 417,-464 417,-428 485,-428 485,-464\"/>\n",
"<text text-anchor=\"middle\" x=\"451\" y=\"-444.1\" font-family=\"arial\" font-size=\"8.00\">Optional proxy</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M396.81,-521.99C334.56,-512.79 187,-491 187,-491 187,-491 187,-482 187,-482 187,-482 331.42,-462.85 406.63,-452.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"407.3,-456.32 416.76,-451.54 406.38,-449.38 407.3,-456.32\"/>\n",
"<text text-anchor=\"middle\" x=\"200.5\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">25/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M396.81,-520.91C344.94,-511.2 237,-491 237,-491 237,-491 237,-482 237,-482 237,-482 343.89,-464.52 406.58,-454.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"407.31,-457.69 416.62,-452.62 406.18,-450.78 407.31,-457.69\"/>\n",
"<text text-anchor=\"middle\" x=\"250.5\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">80/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M396.93,-519.09C357.01,-508.89 287,-491 287,-491 287,-491 287,-482 287,-482 287,-482 358.06,-466.83 406.63,-456.47\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"407.57,-459.85 416.62,-454.34 406.11,-453 407.57,-459.85\"/>\n",
"<text text-anchor=\"middle\" x=\"303\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">443/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M396.7,-514.35C372.84,-504.16 342,-491 342,-491 342,-491 342,-482 342,-482 342,-482 376.89,-470.8 407.18,-461.07\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"408.36,-464.37 416.81,-457.98 406.22,-457.7 408.36,-464.37\"/>\n",
"<text text-anchor=\"middle\" x=\"358\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">465/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M410.82,-508.91C403.96,-500.03 397,-491 397,-491 397,-491 397,-482 397,-482 397,-482 405.67,-476.38 416.06,-469.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"418.14,-472.47 424.63,-464.09 414.34,-466.59 418.14,-472.47\"/>\n",
"<text text-anchor=\"middle\" x=\"413\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">587/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M429.86,-508.86C433.36,-498.61 437.89,-485.37 441.85,-473.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"445.23,-474.7 445.15,-464.11 438.61,-472.44 445.23,-474.7\"/>\n",
"<text text-anchor=\"middle\" x=\"455\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">110/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M448.9,-508.91C461.85,-500.03 475,-491 475,-491 475,-491 475,-482 475,-482 475,-482 472.21,-477.93 468.53,-472.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"471.26,-470.36 462.72,-464.09 465.49,-474.32 471.26,-470.36\"/>\n",
"<text text-anchor=\"middle\" x=\"491\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">995/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M451.05,-515.12C476.59,-504.84 511,-491 511,-491 511,-491 511,-482 511,-482 511,-482 500.98,-476.16 489.13,-469.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"490.7,-466.11 480.3,-464.09 487.17,-472.15 490.7,-466.11\"/>\n",
"<text text-anchor=\"middle\" x=\"527\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">143/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M451.3,-518.23C487.53,-507.92 547,-491 547,-491 547,-491 547,-482 547,-482 547,-482 520.04,-472.17 494.69,-462.93\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"495.71,-459.58 485.12,-459.44 493.31,-466.15 495.71,-459.58\"/>\n",
"<text text-anchor=\"middle\" x=\"563\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">993/tcp</text>\n",
"</g>\n",
"<!-- internet&#45;&gt;proxy -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>internet&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M451.33,-519.98C496.79,-509.98 583,-491 583,-491 583,-491 583,-482 583,-482 583,-482 533.66,-468.92 495.31,-458.75\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"495.9,-455.28 485.34,-456.1 494.11,-462.05 495.9,-455.28\"/>\n",
"<text text-anchor=\"middle\" x=\"601.5\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">4190/tcp</text>\n",
"</g>\n",
"<!-- front -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>front</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"447,-383 393,-383 393,-347 447,-347 447,-383\"/>\n",
"<text text-anchor=\"middle\" x=\"420\" y=\"-363.1\" font-family=\"arial\" font-size=\"8.00\">Front</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M416.75,-440.24C347.85,-430.67 199,-410 199,-410 199,-410 199,-401 199,-401 199,-401 320.04,-381.83 382.96,-371.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"383.57,-375.31 392.9,-370.29 382.48,-368.4 383.57,-375.31\"/>\n",
"<text text-anchor=\"middle\" x=\"212.5\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">25/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M416.73,-439.06C359.1,-429.08 249,-410 249,-410 249,-410 249,-401 249,-401 249,-401 332.75,-383.86 383.03,-373.57\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"383.81,-376.98 392.9,-371.55 382.41,-370.12 383.81,-376.98\"/>\n",
"<text text-anchor=\"middle\" x=\"262.5\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">80/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M416.89,-437.15C372.07,-426.83 299,-410 299,-410 299,-410 299,-401 299,-401 299,-401 347.6,-386.94 383.2,-376.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"384.21,-380 392.85,-373.85 382.27,-373.27 384.21,-380\"/>\n",
"<text text-anchor=\"middle\" x=\"315\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">443/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M416.8,-432.66C388.87,-422.58 354,-410 354,-410 354,-410 354,-401 354,-401 354,-401 368.39,-393.37 383.73,-385.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"385.58,-388.22 392.77,-380.44 382.3,-382.03 385.58,-388.22\"/>\n",
"<text text-anchor=\"middle\" x=\"370\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">465/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M430.49,-427.91C419.83,-419.03 409,-410 409,-410 409,-410 409,-401 409,-401 409,-401 410.11,-397.47 411.62,-392.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"414.97,-393.68 414.63,-383.09 408.29,-391.58 414.97,-393.68\"/>\n",
"<text text-anchor=\"middle\" x=\"425\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">587/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M447.11,-427.86C444.3,-415.51 441,-401 441,-401 441,-401 438.67,-397.11 435.56,-391.93\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"438.4,-389.86 430.25,-383.09 432.4,-393.47 438.4,-389.86\"/>\n",
"<text text-anchor=\"middle\" x=\"459\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">110/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M464.67,-427.91C471.78,-419.03 479,-410 479,-410 479,-410 479,-401 479,-401 479,-401 468.17,-394.57 455.79,-387.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"457.47,-384.16 447.08,-382.07 453.9,-390.18 457.47,-384.16\"/>\n",
"<text text-anchor=\"middle\" x=\"495\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">995/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M482.25,-427.91C498.5,-419.03 515,-410 515,-410 515,-410 515,-401 515,-401 515,-401 483.51,-389.4 456.78,-379.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"457.82,-376.2 447.22,-376.03 455.4,-382.77 457.82,-376.2\"/>\n",
"<text text-anchor=\"middle\" x=\"531\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">143/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M485.13,-433.05C514.1,-422.91 551,-410 551,-410 551,-410 551,-401 551,-401 551,-401 495.82,-386.26 457.08,-375.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"457.71,-372.45 447.14,-373.25 455.9,-379.21 457.71,-372.45\"/>\n",
"<text text-anchor=\"middle\" x=\"567\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">993/tcp</text>\n",
"</g>\n",
"<!-- proxy&#45;&gt;front -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>proxy&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M485.32,-436.17C525.61,-425.8 587,-410 587,-410 587,-410 587,-401 587,-401 587,-401 506.4,-384.11 457.19,-373.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"457.71,-370.33 447.2,-371.7 456.27,-377.18 457.71,-370.33\"/>\n",
"<text text-anchor=\"middle\" x=\"605.5\" y=\"-403.6\" font-family=\"Times,serif\" font-size=\"8.00\">4190/tcp</text>\n",
"</g>\n",
"<!-- front&#45;&gt;front -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>front&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M447.24,-368.75C457.02,-368.83 465,-367.58 465,-365 465,-363.43 462.04,-362.35 457.51,-361.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"457.4,-358.26 447.24,-361.25 457.05,-365.25 457.4,-358.26\"/>\n",
"<text text-anchor=\"middle\" x=\"483.5\" y=\"-363.1\" font-family=\"Times,serif\" font-size=\"8.00\">8008/tcp</text>\n",
"</g>\n",
"<!-- front&#45;&gt;front -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>front&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M447.06,-371.31C472.18,-374.1 502,-371.99 502,-365 502,-358.94 479.57,-356.55 457.23,-357.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"456.73,-354.37 447.06,-358.69 457.31,-361.34 456.73,-354.37\"/>\n",
"<text text-anchor=\"middle\" x=\"520.5\" y=\"-363.1\" font-family=\"Times,serif\" font-size=\"8.00\">8000/tcp</text>\n",
"</g>\n",
"<!-- admin -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>admin</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"660,-140 606,-140 606,-104 660,-104 660,-140\"/>\n",
"<text text-anchor=\"middle\" x=\"633\" y=\"-120.1\" font-family=\"arial\" font-size=\"8.00\">Admin</text>\n",
"</g>\n",
"<!-- front&#45;&gt;admin -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>front&#45;&gt;admin</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M447.19,-360.71C519.13,-351.99 709,-329 709,-329 709,-329 736,-248 736,-248 736,-248 736,-239 736,-239 736,-239 712,-158 712,-158 712,-158 690.22,-148.35 669.53,-139.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"670.75,-135.9 660.19,-135.05 667.91,-142.3 670.75,-135.9\"/>\n",
"<text text-anchor=\"middle\" x=\"754.5\" y=\"-241.6\" font-family=\"Times,serif\" font-size=\"8.00\">8080/tcp</text>\n",
"</g>\n",
"<!-- smtp -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>smtp</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"447,-302 393,-302 393,-266 447,-266 447,-302\"/>\n",
"<text text-anchor=\"middle\" x=\"420\" y=\"-282.1\" font-family=\"arial\" font-size=\"8.00\">SMTP</text>\n",
"</g>\n",
"<!-- front&#45;&gt;smtp -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>front&#45;&gt;smtp</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M420,-346.86C420,-336.71 420,-323.63 420,-312.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"423.5,-312.11 420,-302.11 416.5,-312.11 423.5,-312.11\"/>\n",
"<text text-anchor=\"middle\" x=\"433.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">25/tcp</text>\n",
"</g>\n",
"<!-- front&#45;&gt;smtp -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>front&#45;&gt;smtp</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M433.67,-346.91C440.78,-338.03 448,-329 448,-329 448,-329 448,-320 448,-320 448,-320 444.59,-315.73 440.14,-310.18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"442.65,-307.71 433.67,-302.09 437.19,-312.09 442.65,-307.71\"/>\n",
"<text text-anchor=\"middle\" x=\"469.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">10025/tcp</text>\n",
"</g>\n",
"<!-- antispam -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>antispam</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"410,-221 356,-221 356,-185 410,-185 410,-221\"/>\n",
"<text text-anchor=\"middle\" x=\"383\" y=\"-201.1\" font-family=\"arial\" font-size=\"8.00\">Antispam</text>\n",
"</g>\n",
"<!-- front&#45;&gt;antispam -->\n",
"<g id=\"edge30\" class=\"edge\">\n",
"<title>front&#45;&gt;antispam</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M398.03,-346.91C386.6,-338.03 375,-329 375,-329 375,-329 341,-302 341,-302 341,-302 341,-266 341,-266 341,-266 353.96,-246.87 365.48,-229.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"368.59,-231.51 371.3,-221.27 362.79,-227.59 368.59,-231.51\"/>\n",
"<text text-anchor=\"middle\" x=\"362.5\" y=\"-282.1\" font-family=\"Times,serif\" font-size=\"8.00\">11334/tcp</text>\n",
"</g>\n",
"<!-- imap -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>imap</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"618,-302 564,-302 564,-266 618,-266 618,-302\"/>\n",
"<text text-anchor=\"middle\" x=\"591\" y=\"-282.1\" font-family=\"arial\" font-size=\"8.00\">IMAP</text>\n",
"</g>\n",
"<!-- front&#45;&gt;imap -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>front&#45;&gt;imap</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M447.33,-357.58C490.34,-347.48 569,-329 569,-329 569,-329 573.17,-320.67 577.87,-311.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"581.09,-312.65 582.43,-302.14 574.83,-309.52 581.09,-312.65\"/>\n",
"<text text-anchor=\"middle\" x=\"591.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">4190/tcp</text>\n",
"</g>\n",
"<!-- front&#45;&gt;imap -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>front&#45;&gt;imap</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M447.38,-359.06C500.86,-349.41 614,-329 614,-329 614,-329 614,-320 614,-320 614,-320 611.32,-315.93 607.79,-310.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"610.65,-308.52 602.23,-302.09 604.8,-312.37 610.65,-308.52\"/>\n",
"<text text-anchor=\"middle\" x=\"630\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">143/tcp</text>\n",
"</g>\n",
"<!-- front&#45;&gt;imap -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>front&#45;&gt;imap</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M447.1,-351.48C476.15,-338.06 522.45,-316.67 554.65,-301.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"556.14,-304.96 563.75,-297.59 553.2,-298.61 556.14,-304.96\"/>\n",
"<text text-anchor=\"middle\" x=\"526\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">110/tcp</text>\n",
"</g>\n",
"<!-- webdav -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>webdav</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"54,-302 0,-302 0,-266 54,-266 54,-302\"/>\n",
"<text text-anchor=\"middle\" x=\"27\" y=\"-282.1\" font-family=\"arial\" font-size=\"8.00\">WebDAV</text>\n",
"</g>\n",
"<!-- front&#45;&gt;webdav -->\n",
"<g id=\"edge31\" class=\"edge\">\n",
"<title>front&#45;&gt;webdav</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M392.87,-361.45C307.04,-353.4 47,-329 47,-329 47,-329 43.21,-320.67 38.93,-311.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"42.11,-309.79 34.79,-302.14 35.74,-312.69 42.11,-309.79\"/>\n",
"<text text-anchor=\"middle\" x=\"65.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">5232/tcp</text>\n",
"</g>\n",
"<!-- webmail -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>webmail</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"164,-302 110,-302 110,-266 164,-266 164,-302\"/>\n",
"<text text-anchor=\"middle\" x=\"137\" y=\"-282.1\" font-family=\"arial\" font-size=\"8.00\">Webmail</text>\n",
"</g>\n",
"<!-- front&#45;&gt;webmail -->\n",
"<g id=\"edge29\" class=\"edge\">\n",
"<title>front&#45;&gt;webmail</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M392.83,-361.14C313.54,-352.78 88,-329 88,-329 88,-329 88,-320 88,-320 88,-320 95.56,-314.6 104.74,-308.04\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"106.97,-310.75 113.07,-302.09 102.9,-305.05 106.97,-310.75\"/>\n",
"<text text-anchor=\"middle\" x=\"101.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">80/tcp</text>\n",
"</g>\n",
"<!-- admin&#45;&gt;front -->\n",
"<g id=\"edge44\" class=\"edge\">\n",
"<title>admin&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M642.47,-140.27C652.53,-158.62 667,-185 667,-185 667,-185 667,-221 667,-221 667,-221 650,-329 650,-329 650,-329 522.77,-348.36 457.57,-358.28\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"456.65,-354.88 447.29,-359.85 457.7,-361.8 456.65,-354.88\"/>\n",
"<text text-anchor=\"middle\" x=\"682.5\" y=\"-241.6\" font-family=\"Times,serif\" font-size=\"8.00\">2525/tcp</text>\n",
"</g>\n",
"<!-- redis -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>redis</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"284,-59 230,-59 230,-23 284,-23 284,-59\"/>\n",
"<text text-anchor=\"middle\" x=\"257\" y=\"-39.1\" font-family=\"arial\" font-size=\"8.00\">Redis</text>\n",
"</g>\n",
"<!-- admin&#45;&gt;redis -->\n",
"<g id=\"edge43\" class=\"edge\">\n",
"<title>admin&#45;&gt;redis</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M605.96,-115.32C539.78,-101.41 369.59,-65.66 294.06,-49.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"294.55,-46.31 284.05,-47.68 293.11,-53.16 294.55,-46.31\"/>\n",
"<text text-anchor=\"middle\" x=\"475.5\" y=\"-79.6\" font-family=\"Times,serif\" font-size=\"8.00\">6379/tcp</text>\n",
"</g>\n",
"<!-- smtp&#45;&gt;front -->\n",
"<g id=\"edge33\" class=\"edge\">\n",
"<title>smtp&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M399.98,-302.09C389.57,-310.97 379,-320 379,-320 379,-320 379,-329 379,-329 379,-329 384.95,-334.08 392.31,-340.36\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"390.1,-343.08 399.98,-346.91 394.65,-337.76 390.1,-343.08\"/>\n",
"<text text-anchor=\"middle\" x=\"397.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">2525/tcp</text>\n",
"</g>\n",
"<!-- smtp&#45;&gt;admin -->\n",
"<g id=\"edge32\" class=\"edge\">\n",
"<title>smtp&#45;&gt;admin</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M434.65,-265.91C442.26,-257.03 450,-248 450,-248 450,-248 497,-185 497,-185 497,-185 556.24,-157.99 596.52,-139.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"598.16,-142.73 605.81,-135.4 595.25,-136.36 598.16,-142.73\"/>\n",
"<text text-anchor=\"middle\" x=\"515.5\" y=\"-201.1\" font-family=\"Times,serif\" font-size=\"8.00\">8080/tcp</text>\n",
"</g>\n",
"<!-- smtp&#45;&gt;antispam -->\n",
"<g id=\"edge34\" class=\"edge\">\n",
"<title>smtp&#45;&gt;antispam</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M411.97,-265.86C407.12,-255.51 400.84,-242.1 395.37,-230.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"398.42,-228.68 391.01,-221.11 392.08,-231.65 398.42,-228.68\"/>\n",
"<text text-anchor=\"middle\" x=\"424.5\" y=\"-241.6\" font-family=\"Times,serif\" font-size=\"8.00\">11332/tcp</text>\n",
"</g>\n",
"<!-- antispam&#45;&gt;admin -->\n",
"<g id=\"edge46\" class=\"edge\">\n",
"<title>antispam&#45;&gt;admin</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M409.1,-184.86C427.91,-172.51 450,-158 450,-158 450,-158 542.37,-140.33 595.86,-130.1\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"596.83,-133.48 606,-128.16 595.52,-126.61 596.83,-133.48\"/>\n",
"<text text-anchor=\"middle\" x=\"468.5\" y=\"-160.6\" font-family=\"Times,serif\" font-size=\"8.00\">8080/tcp</text>\n",
"</g>\n",
"<!-- antispam&#45;&gt;redis -->\n",
"<g id=\"edge45\" class=\"edge\">\n",
"<title>antispam&#45;&gt;redis</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M355.76,-189.3C316.85,-171.16 250,-140 250,-140 250,-140 250,-104 250,-104 250,-104 252.04,-85.91 253.92,-69.27\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"257.41,-69.6 255.05,-59.27 250.45,-68.81 257.41,-69.6\"/>\n",
"<text text-anchor=\"middle\" x=\"268.5\" y=\"-120.1\" font-family=\"Times,serif\" font-size=\"8.00\">6379/tcp</text>\n",
"</g>\n",
"<!-- antivirus -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>antivirus</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"350,-140 296,-140 296,-104 350,-104 350,-140\"/>\n",
"<text text-anchor=\"middle\" x=\"323\" y=\"-120.1\" font-family=\"arial\" font-size=\"8.00\">Anti&#45;Virus</text>\n",
"</g>\n",
"<!-- antispam&#45;&gt;antivirus -->\n",
"<g id=\"edge48\" class=\"edge\">\n",
"<title>antispam&#45;&gt;antivirus</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M363.47,-184.91C353.31,-176.03 343,-167 343,-167 343,-167 339.21,-158.67 334.93,-149.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"338.11,-147.79 330.79,-140.14 331.74,-150.69 338.11,-147.79\"/>\n",
"<text text-anchor=\"middle\" x=\"361.5\" y=\"-160.6\" font-family=\"Times,serif\" font-size=\"8.00\">3310/tcp</text>\n",
"</g>\n",
"<!-- oletools -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>oletools</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"422,-140 368,-140 368,-104 422,-104 422,-140\"/>\n",
"<text text-anchor=\"middle\" x=\"395\" y=\"-120.1\" font-family=\"arial\" font-size=\"8.00\">Oletools</text>\n",
"</g>\n",
"<!-- antispam&#45;&gt;oletools -->\n",
"<g id=\"edge47\" class=\"edge\">\n",
"<title>antispam&#45;&gt;oletools</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M383.39,-184.86C383.67,-172.51 384,-158 384,-158 384,-158 385.11,-154.47 386.62,-149.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"389.97,-150.68 389.63,-140.09 383.29,-148.58 389.97,-150.68\"/>\n",
"<text text-anchor=\"middle\" x=\"405.5\" y=\"-160.6\" font-family=\"Times,serif\" font-size=\"8.00\">11343/tcp</text>\n",
"</g>\n",
"<!-- imap&#45;&gt;proxy -->\n",
"<g id=\"edge37\" class=\"edge\">\n",
"<title>imap&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M618.08,-301.07C633.59,-310.27 650,-320 650,-320 650,-320 650,-329 650,-329 650,-329 628,-410 628,-410 628,-410 547.63,-425.89 495.21,-436.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"494.26,-432.88 485.13,-438.25 495.62,-439.75 494.26,-432.88\"/>\n",
"<text text-anchor=\"middle\" x=\"657.5\" y=\"-363.1\" font-family=\"Times,serif\" font-size=\"8.00\">25/tcp</text>\n",
"</g>\n",
"<!-- imap&#45;&gt;admin -->\n",
"<g id=\"edge35\" class=\"edge\">\n",
"<title>imap&#45;&gt;admin</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M604.67,-265.91C611.78,-257.03 619,-248 619,-248 619,-248 625.83,-186.99 629.95,-150.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"633.45,-150.45 631.08,-140.12 626.49,-149.67 633.45,-150.45\"/>\n",
"<text text-anchor=\"middle\" x=\"644.5\" y=\"-201.1\" font-family=\"Times,serif\" font-size=\"8.00\">8080/tcp</text>\n",
"</g>\n",
"<!-- imap&#45;&gt;antispam -->\n",
"<g id=\"edge36\" class=\"edge\">\n",
"<title>imap&#45;&gt;antispam</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M563.81,-272.67C526.9,-258.66 460.84,-233.57 419.61,-217.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"420.79,-214.61 410.2,-214.33 418.3,-221.15 420.79,-214.61\"/>\n",
"<text text-anchor=\"middle\" x=\"514.5\" y=\"-241.6\" font-family=\"Times,serif\" font-size=\"8.00\">11334/tcp</text>\n",
"</g>\n",
"<!-- fts_attachments -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>fts_attachments</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"597,-221 543,-221 543,-185 597,-185 597,-221\"/>\n",
"<text text-anchor=\"middle\" x=\"570\" y=\"-201.1\" font-family=\"arial\" font-size=\"8.00\">Tika</text>\n",
"</g>\n",
"<!-- imap&#45;&gt;fts_attachments -->\n",
"<g id=\"edge38\" class=\"edge\">\n",
"<title>imap&#45;&gt;fts_attachments</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M586.44,-265.86C583.75,-255.71 580.27,-242.63 577.21,-231.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"580.5,-229.87 574.55,-221.11 573.73,-231.67 580.5,-229.87\"/>\n",
"<text text-anchor=\"middle\" x=\"599.5\" y=\"-241.6\" font-family=\"Times,serif\" font-size=\"8.00\">9998/tcp</text>\n",
"</g>\n",
"<!-- webmail&#45;&gt;proxy -->\n",
"<g id=\"edge42\" class=\"edge\">\n",
"<title>webmail&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M109.98,-294.75C81.28,-305.11 40,-320 40,-320 40,-320 40,-329 40,-329 40,-329 195,-410 195,-410 195,-410 333.07,-428.88 406.41,-438.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"406.36,-442.43 416.74,-440.32 407.31,-435.49 406.36,-442.43\"/>\n",
"<text text-anchor=\"middle\" x=\"159\" y=\"-363.1\" font-family=\"Times,serif\" font-size=\"8.00\">443/tcp</text>\n",
"</g>\n",
"<!-- webmail&#45;&gt;front -->\n",
"<g id=\"edge39\" class=\"edge\">\n",
"<title>webmail&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M137.39,-302.14C137.67,-314.49 138,-329 138,-329 138,-329 306.19,-349.87 382.79,-359.38\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"382.61,-362.89 392.96,-360.64 383.47,-355.94 382.61,-362.89\"/>\n",
"<text text-anchor=\"middle\" x=\"159.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">14190/tcp</text>\n",
"</g>\n",
"<!-- webmail&#45;&gt;front -->\n",
"<g id=\"edge40\" class=\"edge\">\n",
"<title>webmail&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M163.1,-302.14C181.91,-314.49 204,-329 204,-329 204,-329 320.64,-347.9 382.49,-357.92\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"382.21,-361.42 392.64,-359.57 383.33,-354.51 382.21,-361.42\"/>\n",
"<text text-anchor=\"middle\" x=\"225.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">10025/tcp</text>\n",
"</g>\n",
"<!-- webmail&#45;&gt;front -->\n",
"<g id=\"edge41\" class=\"edge\">\n",
"<title>webmail&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M164.19,-293.65C196.77,-304.02 247,-320 247,-320 247,-320 270,-329 270,-329 270,-329 338.52,-344.99 382.94,-355.35\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"382.3,-358.8 392.84,-357.66 383.89,-351.98 382.3,-358.8\"/>\n",
"<text text-anchor=\"middle\" x=\"291.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">10143/tcp</text>\n",
"</g>\n",
"<!-- fetchmail -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>fetchmail</title>\n",
"<polygon fill=\"#d3edea\" stroke=\"#d3edea\" points=\"800,-545 746,-545 746,-509 800,-509 800,-545\"/>\n",
"<text text-anchor=\"middle\" x=\"773\" y=\"-525.1\" font-family=\"arial\" font-size=\"8.00\">Fetchmail</text>\n",
"</g>\n",
"<!-- fetchmail&#45;&gt;proxy -->\n",
"<g id=\"edge50\" class=\"edge\">\n",
"<title>fetchmail&#45;&gt;proxy</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M745.67,-517.93C702.66,-505.23 624,-482 624,-482 624,-482 546.3,-466.28 495.05,-455.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"495.67,-452.47 485.18,-453.91 494.29,-459.33 495.67,-452.47\"/>\n",
"<text text-anchor=\"middle\" x=\"665.5\" y=\"-484.6\" font-family=\"Times,serif\" font-size=\"8.00\">25/tcp</text>\n",
"</g>\n",
"<!-- fetchmail&#45;&gt;front -->\n",
"<g id=\"edge51\" class=\"edge\">\n",
"<title>fetchmail&#45;&gt;front</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M753.14,-508.88C713.43,-474.65 628,-401 628,-401 628,-401 517.27,-382.37 457.39,-372.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"457.63,-368.78 447.19,-370.58 456.47,-375.69 457.63,-368.78\"/>\n",
"<text text-anchor=\"middle\" x=\"718.5\" y=\"-444.1\" font-family=\"Times,serif\" font-size=\"8.00\">2525/tcp</text>\n",
"</g>\n",
"<!-- fetchmail&#45;&gt;admin -->\n",
"<g id=\"edge49\" class=\"edge\">\n",
"<title>fetchmail&#45;&gt;admin</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M787.1,-508.86C806.22,-485.62 838,-447 838,-447 838,-447 838,-447 838,-202 838,-202 727,-158 727,-158 727,-158 696.03,-146.47 669.64,-136.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"670.78,-133.33 660.19,-133.12 668.34,-139.89 670.78,-133.33\"/>\n",
"<text text-anchor=\"middle\" x=\"856.5\" y=\"-322.6\" font-family=\"Times,serif\" font-size=\"8.00\">8080/tcp</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.sources.Source at 0x7fbf86c400d0>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import graphviz\n",
"\n",
"a = \"\"\"\n",
"digraph mailu {\n",
" label = \"Mailu\";\n",
" fontname = \"arial\";\n",
" \n",
" node [shape = box; fontname = \"arial\"; fontsize = 8; style = filled; color = \"#d3edea\";];\n",
" splines = \"compound\";\n",
" // node [shape = \"box\"; fontsize = \"10\";];\n",
" edge [fontsize = \"8\";];\n",
" \n",
" # Components\n",
" internet [label = \"Internet\";];\n",
" proxy [label = \"Optional proxy\"; shape = \"polygon\"];\n",
" front [label = \"Front\";];\n",
" admin [label = \"Admin\";];\n",
" smtp [label = \"SMTP\";];\n",
" redis [label = \"Redis\";];\n",
" antispam [label = \"Antispam\";];\n",
" antivirus [label = \"Anti-Virus\";];\n",
" imap [label = \"IMAP\";];\n",
" webdav [label = \"WebDAV\";];\n",
" webmail [label = \"Webmail\";];\n",
" fetchmail [label = \"Fetchmail\";];\n",
" oletools [label = \"Oletools\"];\n",
" fts_attachments [label = \"Tika\"];\n",
" # proxy from internet\n",
" internet -> proxy [label = \"25/tcp\";];\n",
" internet -> proxy [label = \"80/tcp\";];\n",
" internet -> proxy [label = \"443/tcp\";];\n",
" internet -> proxy [label = \"465/tcp\";];\n",
" internet -> proxy [label = \"587/tcp\";];\n",
" internet -> proxy [label = \"110/tcp\";];\n",
" internet -> proxy [label = \"995/tcp\";];\n",
" internet -> proxy [label = \"143/tcp\";];\n",
" internet -> proxy [label = \"993/tcp\";];\n",
" internet -> proxy [label = \"4190/tcp\";];\n",
" \n",
" # Front from proxy\n",
" proxy -> front [label = \"25/tcp\";];\n",
" proxy -> front [label = \"80/tcp\";];\n",
" proxy -> front [label = \"443/tcp\";];\n",
" proxy -> front [label = \"465/tcp\";];\n",
" proxy -> front [label = \"587/tcp\";];\n",
" proxy -> front [label = \"110/tcp\";];\n",
" proxy -> front [label = \"995/tcp\";];\n",
" proxy -> front [label = \"143/tcp\";];\n",
" proxy -> front [label = \"993/tcp\";];\n",
" proxy -> front [label = \"4190/tcp\";];\n",
" \n",
" front -> front [label = \"8008/tcp\";];\n",
" front -> front [label = \"8000/tcp\";];\n",
" front -> admin [label = \"8080/tcp\";];\n",
" front -> imap [label = \"4190/tcp\";];\n",
" front -> imap [label = \"143/tcp\";];\n",
" front -> imap [label = \"110/tcp\";];\n",
" front -> smtp [label = \"25/tcp\";];\n",
" front -> smtp [label = \"10025/tcp\";];\n",
" front -> webmail [label = \"80/tcp\";];\n",
" front -> antispam [label = \"11334/tcp\";];\n",
" front -> webdav [label = \"5232/tcp\";];\n",
" \n",
" smtp -> admin [label = \"8080/tcp\";];\n",
" smtp -> front [label = \"2525/tcp\";];\n",
" smtp -> antispam [label = \"11332/tcp\";];\n",
" \n",
" imap -> admin [label = \"8080/tcp\";];\n",
" imap -> antispam [label = \"11334/tcp\";];\n",
" imap -> proxy [label = \"25/tcp\";];\n",
" imap -> fts_attachments [label = \"9998/tcp\";];\n",
" \n",
" webmail -> front [label = \"14190/tcp\";];\n",
" webmail -> front [label = \"10025/tcp\";];\n",
" webmail -> front [label = \"10143/tcp\";];\n",
" # carddav\n",
" webmail -> proxy [label = \"443/tcp\";];\n",
" \n",
" admin -> redis [label = \"6379/tcp\";];\n",
" admin -> front [label = \"2525/tcp\";];\n",
" \n",
" antispam -> redis [label = \"6379/tcp\";];\n",
" antispam -> admin [label = \"8080/tcp\";];\n",
" antispam -> oletools [label = \"11343/tcp\";];\n",
" antispam -> antivirus [label = \"3310/tcp\";];\n",
" \n",
" fetchmail -> admin [label = \"8080/tcp\"]\n",
" fetchmail -> proxy [label = \"25/tcp\"]\n",
" fetchmail -> front [label = \"2525/tcp\"]\n",
" #\n",
" # those don't need internet:\n",
" # oletools\n",
" # fts_attachments\n",
" # redis\n",
"}\n",
"\"\"\"\n",
"\n",
"dot = graphviz.Source(a)\n",
"dot\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}