VPS-ல் mailcow: Gmail ஏற்கும் self-hosted email
mailcow நிறுவும் முன் outbound port 25 தடைப்பட்டுள்ளதா சோதிக்கவும். இல்லையெனில் mail queue-ல் சிக்கி bounce ஆகும். Gmail 550 5.7.25 PTR rejection-ஐத் தடுக்க DNS அமைக்கவும்.
நீங்கள் உருவாக்குவது
நீங்கள் சொந்தமாக நிர்வகிக்கும் ஒரு server-ல் முழுமையான mail server: செய்திகளை அனுப்பவும் பெறவும் SMTP, phone மற்றும் laptop ஆகியவற்றில் mail ஒரே நிலையில் இருக்க IMAP, webmail client, மேலும் இரு திசைகளிலும் வரும் ஒவ்வொரு செய்திக்கும் score வழங்கும் spam filter. mailcow-dockerized, Postfix, Dovecot, Rspamd, SOGo webmail, MariaDB, Redis மற்றும் ACME client ஆகியவற்றை ஒரே Docker Compose stack-ஆக இணைக்கிறது. எனவே software அமைப்பதே கடினமான பகுதி அல்ல. அரை மணி நேரத்தில் இதை இயக்கிவிடலாம்.
கடினமான பகுதி, அதைச் சுற்றியுள்ள அனைத்தும். புதிய server-ஐ இணையத்தின் மற்ற mail systems நம்பாமல் இருப்பது email service-களில் மிகவும் வெளிப்படையாகும். "இது வேலை செய்கிறது" என்பதற்கும் "Gmail ஒவ்வொரு செய்தியையும் எந்த அறிகுறியும் இல்லாமல் நிராகரிக்கிறது" என்பதற்கும் இடையிலான வேறுபாடு பெரும்பாலும் நான்கு DNS records மற்றும் நீங்கள் முழுமையாகக் கட்டுப்படுத்த முடியாத ஒரு IP-reputation setting ஆகியவற்றால் தீர்மானிக்கப்படுகிறது. எதையும் rent செய்வதற்கு முன் கீழே உள்ள prerequisites-ஐப் படிக்கவும். அவற்றைப் படித்த பிறகு reputation உருவாக்கும் முயற்சி மதிப்புடையதல்ல என்று நீங்கள் முடிவு செய்தால், அதுவும் ஏற்றுக்கொள்ளத்தக்க முடிவே. இதே காரணங்களுக்காக, 2026-ல் உண்மையில் self-hosting செய்யத் தகுந்தவை குறித்த எங்கள் சுருக்கம் email-ஐ "நீங்கள் உண்மையாகவே விரும்பினால் மட்டும்" என்ற பிரிவில் சேர்க்கிறது.
முன்தேவைகளே திட்டத்தின் அடிப்படை
இவற்றில் ஒன்றையேனும் தவறவிட்டால், சென்றடையாத mail-ஐ அனுப்புவீர்கள். இவை ஒவ்வொன்றும் எவ்வளவு அடிக்கடி சிக்கலை ஏற்படுத்துகின்றன என்பதன் தோராயமான வரிசை:
வெளிச்செல்லும் port 25 திறந்திருக்க வேண்டும். உங்கள் server, TCP port 25 மூலம் Gmail மற்றும் Microsoft server-களுக்கு mail-ஐ வழங்கும். Spam-ஐத் தடுப்பதற்காக பல VPS மற்றும் cloud provider-கள் outbound 25-ஐ இயல்பாகவே block செய்கின்றன. இந்த block அமைதியாக இருக்கும். Boot நேரத்தில் எந்த error-உம் தோன்றாது. அனைத்தும் சரியாக இருப்பது போலத் தெரியும். Postfix முயற்சியை கைவிட்டு mail-ஐ bounce செய்யும் வரை, mail queue-ல் deferred நிலையில் இருக்கும் (mailcow அதிகபட்ச queue lifetime-ஐ ஐந்து நாட்களாக அமைக்கிறது). எதையும் install செய்வதற்கு முன் இதைச் சோதிக்கவும். இது blocked நிலையில் இருந்தால், உங்கள் provider-ஐ அதைத் திறக்குமாறு கேட்டு support ticket சமர்ப்பிப்பதே ஒரே தீர்வு. பழைய account-களுக்கு சில provider-கள் இதைத் திறக்கலாம்; சிலர் ஒருபோதும் திறக்கமாட்டார்கள்.
பயன்படுத்தக்கூடிய reputation கொண்ட clean IP. முந்தைய tenant அனுப்பிய spam காரணமாக, recycled VPS IP-கள் ஏற்கனவே blocklist-களில் இடம்பெற்றிருக்கலாம். தொடர முடிவு செய்வதற்கு முன் Spamhaus lookup அல்லது mxtoolbox போன்ற service-ல் உங்கள் IP-ஐச் சரிபார்க்கவும். பட்டியலில் உள்ள IP என்றால், code மூலம் தவிர்க்க முடியாத rejections ஏற்படும்.
DNS-ஐ நிர்வகிக்கும் உரிமையும் சரியான PTR record-உம். உங்கள் domain-ன் zone-ல் records சேர்க்க வேண்டும். மேலும் server-ன் IP-க்கான reverse DNS (PTR), உங்கள் mail hostname-ஐச் சுட்டிக்காட்ட வேண்டும். PTR பொதுவாக உங்கள் DNS panel-ல் அமைக்கப்படாது. IP-ஐக் கட்டுப்படுத்தும் provider-டமே அது இருக்கும். எனவே அதை உங்கள் VPS provider-ன் control panel மூலம் அல்லது support ticket மூலம் அமைக்க வேண்டும்.
6 GiB RAM மற்றும் 2 vCPU என்பது வசதியான குறைந்தபட்ச அளவு. Private install-க்கு mailcow குறிப்பிடும் குறைந்தபட்சத் தேவை 6 GiB RAM மற்றும் 1 GiB swap ஆகும். சில users இதைப் பயன்படுத்தத் தொடங்கியதும் 8 GiB RAM பரிந்துரைக்கப்படுகிறது. சுமார் 2.5 GiB-க்குக் கீழே இருந்தால், kernel containers-ஐ நிறுத்தத் தொடங்காமல் இருக்க ClamAV virus scanner-ஐ முடக்குமாறு generate_config.sh வழங்கும். Mail சேமிக்கப்படுவதற்கு முன்பே mailcow ஆவணப்படுத்திய disk குறைந்தபட்சம் 20 GiB ஆகும். எனவே தொடக்கத்திலேயே அதைவிட அதிக இடத்தை ஒதுக்கவும். Mailbox-கள் பெரிதாக வளரவும் இடம் விடவும்.
Bare IP அல்ல, DNS name தேவை. mail.example.com போன்ற hostname-ஐத் தேர்ந்தெடுக்கவும். அந்த ஒரே name உங்கள் MAILCOW_HOSTNAME, உங்கள் TLS certificate subject, உங்கள் PTR target, மற்றும் உங்கள் SMTP banner ஆகும். எல்லா இடங்களிலும் இதையே ஒரே மாதிரியாகப் பயன்படுத்தவும்.
படி 1, வெளிச்செல்லும் port 25 திறந்துள்ளதா என்பதை உறுதிப்படுத்தவும்
இதை முதலில் செய்யவும். இது தோல்வியடைந்தால், மற்ற அனைத்து முயற்சிகளும் பயனற்றவை. புதிதாக உருவாக்கப்பட்ட VPS-ல் இருந்து, உண்மையான mail server-உடன் SMTP தொடர்பைத் திறக்க முயற்சிக்கவும்:
sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 gmail-smtp-in.l.google.com 25வெற்றிகரமான முடிவு உடனடியாகக் கிடைக்கும்:
Connection to gmail-smtp-in.l.google.com (142.250.x.x) 25 port [tcp/smtp] succeeded!தடுக்கப்பட்ட port முழு ஐந்து விநாடிகளும் காத்திருந்து, பின்னர் தோல்வியடையும்:
nc: connect to gmail-smtp-in.l.google.com port 25 (tcp) timed out: Operation now in progressபுதிதாக உருவாக்கப்பட்ட VPS-ல், நீங்கள் தனியாக அமைத்த outbound firewall rules எதுவும் இல்லையெனில், அந்த timeout provider-ன் block ஆகும். இது உங்கள் firewall அல்ல; provider பக்க network filter ஆகும். எனவே local மாற்றம் எதுவும் இதைச் சரிசெய்யாது. பின்வரும் செய்தியுடன் ticket திறக்கவும்: "என் VPS-க்கான outbound TCP port 25-ஐ <IP>-ல் enable செய்யவும்; நான் சட்டபூர்வமான mail server-ஐ இயக்குகிறேன்." இது "succeeded" என்று திரும்பும் வரை mailcow-ஐ install செய்ய வேண்டாம். Inbound 25, அதாவது மற்ற servers உங்களை அணுகும் பாதை, தனியானது என்பதை நினைவில் கொள்ளவும். அது பொதுவாகத் திறந்திருக்கும். Providers கட்டுப்படுத்துவது outbound பாதையையே.
படி 2, DNS records-ஐ இப்போது அமைக்கவும்
DNS மாற்றங்கள் பரவுவதற்கு நேரம் ஆகும். எனவே installation செய்வதற்கு முன் அமைக்கக்கூடிய அனைத்தையும் publish செய்யவும். உங்கள் domain example.com, mail host mail.example.com, IP 10.0.0.10 என்று கருதுங்கள். உங்கள் zone-ல் இவற்றை உருவாக்கவும்:
mail.example.com. A 10.0.0.10
mail.example.com. AAAA 2001:db8::10 ; only if you have IPv6
example.com. MX 10 mail.example.com.
example.com. TXT "v=spf1 mx -all"
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:postmaster@example.com"SPF record, “இந்த domain-க்காக என் MX மட்டும் mail அனுப்பலாம்; மற்றவற்றை reject செய்யவும்” என்று குறிப்பிடுகிறது. உங்கள் சொந்த mail bounce ஆகாமல் reports-ஐ கண்காணிக்க, DMARC-ஐ p=none நிலையில் தொடங்கவும். Alignment உறுதிப்படுத்தப்பட்டதும், அதை p=quarantine என்றும் பின்னர் p=reject என்றும் கடுமையாக்கவும். இரண்டு records-ஐ நோக்கமுடன் இன்னும் அமைக்கவில்லை: DKIM, இதை mailcow Step 6-ல் உங்களுக்காக generate செய்யும்; மற்றும் PTR, இதை உங்கள் provider-ன் panel-ல் இப்போது அமைக்க வேண்டும்.
10.0.0.10-க்கான PTR (reverse DNS)-ஐ mail.example.com ஆக அமைக்கவும். இது MAILCOW_HOSTNAME-ன் துல்லியமான மதிப்பாக இருக்க வேண்டும். பெரும்பாலானவர்கள் மறந்துவிடும் ஒரே record இதுதான். பெரிய providers இதன் அடிப்படையில் mail-ஐ reject செய்கின்றன. உங்கள் panel-ல் rDNS field இல்லையெனில், ticket ஒன்றை raise செய்யவும்.
Step 3, Docker நிறுவுதல்
mailcow-க்கு Docker Engine 24.0 அல்லது அதற்குப் புதிய பதிப்பும், Docker Compose 2.0 அல்லது அதற்குப் புதிய பதிப்பும் தேவை. Compose plugin (docker compose) பயன்படுத்துவது எளிய வழியாகும். இருப்பினும், standalone docker-compose binary-யையும் mailcow ஆதரிக்கிறது. Ubuntu-வின் docker.io package-ஐ பயன்படுத்த வேண்டாம். அதில் Compose plugin எதுவும் சேர்க்கப்படவில்லை. அதற்கு பதிலாக Docker-ன் official convenience script-ஐ பயன்படுத்தவும்:
curl -fsSL https://get.docker.com | sudo sh
sudo docker compose versionv2.x அல்லது v5.x எனக் காட்டும் Docker Compose version வரியைப் பார்க்க வேண்டும். 2025-ல் வெளியிடப்பட்ட Compose v5, செயல்பாட்டு ரீதியாக v2-க்கு இணையானது. இரண்டில் எதுவும் mailcow-ன் தேவையைப் பூர்த்தி செய்கிறது. docker compose version, docker: 'compose' is not a docker command எனக் காட்டினால், Docker Engine நிறுவப்பட்டுள்ளது; ஆனால் Compose plugin நிறுவப்படவில்லை. Docker-ன் repository-யிலிருந்து plugin-ஐ நிறுவலாம், மேலே உள்ள script-ஐ மீண்டும் இயக்கலாம், அல்லது எங்கள் Docker Compose அடிப்படைகள் வழிகாட்டியை பின்பற்றலாம். அந்த வழிகாட்டி Docker-ன் சொந்த apt repository-யிலிருந்து இரண்டையும் அமைக்கிறது.
படி 4, mailcow-ஐ clone செய்து config-ஐ உருவாக்குதல்
cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
umask
sudo ./generate_config.shumask, 0022 என்பதை output செய்கிறதா என்பதைச் சரிபார்ப்பது mailcow-ன் சொந்த install steps-ஐப் பின்பற்றுகிறது. அந்த steps clone செய்வதற்கு முன் umask 0022-ஐ அமைக்கின்றன. mailcow-ன் எந்த test-மும் இந்த value-ஐச் சரிபார்ப்பதில்லை. புதிய Ubuntu 24.04 root shell ஏற்கனவே 0022-ஐ வழங்கும். அதன் பிறகு script முக்கியமான ஒரே விஷயத்தை கேட்கும்: fully qualified hostname. mail.example.com-ஐ உள்ளிடவும். இந்த value உங்கள் A record மற்றும் PTR record ஆகியவற்றுடன் துல்லியமாகப் பொருந்த வேண்டும். இது mailcow.conf-ஐ எழுதும். முழு stack-மும் படிக்கும் ஒரே environment file இதுவாகும். Web ports-ஐ (HTTP_PORT, HTTPS_PORT) மாற்ற வேண்டுமெனில் அல்லது சிறிய box-ல் ClamAV-ஐ முடக்க வேண்டுமெனில், இதைத் திறக்கவும்:
MAILCOW_HOSTNAME=mail.example.com
HTTP_PORT=80
HTTPS_PORT=443
SKIP_CLAMD=n # set to y to drop the virus scanner on a <2.5 GiB boxகுறைந்த RAM கொண்ட box-ல் SKIP_FTS=y மற்றொரு முக்கிய அமைப்பாகும். mailcow ஆவணங்கள் குறிப்பிடும் இரண்டாவது memory hog full-text search ஆகும். இதைத் தவிர்ப்பதால் webmail-ல் body-text search மட்டும் கிடைக்காது.
Host-ல் வேறு ஏதாவது process ஏற்கனவே அவற்றைப் பயன்படுத்தவில்லை என்றால், HTTP_PORT=80 மற்றும் HTTPS_PORT=443 ஆகியவற்றை மாற்றாமல் விடவும். mailcow-ன் built-in ACME client இயல்பாக HTTP-01 challenge-ஐப் பயன்படுத்துகிறது. Certificate பெறுவதற்கு port 80 இணையத்திலிருந்து அணுகக்கூடியதாக இருக்க வேண்டும். (mailcow 2026-03 மற்றும் அதற்குப் பிந்தைய versions-ல் ACME_DNS_CHALLENGE=y மூலம் DNS-01 challenge-ஐப் பயன்படுத்தலாம். இதற்கு port 80 தேவையில்லை. ஆனால் உங்கள் DNS host-ன் API-ஐ அணுகும் திறன் தேவை.) இதனால், அதே box-ல் தனி nginx-plus-Certbot அமைப்பை இயக்குவது simple layout-க்கு பொருந்தாது. mailcow தனது TLS-ஐ internally issue செய்து renew செய்கிறது. 80/443-ல் இரண்டாவது service listening செய்வதால் இது பாதிக்கப்படும். mailcow இதற்கான மாற்று முறையையும் ஆவணப்படுத்துகிறது: அதன் web listeners-ஐ HTTP_BIND=127.0.0.1 HTTP_PORT=8080 HTTPS_BIND=127.0.0.1 HTTPS_PORT=8443 மூலம் locally bind செய்யவும். 80 மற்றும் 443-ல் reverse proxy-ஐ அமைக்கவும். Local Certbot certificates-ஐ நிர்வகிக்க வேண்டுமெனில், mailcow-ஐ அந்த certificates-ஐப் பயன்படுத்துமாறு அமைத்து renewal hook-ஐச் சேர்க்கவும். Mail server-ல் இது அதிகமான moving parts-ஐ உருவாக்கும். ஆகவே public web front end தேவைப்படும் வேறு எந்த service-க்கும் இதே trade-off பொருந்தும். உதாரணமாக, Jellyfin library-ஐ 90s video store ஆக Halcyon reskin செய்யும் build, 443-ல் தனது சொந்த reverse proxy-ஐ எதிர்பார்க்கிறது. mailcow-ஐ அந்த proxy-க்குப் பின்னால் நகர்த்தாவிட்டால், இது வேறு host-ல் இருக்க வேண்டும். ஒரு service ஒருபோதும் public web port கேட்காதது மட்டும் விதிவிலக்கு: self-hosted RustDesk relay தனது சொந்த 21115 முதல் 21119 வரையிலான range-ல் மட்டும் listening செய்கிறது. ஆகவே, போதுமான bandwidth headroom இருந்தால், இதை அதே box-ல் பகிர்ந்து இயக்கலாம்.
படி 5, stack-ஐ தொடங்கி உள்நுழையவும்
sudo docker compose pull
sudo docker compose up -d
sudo docker compose psஇந்த pull செயல்முறை சுமார் இரண்டு டஜன் images-ஐ fetch செய்யும்; இதற்கு சில நிமிடங்கள் ஆகலாம். docker compose ps அனைத்து containers-உம் running (அல்லது healthy) எனக் காட்டியதும், browser-ல் https://mail.example.com/admin-ஐ திறக்கவும். இயல்புநிலை admin login-க்கான username admin, password moohoo ஆகும். இந்த password-ஐ உடனடியாக admin UI-யில் System → Configuration, பின்னர் Access → Administrators என்பதற்குச் சென்று மாற்றவும். Browser NET::ERR_CERT_AUTHORITY_INVALID என warning காட்டினால், ACME certificate இன்னும் issue செய்யப்படவில்லை. இது broken என்று கருதுவதற்கு முன், கீழே உள்ள ACME failure பகுதியைப் பார்க்கவும்; முதல் ஒன்று அல்லது இரண்டு நிமிடங்களுக்கு self-signed placeholder இருப்பது இயல்பானது.
படி 6, domain, mailbox சேர்த்து DKIM-ஐ வெளியிடுதல்
Admin UI-யில் E-Mail → Configuration-ஐத் திறக்கவும். Domains tab-ன் கீழ் Add domain-ஐக் கிளிக் செய்து example.com-ஐ உள்ளிடவும். பின்னர் Mailboxes பகுதியில் Add mailbox-ஐக் கிளிக் செய்து password உடன் you@example.com-ஐ உருவாக்கவும். இதன் மூலம் IMAP வழியாக ஏற்கனவே அணுகக்கூடிய mailbox தயார் ஆகும்.
இப்போது DKIM key-ஐ அமைக்கவும். System → Configuration-க்கு செல்லவும். பின்னர் Options → ARC/DKIM keys-ஐத் திறக்கவும். நீங்கள் domain-ஐச் சேர்த்தபோது mailcow ஏற்கனவே key-ஐ உருவாக்கியிருக்கலாம். உருவாக்கப்படவில்லை என்றால், அங்கேயே உருவாக்கவும். Domain-ஐத் தேர்ந்தெடுத்து, selector-ஐ dkim ஆகவே வைத்திருக்கவும். 2048-bit-ஐத் தேர்ந்தெடுத்து Add-ஐக் கிளிக் செய்யவும். காட்டப்படும் நீண்ட TXT value-ஐ copy செய்து, அதை இவ்வாறு publish செய்யவும்:
dkim._domainkey.example.com. TXT "v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqh...long-key...QAB"mailcow-ன் Domains page-ல் DNS button உள்ளது. அது எதிர்பார்க்கப்படும் ஒவ்வொரு record-ஐயும் பட்டியலிடும். உண்மையில் publish செய்யப்பட்ட value-க்கு எதிராக பச்சை tick அல்லது சிவப்பு cross-ஐயும் காட்டும். இதை checklist-ஆகப் பயன்படுத்தவும். Mail delivery-ஐச் சோதிப்பதற்கு முன், ஒவ்வொரு row-வும் பச்சையாக மாறியிருக்க வேண்டும். Publish செய்த பிறகும் DKIM row சிவப்பாக இருந்தால், key TXT chunks-ஆகத் தவறாகப் பிரிக்கப்பட்டிருக்கலாம். 2048-bit key, ஒரே TXT string-க்கான 255-character வரம்பை விட நீளமானது. எனவே, அதை ஒரு logical value-ஆக paste செய்யவும். உங்கள் DNS host அதைத் தேவையான chunks-ஆகப் பிரிக்க அனுமதிக்கவும்.
படி 7, deliverability-ஐச் சோதித்து 10/10 பெறுங்கள்
mail-tester.com-க்கு சென்று, அது காட்டும் random address-ஐ copy செய்யுங்கள். பின்னர் உங்கள் புதிய mailbox-இலிருந்து அதற்கு ஒரு message அனுப்புங்கள். https://mail.example.com/SOGo-ல் SOGo webmail-க்கு login செய்து, அங்கிருந்தும் message அனுப்புங்கள். அதன் பிறகு "Then check your score" என்பதைக் click செய்யுங்கள்.
10/10 பெறுவதை இலக்காகக் கொள்ளுங்கள். பொதுவாக score குறைவதற்கான காரணங்கள்:
- SPF aligned இல்லை, உங்கள்
MX/SPF record இல்லை அல்லது sending IP அதில் உள்ளடக்கப்படவில்லை. SPF TXT-ஐ மீண்டும் சரிபார்க்கவும். - DKIM signature verify ஆகவில்லை,
dkim._domainkeyTXT இல்லை, இன்னும் propagate ஆகவில்லை, அல்லது அதன் வடிவம் சிதைந்துள்ளது. இது மிகவும் பொதுவான தவறு. - PTR இல்லை / PTR mismatch, reverse DNS
mail.example.com-ஆக resolve ஆகவில்லை. இதை provider-ல் சரிசெய்யவும். - Blocklist-ல் பட்டியலிடப்பட்டுள்ளது, உங்கள் IP-யின் முந்தைய reputation இதற்குக் காரணமாக இருக்கலாம். Delisting கோரிக்கை விடுக்கவும் அல்லது சிறந்த reputation கொண்ட IP-ஐக் கேட்கவும்.
Score 10/10 ஆகும் வரை Gmail அல்லது Outlook-க்கு உண்மையான mail அனுப்ப வேண்டாம். குறைந்த score-உம் புதிய IP-யும் சேர்ந்தால், முதல் நாளிலேயே உங்கள் domain flag செய்யப்படும்.
படி 8, உண்மையான mail client-ஐ இணைக்கவும்
இந்த settings-ஐ பயன்படுத்தி Thunderbird, Apple Mail, அல்லது உங்கள் phone-ஐ server-க்கு இணைக்கவும். அனைத்திற்கும் server host mail.example.com ஆகும்:
- IMAP: port 993, SSL/TLS (அல்லது STARTTLS உடன் 143)
- SMTP submission: port 465, SSL/TLS (அல்லது STARTTLS உடன் 587)
- Username: முழு address,
you@example.com - Password: நீங்கள் அமைத்த mailbox password
client mail-ஐ port 25 வழியாக ஒருபோதும் அனுப்ப வேண்டாம். அந்த port server-to-server தொடர்புகளுக்கு மட்டுமே பயன்படுத்தப்படும். mailcow அங்கு authenticated submission-ஐ வழங்காது; அதில் அமைக்கப்பட்ட client-ன் connection மறுக்கப்படும். client Relay access denied என்று காட்டினால், அது port 25 வழியாக அல்லது authentication இல்லாமல் mail அனுப்ப முயல்கிறது. உங்கள் mailbox credentials-ஐ பயன்படுத்தி அதை 465 அல்லது 587 port-க்கு மாற்றவும்.
உண்மையில் முக்கியமானவற்றை backup எடுக்கவும்
mailcow ஒவ்வொரு stateful volume-ஐயும் snapshot செய்யும் backup script-ஐ வழங்குகிறது. இதை external disk அல்லது mounted remote-க்கு இயக்கவும்:
sudo MAILCOW_BACKUP_LOCATION=/opt/mailcow-backups \
./helper-scripts/backup_and_restore.sh backup allall ஆறு அம்சங்களை capture செய்கிறது. இவற்றில் ஏதேனும் ஒன்றை இழந்தால் data இழக்கப்படும்: vmail (உண்மையான mailboxes), crypt (vmail-ஐ decrypt செய்யும் keys; இது இல்லாமல் பயனற்றவை), mysql (domains, users, aliases மற்றும் settings-ஐ வைத்திருக்கும் MariaDB), redis (queue மற்றும் cache state), rspamd (கற்ற spam/ham தரவு), மற்றும் postfix (mail queue). இது ஒரு helper container-க்குள் இயங்கி compressed archives-ஐ எழுதுகிறது. ஆகவே stack இயங்கிக்கொண்டிருக்கும்போதும் backups consistent-ஆக இருக்கும். இதை nightly cron job மூலம் automate செய்யவும். பழைய sets-ஐ prune செய்ய --delete-days 14-ஐயும் சேர்க்கவும். வேலை செய்வதை நிறுத்தும் cron job அமைதியாக fail ஆகும். எனவே script-ன் exit status-ஐ நீங்கள் உண்மையில் கவனிக்கும் இடத்துக்கு அனுப்பவும்; self-hosted ntfy server அதே cron entry-யிலிருந்து ஒரு வரி curl மூலம் notification அனுப்பி, failure நடந்த இரவே உங்கள் phone-க்கு தெரிவிக்கும். Restore செய்ய அதே script-ஐ restore உடன் இயக்கவும். இது snapshots-ஐ பட்டியலிட்டு, மீட்டெடுக்க வேண்டியவற்றைத் தேர்ந்தெடுக்க அனுமதிக்கும். ஒருபோதும் test-restore செய்யாத backup என்பது நம்பிக்கை மட்டுமே; scratch VPS-க்கு ஒரு dry run செய்யவும்.
படி 10, அட்டவணைப்படி புதுப்பிக்கவும்
mailcow அதன் சொந்த script மூலம் update செய்யப்படுகிறது. அந்த script புதிய code-ஐ பெறுகிறது, mailcow.conf-ஐ migrate செய்கிறது, images-ஐ முன்கூட்டியே பெறுகிறது, மேலும் containers-ஐ சரியான வரிசையில் restart செய்கிறது:
cd /opt/mailcow-dockerized
sudo ./update.sh --check # reports whether an update exists, changes nothing
sudo ./update.sh # applies itமுதலில் backup எடுக்கவும் (படி 9). schema migration-ஐ பின்னுக்குத் திருப்புவது கடினம். Updates அடிக்கடி வெளியிடப்படுகின்றன. அவற்றில் internet-facing daemons-க்கான security fixes அடங்கும். எனவே mail server-ஐ பல மாதங்கள் update செய்யாமல் விட வேண்டாம். Update காரணமாக ஏதேனும் container unhealthy நிலையில் இருந்தால், sudo docker compose logs --tail=50 <service>-mailcow மீண்டும் இயங்கத் தொடங்காத daemon-ன் பெயரை காட்டும்.
வலுப்படுத்தல் குறித்த குறிப்பு
mailcow தனது சொந்த netfilter service (netfilter-mailcow) ஒன்றை இயக்குகிறது. இது mail மற்றும் webmail ports மீது தொடர்ந்து முயற்சிகள் மேற்கொள்ளும் IP-களை ban செய்கிறது. எனவே mail பகுதி இயல்பாகவே பாதுகாக்கப்படுகிறது. ஆனால் host-இல் உள்ள SSH இதன் வரம்புக்குள் வராது. அது தொடர்ந்து வெளிப்படையாக இருக்கும்; brute-force முயற்சிகளும் தொடர்ந்து நடக்கும். இந்த build-ஐ SSH auth log-ஐ கண்காணிக்கும் Fail2ban மற்றும் key-only login உடன் பயன்படுத்தவும். mailcow admin UI-க்கு வலுவான password அமைக்கவும். முடிந்தால், அதை public internet-இலிருந்து விலக்கி வைக்கவும் அல்லது VPN-ன் பின்னால் இயக்கவும்.
Failure modes, with the exact strings
Mail queues and never delivers. sudo docker compose exec postfix-mailcow postqueue -p இயக்கவும் அல்லது admin UI-யின் mail queue-ஐப் பார்க்கவும்; entries deferred நிலையில் இருக்கும். Postfix அவற்றை bounce செய்வதற்கு முன் ஐந்து நாட்கள் வரை காத்திருக்கலாம். அதில்:
status=deferred (connect to gmail-smtp-in.l.google.com[142.250.x.x]:25: Connection timed out)இது பெரும்பாலும் உங்கள் provider outbound port 25-ஐ block செய்திருப்பதைக் குறிக்கும் (Step 1). உங்கள் host firewall-ல் உள்ள outbound rule-ம் இதே timeout-ஐ உருவாக்கும். எனவே முதலில் அதைக் கண்டறிந்து நீக்கவும்; host firewall சரியாக இருந்தால், எந்த config மாற்றமும் இதைச் சரிசெய்யாது. Ticket திறக்கவும். இது DNS பிரச்சினையும் அல்ல, TLS பிரச்சினையும் அல்ல. Remote MX-க்கு port 25 வழியாக வரும் timed out என்ற சொல்லே இதற்கான தெளிவான அறிகுறி.
Gmail marks everything spam, or bounces it. Gmail-ல் message-ஐத் திறந்து, "Show original" என்பதைத் தேர்ந்தெடுத்து, auth results-ஐப் படிக்கவும். dkim=fail அல்லது dkim=none என்பது உங்கள் dkim._domainkey TXT record இல்லை, தவறாக உள்ளது, அல்லது இன்னும் propagate ஆகவில்லை என்பதைக் குறிக்கும். ARC/DKIM page காட்டும் value-ஐ அப்படியே மீண்டும் publish செய்து, TTL முடியும் வரை காத்திருக்கவும். spf=fail என்பது SPF/MX records உங்கள் IP-ஐ உள்ளடக்கவில்லை என்பதைக் குறிக்கும். Alignment அனைத்திற்கும் முக்கியமானது; ஒரு check தோல்வியடைந்தாலே message spam-க்குச் செல்லும்.
Rejected by large providers on connect. Bounces அல்லது Postfix logs-ல் Gmail-ன் PTR rejection காணப்படும்:
550-5.7.25 [10.0.0.10] The IP address sending this message does not have a PTR
550-5.7.25 record setup, or the corresponding forward DNS entry does not match
550 5.7.25 the sending IP. As a policy, Gmail does not accept messages from IPs
550 5.7.25 with missing PTR records.550 5.7.25 code என்பது reverse DNS இல்லை அல்லது பொருந்தவில்லை என்பதைக் குறிக்கும். Provider-ல் உங்கள் IP-க்கான PTR-ஐ mail.example.com என அமைக்கவும் (Step 2). Forward (A) மற்றும் reverse (PTR) இரண்டும் பொருந்த வேண்டும். மேலும், mailcow மற்ற servers-க்கு தன்னை அறிமுகப்படுத்தும் அதே host name-ஐ இரண்டும் குறிப்பிட வேண்டும்.
Browser shows a certificate warning that never clears. acme-mailcow container உண்மையான certificate-ஐப் பெறத் தவறியுள்ளது. அதன் log-ஐப் பார்க்கவும்:
sudo docker compose logs acme-mailcow | tail -n 40Cannot validate any hostnames, skipping Let's Encrypt for 1 hour. போன்ற line அல்லது challenge failure காணப்பட்டால், port 80 internet-லிருந்து reachable இல்லை அல்லது A record இந்த server-ஐக் குறிப்பிடவில்லை என்று பொருள். AAAA record publish செய்திருந்தால், அதையும் சரிபார்க்கவும். mailcow முதலில் AAAA record-ஐ வைத்து validation செய்கிறது; அது இருந்தால் A record check-ஐத் தவிர்க்கிறது. எனவே தவறான AAAA அல்லது port 80-ஐ அடைய முடியாத IPv6 path இருந்தால், சரியான A record இருந்தாலும் validation தோல்வியடையும். mail.example.com இந்த box-க்கு resolve ஆகிறதா என்பதை உறுதிப்படுத்தவும். எந்த host firewall வழியாகவும் 80 மற்றும் 443-ஐத் திறக்கவும். வேறு எதுவும் அந்த ports-ல் bind ஆகவில்லை என்பதையும் உறுதிப்படுத்தவும். காரணத்தைச் சரிசெய்த பிறகு, ஒரு மணி நேர back-off முடியும் வரை காத்திருக்காமல் sudo docker compose restart acme-mailcow மூலம் client-ஐ restart செய்யவும்.
FAQ
Self-hosting email உண்மையில் பயனுள்ளதா?
Data ownership, வரம்பற்ற aliases மற்றும் முழுமையான கட்டுப்பாடு தேவைப்பட்டால், ஆம். VPS செலவில் mailcow ஒரு professional stack-ஐ வழங்குகிறது. ஆனால் deliverability-ஐ தொடர்ந்து பராமரிக்க வேண்டும். IP reputation, DNS alignment மற்றும் blocklist monitoring ஆகியவை ஒருபோதும் முழுமையாக முடிவதில்லை. ஒரே நாள் ஒருவரின் spam folder-ல் இருப்பதால் உங்களுக்கு இழப்பு ஏற்படும் mission-critical business address என்றால், managed provider-ஐத் தேர்வு செய்வது நடைமுறைக்கு ஏற்றது. Convenience-ஐ விட control-ஐ மதித்து, அதைத் தொடர்ந்து பராமரிக்கத் தயாராக இருந்தால் self-hosting செய்யவும். உண்மையில் email அல்லாமல், உங்கள் data-வை பிறரின் servers-லிருந்து வெளியே வைத்திருக்க விரும்பினால், வேறு யாரும் முடிவு செய்ய முடியாத service-இலிருந்து தொடங்கவும்: photo library-க்கு deliverability பிரச்சினை இல்லை. அதே வகை VPS-ல் அந்த build-க்குத் தேவையான RAM அளவுகளையும் backup commands-ஐயும் எங்கள் PhotoPrism மற்றும் Immich ஒப்பீடு விளக்குகிறது.
Outbound port 25 தடுக்கப்பட்டுள்ளதா என்பதை எப்படி அறியலாம்?
Server-லிருந்து nc -vz -w 5 gmail-smtp-in.l.google.com 25 இயக்கவும். "succeeded!" என்று வந்தால் port திறந்துள்ளது. இடைநிறுத்தத்திற்குப் பிறகு timed out வந்தால் port தடுக்கப்பட்டுள்ளது. உங்களிடம் outbound firewall rules எதுவும் இல்லாத server என்றால், blocking செய்வது provider ஆகும். Self-hosted server mail-ஐ பெற முடிந்தும் அனுப்ப முடியாததற்கான மிகவும் பொதுவான காரணம் இதுதான். Provider block-க்கு ஒரே தீர்வு provider port-ஐத் திறப்பதே. எந்த local setting-மும் இதை மாற்றாது.
எனது mail இன்னும் Gmail-ன் spam folder-க்குச் செல்வது ஏன்?
பெரும்பாலும் authentication chain சரியாக இல்லாததே காரணம். Gmail-ல் "Show original" என்பதைப் பயன்படுத்தி spf=pass, dkim=pass மற்றும் dmarc=pass ஆகியவற்றைத் தேடவும். dkim=fail என்பது dkim._domainkey TXT record இல்லை அல்லது தவறாக உள்ளது என்பதைக் குறிக்கும். PTR mismatch அல்லது sending history இல்லாத புதிய IP-யும் பாதிப்பை ஏற்படுத்தும். முதலில் mail-tester.com-ல் 10/10 பெறவும். பின்னர் IP-ஐ மெதுவாக warm up செய்யவும். முதல் நாளிலேயே அதிக volume அனுப்புவதற்குப் பதிலாக, நாள்தோறும் சில messages அனுப்பி படிப்படியாக எண்ணிக்கையை அதிகரிக்கவும்.
நான் எந்த data-வை backup செய்ய வேண்டும்?
backup_and_restore.sh backup all இயக்கி, முழு backup set-ஐ server-க்கு வெளியே வைத்திருக்கவும். இது vmail-ஐ (mailboxes), crypt-ஐ (அவற்றை decrypt செய்யும் keys), MariaDB database-ஐ (domains, users, aliases, settings), Redis-ஐ, Rspamd-ன் learned data-வை மற்றும் Postfix queue-ஐ சேமிக்கிறது. crypt volume-ஐ பலர் கவனிக்காமல் விடுகின்றனர். அது இல்லாமல் vmail backup படிக்க முடியாத ciphertext ஆக இருக்கும். குறைந்தது ஒருமுறை scratch box-ல் restore செய்து சோதிக்கவும்.
2 GB VPS-ல் mailcow இயக்க முடியுமா?
சௌகரியமாக இயக்க முடியாது. சுமார் 2.5 GiB-க்கும் குறைவான memory இருந்தால் ClamAV-ஐ disable செய்ய generate_config.sh பரிந்துரைக்கும். ClamAV முடக்கப்பட்டிருந்தாலும், Rspamd, Dovecot, MariaDB மற்றும் stack-ன் பிற பகுதிகள் memory-க்காக போட்டியிடும். உண்மையான load-ல் swap மற்றும் OOM kills ஏற்படும். நிலையான single-user install-க்கு 6 GiB memory மற்றும் 1 GiB swap-ஐ குறைந்தபட்ச அளவாகக் கருதவும். இரண்டுக்கும் மேற்பட்டவர்கள் இதை நம்பத் தொடங்கும் உடனே 8 GiB-க்கு மேம்படுத்தவும்.