És ez nem marketinges kamu! Ha van egy működő szervered, amin van git és docker, akkor valóban percek múlva lehet egy levelező rendszered webmaillel, spam szűrővel, vírus irtóval, admin felülettel, és sok hasznos aprósággal. Az operációs rendszer lehet bármi, csak fusson rajta a docker és a git. A legtöbb OS feltelepít egy smtp szervert, azt állítsd le, hiszen a mailcow sajátot fog futtatni!
Ha az emlékeim nem csalnak, már 20 éve üzemeltetek levelező szervereket, eddig minden esetben én magam raktam össze az összes komponensét, ám idén májusban belebotlottam a mailcowba, gondoltam kipróbálom, és bevallom, azonnal megvett kilóra 🙂
Eddig órákig tartott összeraknom egy komplett levelező szervert, hiába használok ansible playbookot a feladatok 90%-hoz, a maradék 10%-al lehet sok időt elvesztegetni.
Lássuk a telepítést, mérjétek az időt 🙂
A cikknek nem célja bemutatni a Linux Operációs rendszer telepítését, arra dokcert és gitet telepíteni, számtalan cikket is írtam ebben a témában, ha ez problémát jelent, akkor ne ezzel kezd a tanulást…
Mik a hardveres igényei? A weboldaluk szerint ajánlott alátenni legalább 6 GB memóriát + 1 GB swap-et. Én a teszteket 2 GB memóriával és swap nélkül végeztem, ekkor ki kell kapcsolni a ClamAV víruskeresőt, és a Solr appot, ami elvileg egy kereső funkciót valósít meg, de ezt amúgy is ki fogják vezetni év végével.
Lépjünk be ssh-n a szerverünkre, menjünk a /opt könyvtárba, és adjuk ki ezt a parancsot rootként (mindent rootként fogunk csinálni!):
git clone https://github.com/mailcow/mailcow-dockerized.git
A sikeres letöltés után lépjünk is bele:
cd mailcow-dockerized/
Futtassuk le a beállítás varázslót:
./generate_config.sh
A kimenetben kiemelem a válaszaimat:
Found Docker Compose Plugin (native).
Setting the DOCKER_COMPOSE_VERSION Variable to native
Notice: You'll have to update this Compose Version via your Package Manager manually!
Press enter to confirm the detected value '[value]' where applicable or enter a custom value.
Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: mailcow.vagrant.lan
Timezone [Etc/UTC]: Europe/Budapest
Installed memory is <= 3.5 GiB. It is recommended to disable Solr to prevent out-of-memory situations.
Solr is a prone to run OOM and should be monitored. The default Solr heap size is 1024 MiB and should be set in mailcow.conf according
to your expected load.
Solr can be re-enabled by setting SKIP_SOLR=n in mailcow.conf but will refuse to start with less than 2 GB total memory.
Do you want to disable Solr now? [Y/n]
Which branch of mailcow do you want to use?
Available Branches:
- master branch (stable updates) | default, recommended [1]
- nightly branch (unstable updates, testing) | not-production ready [2]
Choose the Branch with it's number [1/2] 1
Already on 'master'
Your branch is up to date with 'origin/master'.
Generating snake-oil certificate...
........+.....+.+.....+.+..+......+.+...+...+...+.........+..+...+.+......++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++*...+...+...+....+...+..+...+......+.+...+........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+..+.......
+..................+............+.....+..........+........+...+..........+...+.....+.+.....+......+....+...+...........+.+...+..+....+
.........+....................+.+..+.............+..+....+...+...+...+...........+.............+..+.+...............+.....+.......+...
.........+........+.+...............+..+...+....+..+....+...............+.....+....+...+..+...+.........+...............+.............
+..+...+.+.....+....+........+.......+..+.+.................+............+.........+.......+...+..+...+.........+...+.........+.......
..+.+...+...+.....+..........+.........+......+.....+.......+..+..........+...+..+....+.....................+...+.....+...+.......+...
+.........+.......................+.............+.........+...+...+...+.....+......+..........+........+..................+....+...+..
+...+.+.....+.+.....+.+.........+...+.....+......+.......+...+.........+..+.+............+..+..................+.......+.....+.+......
..+.+......+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
..+...+.....+.+......+...+.................+..........+..................+..+.......+.....+.+.....+....+...+..+......+....+...........
.+......+.....+...+.+...+.................+.+.....+.........+.+..+.+..............+.+..+...+.......+...+......+...++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++*..+......+......+.....................+.......+........+...+......+.+...+.....+....+..+.
..+...+....+........+..........+...+...+..+...+.......+........+......+....+.....+....+...++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++*..+...............+..................+.+...........................+...............+.....+....+.................
.+...+.........+.....+....+............+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
Copying snake-oil certificate...
Detecting if your IP is listed on Spamhaus Bad ASN List...
Check completed! Your IP is clean
Ha éles szervert csinálsz, a host név rendelkezzen ‘A’ és ‘PTR’ rekordokkal. Játszós gépnél ennek nincs jelentősége.
Létrejött a mailcow.conf nevű fájl. Érdemes belenézni, játszós rendszer esetén pár dolgot ki szoktam kapcsolni:
SKIP_LETS_ENCRYPT=y
SKIP_IP_CHECK=y
SKIP_HTTP_VERIFICATION=y
SKIP_CLAMD=y
Már csak el kell indítani a rendszert:
docker compose up -d
A docker letölti az konténereket, létrehozza a hálózatot, a rengeteg volume-ot, elindítja az összes konténert (amiket kikapcsoltunk, azokban nem fut az app), a háttérben felépíti a kezdeti adatbázist.
Nincs más hátra, mint nyissuk meg a böngészőnkkel a szerver 80-as vagy 443-as portját. Játszós gépnél önaláírt a cert, ott elég a 80-as port is:
világos témával:
sötét témával:
Nekem jobban tetszik a sötét téma, így innentől kezdve minden képet így fogok készíteni.
Jelentkezzünk be a kezdeti admin felhasználóval, aki belenézett a mailcow.conf fájlba, az észrevehette a tetején a jelszót, ami ‘moohoo‘ 🙂
Lejjebb görgetve láthatjuk a ‘GUID’ azonosítónkat, és a konténerek állapotát.
A ‘Logs’ fül alatt élőben követhetjük a logokat, ez a postfix logja, természetesen még üres, hiszen nincsenek felhasználóink:
A ‘system’ menüpont alatt vannak a beállítások, erről majd később beszélek, nyugodtan nézzétek meg az összeset.
Hozzunk létre egy domaint és két felhasználót
Menjünk a lap tetején látható ‘e-mail’ menü ‘beállítások’ almenüjére, majd kattintsunk a zöld ‘domain hozzáadása’ gombra:
Értelemszerűen töltsük ki az adatokat, minden megváltoztatható utólag. Végül a ‘domain hozzáadása és sogo újraindítása’ gombot nyomjuk meg. Így fog kinézni hozzáadás után:
Menjünk a ‘postafiókok/postafiókok’ menüre, és kattintsunk a zöld ‘postafiók hozzáadása’ gombra:
Itt is minden módosítható utólag is, nyomjuk meg a lenti zöld ‘hozzáad’ gombot. Én kivettem a pipát a ‘pop3’ elől, vagy 20 éve nem használtam ezt a protkollt. Ismételjük meg egy 2. felhasználóval is:
Itt is nézzétek át a menüpontokat, kezdésnek ennyi elég is lesz, még az ‘alias’ lehet érdekes:
Természetesen aliasokat nem kötelező használni, itt a bemutató miatt hoztam létre, illetve a teszthez jól fog jönni. A jobb felső sarokban találjuk a ‘power’ gombot, azzal tudunk kilépni.
Mit tehet a felhasználó?
Ő is beléphet az admin menübe, tegyük is meg valamelyik felhasználónkkal:
A nyitó lapon láthatja a quotájának az állását, a számára engedélyezett protokollokat, tud jelszót cserélni, stb. És módosíthatja a rá vonatkozó SPAM ponthatárokat:
És nem mellesleg felvehet magának fehér és fekete listát is.
A karanténba került leveleket is itt tudja megnézni: a lap tetején az ‘e-mail/karantén’ menüpontnál.
Ideje lenne levelezni végre 😉
A webmailt a lap tetején éritek el az ‘appok/webmail’ menüpont alatt, vagy kijelentkezés után látható lesz egy kék ‘webmail’ gomb. Lépjünk be az egyik felhasználónkkal (teljes e-mail címmel!):
Az URL így néz ki: http(s)://szerver.host.neve/SOGo
Én eddig roundcubemailt használtam, az sem rossz, de gyárilag nincs benne naptár, ebben van.
Vagy belépünk inkognitó módban a másik felhasználónkkal, és küldünk egymásnak leveleket, vagy tesztelhetjük a ‘swaks’-al is, akár erről a szerverről, akár másik gépről:
$ swaks --from swaks@msandor.loc --to msandor@msandor.loc --server 192.168.56.11
=== Trying 192.168.56.11:25...
=== Connected to 192.168.56.11.
<- 220 mailcow.vagrant.lan ESMTP Postcow
-> EHLO msandordell.msandor.hu
<- 250-mailcow.vagrant.lan
<- 250-PIPELINING
<- 250-SIZE 104857600
<- 250-ETRN
<- 250-STARTTLS
<- 250-ENHANCEDSTATUSCODES
<- 250-8BITMIME
<- 250 DSN
-> MAIL FROM:<swaks@msandor.loc>
<- 250 2.1.0 Ok
-> RCPT TO:<msandor@msandor.loc>
<- 250 2.1.5 Ok
-> DATA
<- 354 End data with <CR><LF>.<CR><LF>
-> Date: Thu, 12 Sep 2024 14:31:31 +0200
-> To: msandor@msandor.loc
-> From: swaks@msandor.loc
-> Subject: test Thu, 12 Sep 2024 14:31:31 +0200
-> Message-Id: <20240912143131.070412@msandordell.msandor.hu>
-> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/
->
-> This is a test mailing
->
->
-> .
<** 451 4.7.1 Greylisted, please try again later
-> QUIT
<- 221 2.0.0 Bye
=== Connection closed with remote host.
Nálam 192.168.56.11 a szerver IP címe. A greylist egy SPAM védelmi technika, aki először küld levelet a szerverre, attól pár percig nem veszi át. Egy igazi szerver magától újra fog próbálkozni, a spammer valószínűleg letojja. Pár perc múlva át is veszi, ha újra nekifogok:
$ swaks --from swaks@msandor.loc --to msandor@msandor.loc --server 192.168.56.11
=== Trying 192.168.56.11:25...
=== Connected to 192.168.56.11.
<- 220 mailcow.vagrant.lan ESMTP Postcow
-> EHLO msandordell.msandor.hu
<- 250-mailcow.vagrant.lan
<- 250-PIPELINING
<- 250-SIZE 104857600
<- 250-ETRN
<- 250-STARTTLS
<- 250-ENHANCEDSTATUSCODES
<- 250-8BITMIME
<- 250 DSN
-> MAIL FROM:<swaks@msandor.loc>
<- 250 2.1.0 Ok
-> RCPT TO:<msandor@msandor.loc>
<- 250 2.1.5 Ok
-> DATA
<- 354 End data with <CR><LF>.<CR><LF>
-> Date: Thu, 12 Sep 2024 14:36:44 +0200
-> To: msandor@msandor.loc
-> From: swaks@msandor.loc
-> Subject: test Thu, 12 Sep 2024 14:36:44 +0200
-> Message-Id: <20240912143644.072902@msandordell.msandor.hu>
-> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/
->
-> This is a test mailing
->
->
-> .
<- 250 2.0.0 Ok: queued as 2FE93443B61
-> QUIT
<- 221 2.0.0 Bye
=== Connection closed with remote host.
Máris élettel teli a postfix logja:
Ez pedig a teszt levél webmail-ben:
Ám azt is tudom, hogy nem mindenki szereti/használja a webmail megoldásokat, vannak akik levelező klienst használnak. Én thunderbirddel fogom tesztelni, a játszós szervert felveszem a többi címem közé:
Természetesen reklamálni fog az önaláírt cert miatt, de ez csak egy teszt, élesben ez is rendben lesz.
Technikailag működik a szerver, ám kb senki sem fog átvenni tőlünk leveleket 🙁
Mégpedig azért, mert nincsenek beállítva a ‘DKIM, DMARC, SPF, MX, PTR, A’ rekordok megfelelően, erről majd a következő cikkben fogok írni, addig is jó játékot a mailcow-al 🙂