คำตอบสั้น ๆ: ติดตั้ง Mailcow เป็นเมลเซิร์ฟเวอร์ของบริษัทบน Cloud Server ด้วย Docker: ตรวจสเปกและพอร์ต 25 ตั้ง DNS กับ PTR เพิ่มโดเมนและกล่องจดหมาย และตั้งสำรองข้อมูลทุกคืน
คู่มือนี้อธิบาย Mailcow ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Mailcow (ชื่อเต็ม mailcow: dockerized) คือชุดเมลเซิร์ฟเวอร์โอเพนซอร์สที่รวม Postfix, Dovecot, Rspamd กรองสแปม, ClamAV, SOGo สำหรับเว็บเมลและปฏิทิน และหน้าจัดการผ่านเว็บไว้ใน Docker Compose ชุดเดียว เหมาะกับบริษัทที่ต้องการมีเมลเซิร์ฟเวอร์ของตัวเองบน Cloud Server เก็บข้อมูลไว้ในเครื่องที่ควบคุมได้ และไม่ต้องจ่ายค่าไลเซนส์ต่อผู้ใช้
คู่มือนี้เหมาะกับผู้ดูแล Linux ที่คุ้นกับ DNS และ Docker เมื่อทำครบ คุณจะมีเครื่องที่สเปกพอ มีระเบียน DNS และ PTR ครบ ติดตั้ง Mailcow สำเร็จ เปลี่ยนรหัสผ่านผู้ดูแลแล้ว เพิ่มโดเมนและกล่องจดหมาย มีสคริปต์สำรองข้อมูลรายวัน และรู้ว่าเมื่อใดควรใช้บริการแบบมีผู้ดูแลแทน
สิ่งที่ต้องเตรียม
- Cloud Server แบบ virtualization เต็มรูปแบบ เช่น KVM ห้ามใช้ LXC หรือ OpenVZ RAM อย่างน้อย 6 GiB พร้อม swap 1 GiB ตามค่าเริ่มต้นของ Mailcow ผู้พัฒนาแนะนำ 8 GiB สำหรับผู้ใช้ประมาณ 5–10 คน และดิสก์ 20 GiB สำหรับระบบโดยไม่รวมอีเมล ถ้ายังไม่มี swap ให้สร้าง swap file ก่อน
- ระบบปฏิบัติการที่รองรับ เช่น Ubuntu 22.04 หรือใหม่กว่า, Debian 12 หรือ AlmaLinux 9 ติดตั้งใหม่ ไม่มีโปรแกรมอื่นจับพอร์ตอีเมลหรือพอร์ต 80/443 อยู่
- IP สาธารณะที่ส่งออกพอร์ต 25 ได้ ผู้ให้บริการคลาวด์หลายรายปิดพอร์ต 25 ขาออกเป็นค่าเริ่มต้น ต้องขอเปิดก่อน
- สิทธิ์ตั้ง Reverse DNS (PTR) ของ IP ให้ตรงกับชื่อโฮสต์ เช่น
mail.example.comดู คู่มือตั้งค่า Reverse DNS (PTR) - นาฬิกาเครื่องตรงและเปิด NTP แล้ว ตรวจด้วย
timedatectl status
ขั้นตอนที่ 1: ตรวจเครื่องและเครือข่ายก่อนติดตั้ง Mailcow
free -h
dig +short -x 203.0.113.25
nc -vz -w 5 mx.example.net 25
ss -tlnp | grep -E ':(25|80|110|143|443|465|587|993|995|4190)\s'
คำสั่งแรกดู RAM และ swap คำสั่งที่สองต้องตอบชื่อ mail.example.com. คำสั่งที่สามทดสอบว่าเครื่องต่อพอร์ต 25 ของเมลเซิร์ฟเวอร์ภายนอกได้ ถ้าค้างจนหมดเวลา แปลว่าผู้ให้บริการปิดพอร์ต 25 ขาออกไว้ ส่วนคำสั่งสุดท้ายต้องไม่แสดงอะไร ถ้ามีบริการอื่น เช่น Postfix หรือ Exim ของระบบปฏิบัติการจับพอร์ตอยู่ ให้หยุดและปิดก่อน
เปิดพอร์ตขาเข้า TCP 25, 465, 587, 143, 993, 110, 995, 4190, 80 และ 443 ที่ไฟร์วอลล์ระดับคลาวด์ เช่น Security Group ผู้พัฒนา Mailcow แนะนำให้ไม่ใช้ ufw หรือ firewalld บนเครื่องเดียวกันถ้าเลี่ยงได้ เพราะชนกับกฎที่ Docker สร้าง ถ้าต้องกรองบนเครื่องให้ใส่กฎใน chain DOCKER-USER
ขั้นตอนที่ 2: ตั้งระเบียน DNS
ตั้งระเบียนชุดนี้ก่อนติดตั้ง เพื่อให้ Mailcow ขอใบรับรอง Let's Encrypt ได้ทันทีที่เริ่มทำงาน
mail.example.com. 3600 IN A 203.0.113.25
example.com. 3600 IN MX 10 mail.example.com.
autodiscover.example.com. 3600 IN CNAME mail.example.com.
autoconfig.example.com. 3600 IN CNAME mail.example.com.
example.com. 3600 IN TXT "v=spf1 mx a -all"
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
ระเบียน DKIM (dkim._domainkey) ได้หลังเพิ่มโดเมนในขั้นตอนที่ 4 ถ้าโดเมนยังรับอีเมลอยู่ที่ระบบเดิม ให้ตั้งเฉพาะระเบียน A, CNAME และ DKIM ไว้ก่อน แล้วค่อยเปลี่ยน MX และ SPF ในวันย้ายจริงตามแผน MX Cutover
ขั้นตอนที่ 3: ติดตั้ง Docker และ Mailcow
Mailcow ต้องการ Docker Engine รุ่นล่าสุดจาก Docker ไม่ใช่แพ็กเกจเก่าของระบบปฏิบัติการ บน Debian และ Ubuntu ใช้สคริปต์ทางการ แล้วโคลนโปรเจกต์ไว้ที่ /opt
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker
umask 0022
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh
docker compose pull
docker compose up -d
สคริปต์ generate_config.sh จะถามชื่อโฮสต์ ให้ตอบเป็น FQDN ของเครื่อง เช่น mail.example.com ไม่ใช่โดเมนอีเมล แล้วถามเขตเวลา ให้ตอบ Asia/Bangkok ค่าทั้งหมดอยู่ในไฟล์ mailcow.conf ถ้าเครื่องมี RAM จำกัด ตั้ง SKIP_CLAMD=y เพื่อปิดการสแกนไวรัส และ SKIP_FTS=y เพื่อปิดการทำดัชนีค้นหาเต็มข้อความ ซึ่งทั้งสองส่วนใช้ RAM มาก แล้วรัน docker compose up -d อีกครั้ง ขั้นตอนเต็มอยู่ใน เอกสารติดตั้งของ Mailcow
ขั้นตอนที่ 4: เข้าหน้าผู้ดูแล เพิ่มโดเมนและกล่องจดหมาย
- เปิด
https://mail.example.com/adminล็อกอินด้วยค่าเริ่มต้นadmin/moohooแล้วเปลี่ยนรหัสผ่านทันที และเปิดการยืนยันตัวตนสองขั้นของบัญชีผู้ดูแล - ไปที่ E-Mail > Configuration (เอกสารบางหน้ายังเรียกส่วนนี้ว่า Mail setup) แท็บ Domains คลิก Add domain ใส่
example.comกำหนดโควตารวมและจำนวนกล่องสูงสุด - คัดลอกระเบียน DKIM ที่ Mailcow สร้างให้ไปใส่ใน DNS ดูได้จากปุ่ม DNS ในแถวของโดเมน หรือที่ System > Configuration > Options > ARC/DKIM keys หน้า DNS ของโดเมนยังบอกด้วยว่าระเบียนใดยังไม่ถูกต้อง
- ที่แท็บ Mailboxes คลิก Add mailbox สร้างกล่องให้ผู้ใช้ ตั้งชื่อที่อยู่ตาม Email Naming Convention ของบริษัท
ถ้าต้องย้ายอีเมลเก่าจากระบบเดิม Mailcow มีเครื่องมือ Sync jobs ที่ใช้ imapsync อยู่ภายใน ตั้งได้ที่แท็บ Sync jobs โดยไม่ต้องติดตั้งอะไรเพิ่ม หลักการเดียวกับการใช้ imapsync ย้ายข้อมูล