สร้าง Mail Server ด้วย Mailcow แบบ Open-source ที่เปิดให้ใช้งานได้ฟรี โดยรวบรวมเครื่องมือจัดการอีเมลประสิทธิภาพสูงไว้ในที่เดียว
1. Reverse DNS (PTR Record) ส่วนนี้สำคัญมาก แต่คุณไม่สามารถตั้งค่าที่ระบบจัดการโดเมนได้ คุณต้องติดต่อผู้ให้บริการ Server / VPS ที่คุณเช่า IP นี้ไว้ เพื่อให้เขาตั้งค่า PTR Record ให้ครับ: IP Address: 157.85.103.242 ให้ชี้กลับไปที่ (PTR): mail.match.in.th 2. DNS แบบพื้นฐาน (Minimal DNS Configuration) ค่าเหล่านี้จำเป็นต้องมี เพื่อให้สามารถรับส่งอีเมลได้ และเข้าถึงหน้าเว็บของ Mailcow ได้ครับ Name (Host) Type Value (Target) Priority mail A 157.85.103.242 - autodiscover CNAME mail.match.in.th - autoconfig CNAME mail.match.in.th - @ (หรือปล่อยว่าง) MX mail.match.in.th 10 (หมายเหตุ: ชื่อ Name อาจแตกต่างกันตามผู้ให้บริการ DNS บางที่ @ หมายถึงโดเมนหลัก match.in.th) 3. การรับรองอีเมลและป้องกันสแปม (SPF, DKIM, DMARC) จำเป็นต้องตั้งค่าเพื่อไม่ให้อีเมลที่คุณส่งถูกปลายทางมองว่าเป็นสแปม Name (Host) Type Value (Target) @ (หรือปล่อยว่าง) TXT "v=spf1 mx a:mail.match.in.th ~all" _dmarc TXT "v=DMARC1; p=reject; rua=mailto:admin@match.in.th" dkim._domainkey TXT (ดูคำแนะนำด้านล่าง) วิธีนำค่า DKIM มาใส่: ล็อกอินเข้าหน้าเว็บแอดมิน Mailcow (https://mail.match.in.th) ไปที่เมนู Configuration > Mail Setup > Domains เลือกโดเมนของคุณและไปที่ส่วนตั้งค่า DKIM เพื่อกด Generate (หรือคัดลอกค่าที่มี) นำข้อความยาวๆ ที่ได้ (ซึ่งจะขึ้นต้นด้วย "v=DKIM1; k=rsa;...") มาใส่ในช่อง Value ของ DNS (หมายเหตุ: อีเมลใน rua=mailto:... สำหรับ DMARC สามารถเปลี่ยนเป็นอีเมลที่คุณใช้รับรายงานการส่งผ่านอีเมลได้) 4. การตั้งค่าระดับสูง (Advanced DNS Configuration) ส่วนนี้เป็น SRV และ TXT Record ที่ใช้สำหรับการตั้งค่าอีเมลอัตโนมัติบนมือถือ หรือแอปอีเมล (เช่น Outlook, Apple Mail, Thunderbird) Name Type Priority Weight Port Value (Target) _autodiscover._tcp SRV 0 1 443 mail.match.in.th _caldavs._tcp SRV 0 1 443 mail.match.in.th _caldavs._tcp TXT - - - "path=/SOGo/dav/" _carddavs._tcp SRV 0 1 443 mail.match.in.th _carddavs._tcp TXT - - - "path=/SOGo/dav/" _imap._tcp SRV 0 1 143 mail.match.in.th _imaps._tcp SRV 0 1 993 mail.match.in.th _pop3._tcp SRV 0 1 110 mail.match.in.th _pop3s._tcp SRV 0 1 995 mail.match.in.th _sieve._tcp SRV 0 1 4190 mail.match.in.th _smtps._tcp SRV 0 1 465 mail.match.in.th _submission._tcp SRV 0 1 587 mail.match.in.th _submissions._tcp SRV 0 1 465 mail.match.in.th เคล็ดลับเพิ่มเติมในการตั้งค่า: ผู้ให้บริการ DNS บางเจ้าอาจกำหนดให้ต้องใส่จุดต่อท้ายโฮสต์เนมด้วย (เช่น mail.match.in.th.) หากระบบไม่ยอมให้บันทึก ให้ลองเติมจุดต่อท้าย หลังจากตั้งค่าเสร็จแล้ว DNS อาจใช้เวลาอัปเดตตั้งแต่ 5 นาที ถึง 24 ชั่วโมง คุณสามารถเข้าไปตรวจสอบค่าที่ตั้งไปว่าถูกต้องหรือยังผ่านเครื่องมืออย่าง MXToolBox หรือ Mail-tester ได้ครับ อ้างอิงจากเอกสารระบบของ Mailcow และโครงสร้างการทำงานของการทำเซิร์ฟเวอร์อีเมล ข้อมูลพอร์ตที่จำเป็นต้องอนุญาต (Allow) ใน Firewall เพื่อให้ระบบทำงานได้อย่างสมบูรณ์ มีดังนี้ครับ: ขาเข้า (Inbound / Incoming Ports) คุณต้องเปิดพอร์ตเหล่านี้จากภายนอก (Internet) เข้ามายังเซิร์ฟเวอร์ Mailcow เพื่อให้สามารถรับอีเมลและให้ผู้ใช้งาน (Client) เชื่อมต่อได้ Port Protocol Component (Service) Description 25 TCP Postfix (SMTP) ใช้รับอีเมลจากเซิร์ฟเวอร์อื่น (Server-to-Server) พอร์ตนี้จำเป็นต้องเปิด 80 TCP Nginx (HTTP) ใช้สำหรับเข้าใช้งาน Web UI และการออกใบรับรอง SSL (Let's Encrypt) 110 TCP Dovecot (POP3) ใช้สำหรับ Client ดึงอีเมลแบบไม่เข้ารหัส (หากไม่ใช้งาน สามารถปิดได้) 143 TCP Dovecot (IMAP) ใช้สำหรับ Client เชื่อมต่อซิงค์อีเมล 443 TCP Nginx (HTTPS) ใช้สำหรับเข้า Web UI (Admin/SOGo) อย่างปลอดภัยผ่าน SSL 465 TCP Postfix (SMTPS) ใช้สำหรับ Client ส่งอีเมลผ่านการเข้ารหัสแบบ Implicit TLS 587 TCP Postfix (Submission) ใช้สำหรับ Client ส่งอีเมลผ่านการเข้ารหัสแบบ STARTTLS 993 TCP Dovecot (IMAPS) ใช้สำหรับ Client เชื่อมต่อซิงค์อีเมลอย่างปลอดภัยผ่าน SSL 995 TCP Dovecot (POP3S) ใช้สำหรับ Client ดึงอีเมลอย่างปลอดภัยผ่าน SSL 4190 TCP Dovecot (ManageSieve) ใช้สำหรับจัดการกฎการกรองอีเมล (Filter) ผ่านโปรแกรมเมล์ไคลเอนต์ ขาออก (Outbound / Outgoing Ports) คุณต้องอนุญาตให้เซิร์ฟเวอร์ Mailcow สามารถเชื่อมต่อออกไปยังอินเทอร์เน็ตผ่านพอร์ตเหล่านี้ Port Protocol Component (Service) Description 25 TCP Postfix ใช้สำหรับส่งอีเมลออกจากเซิร์ฟเวอร์ไปหา Mail Server ปลายทาง 80 TCP Rspamd, ClamAV, etc. ใช้ในการดึงข้อมูลอัปเดตระบบ, ดาวน์โหลดแพทช์ และเช็คบัญชีดำ (Blacklist) 443 TCP Rspamd, ClamAV, etc. ใช้ในการอัปเดตระบบตรวจจับสแปม ตรวจจับไวรัส และใบรับรอง Let's Encrypt 465 TCP Postfix ใช้ส่งอีเมลออกแบบเข้ารหัสเมื่อเซิร์ฟเวอร์ปลายทางรองรับ ข้อควรระวัง: พอร์ต 25 (ทั้งเข้าและออก) เป็นพอร์ตที่สำคัญที่สุดในการรับส่งอีเมลระหว่างเซิร์ฟเวอร์ หากผู้ให้บริการอินเทอร์เน็ต (ISP) หรือ Cloud Provider บล็อกพอร์ตนี้ ระบบจะไม่สามารถรับหรือส่งอีเมลไปยังผู้ให้บริการอื่น (เช่น Gmail หรือ Outlook) ได้ครับ ชุดคำสั่งตั้งค่า UFW รันคำสั่งเหล่านี้ผ่านสิทธิ์ root หรือใช้ sudo ครับ: ส่วนที่ 2: เปลี่ยนพอร์ต SSH เป็น 55422 2.1 แก้ไขไฟล์ Config ของ SSH # 1. ติดตั้ง UFW (หากยังไม่มีในระบบ) apt update && apt install ufw nano -y # 2. ตั้งค่านโยบายพื้นฐาน (บล็อกขาเข้าทั้งหมด, อนุญาตขาออกทั้งหมด) ufw default deny incoming ufw default allow outgoing # 3. เปิดพอร์ต SSH (สำคัญมาก! ต้องทำเป็นอันดับแรกเพื่อไม่ให้ตัวเองถูกตัดออกจากเซิร์ฟเวอร์) # หากคุณเปลี่ยนพอร์ต SSH เป็นพอร์ตอื่น ให้เปลี่ยนตัวเลข 22 เป็นพอร์ตของคุณ sed -i 's/^#*Port 22/Port 22/' /etc/ssh/sshd_config systemctl restart ssh ufw allow 22/tcp # 4. เปิดพอร์ตทั้งหมดที่จำเป็นสำหรับ Mailcow ufw allow 25,80,110,143,443,465,587,993,995,4190/tcp # 5. เปิดใช้งาน UFW (ระบบจะถามยืนยันการตัดการเชื่อมต่อ ให้ตอบ y) ufw enable # 6. ตรวจสอบสถานะการตั้งค่าทั้งหมด ufw status verbose ขั้นตอนที่ 1: เตรียมความพร้อมระบบ (System Preparation) ก่อนติดตั้ง ให้ตรวจสอบสิ่งแวดล้อมและตั้งค่าระบบปฏิบัติการดังนี้: ตรวจสอบเวลาของระบบ (Timezone & NTP): Mailcow จำเป็นต้องใช้เวลาที่ตรงเป๊ะ (โดยเฉพาะระบบ 2FA / TOTP) ตั้งเวลาและเขตเวลาของเซิร์ฟเวอร์ให้ถูกต้อง: timedatectl set-timezone Asia/Bangkok apt update && apt install -y chrony ตรวจสอบและลบ Mail Service ตกค้าง (ถ้ามี): บางครั้งการอัปเกรดหรือติดตั้ง Debian อาจมี MTA ติดตั้งมาล่วงหน้า (เช่น Exim หรือ Postfix บนโฮสต์) ซึ่งจะมาแย่งใช้พอร์ต 25: systemctl stop exim4 postfix sendmail 2>/dev/null apt purge -y exim4 exim4-base postfix sendmail-bin ตั้งค่า Hostname ของเครื่องให้ตรงกับ FQDN: hostnamectl set-hostname mail.match.in.th ตรวจสอบไฟล์ /etc/hosts ให้แน่ใจว่าผูกกับไอพีและโฮสต์เนมถูกต้อง: 157.85.103.242 mail.match.in.th mail ขั้นตอนที่ 2: ติดตั้งแพ็กเกจพื้นฐานที่จำเป็น ติดตั้งเครื่องมือพื้นฐานที่ Mailcow ต้องใช้ในการประมวลผลสคริปต์: apt update && apt upgrade -y apt install -y git openssl curl gawk coreutils grep jq ขั้นตอนที่ 3: ติดตั้ง Docker และ Docker Compose Mailcow ทำงานบน Docker ทั้งหมด ติดตั้งเวอร์ชันล่าสุดด้วยสคริปต์ทางการ: # 1. ติดตั้ง Docker Engine curl -sSL https://get.docker.com/ | CHANNEL=stable sh # 2. เปิดใช้งานและสตาร์ท Docker Service systemctl enable --now docker # 3. ตรวจสอบเวอร์ชันของ Docker และ Docker Compose Plugin docker --version docker compose version (ต้องมั่นใจว่า Docker เวอร์ชัน 24.0 ขึ้นไป และ Docker Compose เวอร์ชัน 2.0 ขึ้นไป) ขั้นตอนที่ 4: ดาวน์โหลดและติดตั้ง Mailcow โคลนโปรเจกต์จาก GitHub เข้าไปยังไดเรกทอรี /opt: cd /opt git clone https://github.com/mailcow/mailcow-dockerized mailcow-dockerized cd mailcow-dockerized รันสคริปต์สร้างไฟล์คอนฟิกตั้งต้น: ./generate_config.sh ระบบจะถามข้อมูลสำคัญ ให้ป้อนข้อมูลของคุณ: FQDN of mailcow host: ใส่ mail.match.in.th Timezone: เลือกหรือพิมพ์ Asia/Bangkok ปรับแต่งค่าคอนฟิกเพิ่มเติม (ถ้าจำเป็น): เปิดไฟล์ mailcow.conf เพื่อตรวจสอบหรือแก้ไขค่าพารามิเตอร์ต่างๆ: nano mailcow.conf (ตัวอย่างค่าที่มักปรับแต่ง เช่น HTTP_PORT=80, HTTPS_PORT=443, HTTP_BIND=157.85.103.242 เพื่อระบุ IP ที่ชัดเจน) ปรับแต่งทรัพยากร (ปิด ClamAV & Solr เพื่อประหยัด RAM) (สำหรับทดสอบเท่านั้น): # ปิด Antivirus sed -i 's/SKIP_CLAMD=n/SKIP_CLAMD=y/' mailcow.conf # ปิด Full-text search (Solr) sed -i 's/SKIP_SOLR=n/SKIP_SOLR=y/' mailcow.conf เพิ่ม Header: List-Unsubscribe เตรียมโครงสร้าง Rspamd ล่วงหน้าก่อนรัน mkdir -p data/conf/rspamd/local.d cat << 'EOF' > data/conf/rspamd/local.d/postfilter.lua rspamd_config.ADD_LIST_UNSUBSCRIBE = { callback = function(task) local mime_from = task:get_header('From') if mime_from then task:get_mempool():set_variable('add_header', 'List-Unsubscribe', '<mailto:unsubscribe@match.in.th?subject=unsubscribe>, <https://match.in.th/unsubscribe>') task:get_mempool():set_variable('add_header', 'List-Unsubscribe-Post', 'List-Unsubscribe=One-Click') end end } EOF ขั้นตอนที่ 5: สตาร์ทระบบ Mailcow ดึง Docker Images ทั้งหมดและเริ่มรันระบบเบื้องหลัง: docker compose pull docker compose up -d การดาวน์โหลดและบูตระบบครั้งแรกจะใช้เวลาประมาณ 5–10 นาทีขึ้นอยู่กับความเร็วอินเทอร์เน็ตของเซิร์ฟเวอร์ ขั้นตอนที่ 6: ตรวจสอบและเข้าใช้งานระบบ ตรวจสอบสถานะการทำงานของคอนเทนเนอร์: docker compose ps ทุกคอนเทนเนอร์ควรมีสถานะเป็น Up หรือ running เข้าสู่ระบบผ่าน Web UI: เปิดเว็บบราวเซอร์ไปที่: [https://mail.match.in.th] Username เริ่มต้น: admin Password เริ่มต้น: moohoo คำแนะนำ: เมื่อเข้าสู่ระบบได้แล้ว ให้เปลี่ยนรหัสผ่านแอดมินทันที เพื่อความปลอดภัย
อ่านเพิ่มเติม