iRedMail là một script kèm theo các ứng dụng nhỏ giúp dễ dàng cài đặt và quản lý một mail server.
Mặc dù sử dụng các phần mềm nguồn mở như Postfix, Dovecot… nhưng bản Pro của iRedMail có giá rất cao, từ 500$/năm, bản free vẫn đầy đủ tính năng nhưng chỉ có công cụ quản lý ở mức rất cơ bản.
Các tính năng của iRedMail
- Postfix SMTP server
- Dovecot IMAP server
- Nginx web server to serve the admin panel and webmail
- OpenLDAP, MySQL/MariaDB, or PostgreSQL for storing user information
- Amavised-new for DKIM signing and verification
- SpamAssassin for anti-spam
- ClamAV for anti-virus
- Roundcube webmail
- SOGo groupware, providing webmail, calendar (CalDAV), contacts (CardDAV), tasks and ActiveSync services.
- Fail2ban for protecting SSH
- mlmmj mailing list manager
- Netdata server monitoring
- iRedAPD Postfix policy server for greylisting
A. Chuẩn bị
Việc chuẩn bị đầy đủ rất quan trọng, bằng không cài đặt mail server vất vả rồi không thể gởi mail được do server không đủ độ tin cậy.
- Raspberry Pi 4B ít nhất 2GB ram
- Domain name hay free sub-domain cũng được. Cần domain và 1 sub domain hay 2 free sub-domain
- IP tĩnh hay IP động cũng được
- Mở port 25 và 993, mở thêm port 465 hay 587 nếu dùng TLS
iRedMail cài đặt nhiều phần mềm nên tốn ram. Một khi mail server hoạt động thật sự với nhiều công việc gởi/nhận mail, check spam, antivirus… thì ram ít sẽ chạy đuối.
Tốt nhất là có IP tĩnh, IP sạch, vì IP ảnh hưởng nhiều đến độ tin cậy của email. Nếu IP nằm trong blacklist của một tổ chức chống spam nào đó thì email sẽ bị chặn hay ít nhất là nằm trong thư mục spam của người nhận.
Nếu không có IP tĩnh, giải pháp là dùng dynamic DNS.
- Nếu không có domain riêng thì tất nhiên là dùng free domain do các DDNS cấp.
- Nếu đã có domain thì có thể dùng dynu.com để trỏ domain về IP động của RPi. Hạn chế của dynu.com là chỉ cho tạo thêm 4 record cho tên miền, tuy nhiên đã có record tên * thay cho mọi tên miền con.
Một cách tốt hơn là dùng Free Dynamic DNS của namecheap.com (tạo đến 100 DNS record) hay transfer tên miền về namecheap.com để dùng Dynamic DNS và tạo đến 150 record cho tên miền. Ngoài ra cũng có thể chuyển DNS về cloudflare.com, cũng có thể update IP động, quản lý nhiều record tên miền dễ dàng mà còn free SSL.
Một khi chỉ có IP động thì phải dùng SMTP relay, khi đó 4 record cho tên miền cũng đủ dùng.
Vào Domain Manager của nhà cung cấp domain để
– Trỏ domain.com về IP của RPi
– mail.domain.com là ALIAS hay CNAME của domain.com
– Tạo MX record của domain.com trỏ về mail.domain.com
Làm tương tự như trên nếu có 2 subdomain DDNS, cả hai trỏ về RPi, một là MX của cái còn lại. Thí dụ DDNS trên dynu.com:
*.domain.com A 123.123.123.123 120
domain.com MX mail.domain.com [priority:10] 120
- Tiếp theo là mở port 25 trên router internet. Cho dù sau này có gởi mail qua cổng 465 hay 587 thì cũng phải mở port 25 để iRedMail liên lạc với các mail server khác.
Kiểm tra xem port 25 có bị chặn không bằng câu lệnh
telnet gmail-smtp-in.l.google.com 25
Nếu port 25 không bị chặn, ta nhận được
Trying 74.125.68.26...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp
B. Cài đặt iRedMail
- Giả sử ta có tên miền domain.com, muốn email có dạng user@domain.com
- RPi để cài mail server có hostname là mail.domain.com
- domain.com trỏ về IP của RPi, mail.domain.com là alias và MX của domain.com
Cài đặt iRedMail trên máy mới cài OS Raspbian, nghĩa là chưa cài các phần mềm iRedMail cần như Postfix, Dovecot, Nginx, Mariadb,… để tránh xung đột về cách cấu hình.
Tải iRedMail về rồi chạy script với quyền root để cài đặt
# Cần git để tải về gói cài đặt
sudo apt install git
git clone https://github.com/iredmail/iRedMail.git
cd iRedMail/
chmod +x iRedMail.sh
sudo bash iRedMail.sh
- Chọn Nginx cho web server và Mariadb cho CSDL khi được hỏi.
- Chọn mật khẩu cho mysql root
- First domain name là domain.com
- Nhập mật khẩu cho postmaster@domain.com
- Cuối cùng gõ y để cài đặt
Quá trình cài đặt khá lâu, khoảng 30 phút. Sau đó khởi động lại RPi
sudo shutdown -r now
C. Đăng ký chứng chỉ SSL từ letsencrypt.org
Mặc dù iRedMail có tạo chứng chỉ SSL nhưng là self-signed nên chúng ta cần lấy chứng chỉ SSL qua Let’s Encrypt.
Nếu nginx đang chạy trên port 80 thì phải tắt nginx đi.
sudo apt-get install certbot python-certbot-nginx
sudo certbot --nginx
Vì iRedMail dùng chứng chỉ SSL ở nhiều nơi nên tốt nhất là tạo soft link với tên mặc định
mv /etc/ssl/certs/iRedMail.crt{,.bak}
mv /etc/ssl/private/iRedMail.key{,.bak}
ln -s /etc/letsencrypt/live/domain.com/fullchain.pem /etc/ssl/certs/iRedMail.crt
ln -s /etc/letsencrypt/live/domain.com/privkey.pem /etc/ssl/private/iRedMail.key
D. Tạo user để gởi mail
Vào trang quản trị tại
https://mail.domain.com/iredadmin
Đăng nhập với user là postmaster@domain và password nhập lúc cài đặt iRedMail. Vì là bản free nên trang quản trị có rất ít chức năng. Tạo user tại trình đơn Add User.
E. Gởi mail bằng Round Cube
Vào webmail Roundcube tại địa chỉ
https://mail.domain.com
Đăng nhập bằng user@domain.com và mật_khẩu được cấp và thử gởi mail. Nếu may mắn thì mail sẽ đến Inbox người nhận.
Chúng ta còn phải làm nhiều việc để tăng độ tin cậy của mail server đối với các mail server khác và các tổ chức chống spam, tuỳ vào IP của mail server.
F1. IP động
Phần lớn IP động do các nhà cung cấp internet cấp đều dính vào ít nhất một danh sách đen, vì vậy gởi mail từ mail server có IP này có thể bị trả lại hay bị đưa vào Spam.
Cách tiết kiệm công sức cài đặt nhưng gởi mail hiệu quả là dùng SMTP relay. Chúng ta sẽ chuyển mail đến một mail server trung gian có độ tin cậy cao (relay) và nhờ nó gởi đi. Khi đó độ tin cậy của mail gởi đi là độ tin cậy của relay server.
Thí dụ về SMTP relay miễn phí là mailjet.com, được gởi email hạn mức 200 email/ngày.
Phức tạp hơn và tốt hơn là dùng GMail, hạn mức là 500 địa chỉ người nhận/ngày. Có thể gởi nhiều hơn 500 mail nếu địa chỉ người nhận trùng lặp.
Để dùng GMail SMTP relay, cần chuẩn bị ở cả 2 phía GMail và Postfix
- Vào GMail, bật Less Secure Apps và Send Mail As email@domain.com, để gởi từ email@domain.com nhờ vào GMail.
- Ở phần Postfix, soạn thảo /etc/postfix/main.cf, thêm vào cuối file
relayhost = [smtp.gmail.com]:587
smtp_sasl_password_maps = hash:/etc/sasl_passwd
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = login
smtp_sasl_security_options = noanonymous
smtp_sender_dependent_authentication = yes
relayhost định nghĩa SMTP server mà mail server của chúng ta sẽ gởi mail qua trung gian. ở đây là smtp.gmail.com, cổng 587
smtp_sasl_password_maps định nghĩa tài khoản của GMail mà ta dùng để gởi nhờ mail.
Vì vậy phải tạo file /etc/postfix/sasl_passwd để mô tả acc này. Giả sử tất cả email từ domain.com đều qua account này
@domain.com gmail_acc:gmail_pass
Tiếp theo là mã hóa file sasl_passwd và khởi động lại postfix
sudo postmap /etc/postfix sasl_passwd
sudo postfix reload
Tương tự nếu dùng các SMTP khác.
Vào webmail Roundcube gởi mail thử. Nếu cài đặt đúng thì mail sẽ được nhận trong Inbox.
Xem bài tiếp theo về gởi email qua SMTP relay
F2. IP tĩnh
Trước hết kiểm tra xem IP có nằm trong các blacklist hay không?
https://whatismyipaddress.com
https://whatismyipaddress.com sẽ liệt kê danh sách các tổ chức chống spam đã cho IP này vào blacklist. Cách gỡ khỏi blacklist tùy thuộc vào tổ chức chống spam. Nếu là IP động thì thôi khỏi mất công gỡ vì chẳng dùng được bao lâu, khi đó nên dùng giải pháp SMTP relay.
Kế tiếp, tăng độ tin cậy của mail server bằng SPF, DKIM, DMARC, rDNS
SPF record (Sender Policy Framework) chỉ định host hay IP được phép gởi mail nhân danh một domain. Chúng ta chỉ cho phép mail ser ver của mình hay của ISP gởi mail trên domain của mình. Trong giao diện quản trị DNS tạo một TXT record tương tự như sau:
domain.com. 3600 IN TXT "v=spf1 mx -all"
DKIM (DomainKeys Identified Mail) công bố khóa công khai để mail server bên nhận so khớp với khóa riêng cất lại mail server của mình, nhằm chứng thực email được gởi từ domain của mình.
iRedMail tự động tạo cặp khóa private/public để dùng cho DKIM. Dùng câu lệnh sau để xem khóa công khai đã tạo.
amavisd-new showkeys
# Kết quả trả về tương tự như
key#1 1024 bits, i=dkim, d=domain.com, /var/lib/dkim/domain.com.pem
dkim._domainkey.domain.com. 3600 TXT (
"v=DKIM1; p="
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQhUiopmgEfMvxr4KmO9ojdYal"
"sAxJoabdgetulmch6EQQdDLvjh0dWhD6hdaK+k06X31I1+NxH22vcwc6OaWYH6jT"
"zeWlIbFhv2/QU3RMenZrT04FVAtWJXT5VCIpscntanDejBXQQSpkjWsI08Ck1v3x"
"XvGTYWkJplh85AyBLQIDAQAB")
Trong DNS manager, tạo record TXT, name=@, value là khóa công khai như ở trong ngoặc ( ) sau khi đã bỏ đi dấu ” và khoảng trắng cùng dấu xuống dòng.
DMARC (Domain-based Message Authentication), giúp các mail-server-phía-nhận định danh email và ngăn domain name được dùng cho email giả mạo.
Vào DNS manager thêm một TXT record, name=_dmarc
, value=
v=DMARC1; adkim=s; aspf=s; p=reject; sp=none; rua=mailto:dmarc@domain.com; ruf=mailto:dmarc@domain.com
rDNS (reverse DNS) phân giải ngược IP ra domain name, cần phải nhờ nhà quản lý domain làm giúp. Nếu không làm được thì tỉ lệ mail vào spam cao hơn.
*.domain.com A 123.123.123.123 120
domain.com MX mail.domain.com [priority:10] 120
domain.com TXT v=spf1 mx -all 120
dkim._domainkey TXT v=DKIM1; p=MIGfMA0G... 3600
dmarc TXT v=DMARC1; adkim=s; aspf=s... 3600
Khám sức khỏe mail server
https://mail-tester.com
Gởi email đến địa chỉ ngẫu nhiên do mail-tester.com cung cấp, sau đó xem đánh giá và các ưu nhược điểm mail server của mình để cải tiến
G. Mở port SMTP
Mặc định iRedMail dùng port 25 để liên lạc với các mail server khác, và cũng dùng port 25 để gởi mail.
IMAP 143/TLS hoặc 993/SSL
SMTP 25/SSL hoặc 587/TLS hoặc 465/SSL
Tuy nhiên, một số mail client thông dụng như Outlook lại mặc định dùng port 587. Để dễ dàng cấu hình mail client, chúng ta cũng cho mail server gởi mail qua cổng 465 hay 587. Ngoài mở port trên router internet, còn phải sửa file /etc/postfix/master.cf
#Dùng port 465
465 inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o content_filter=smtp-amavis:[127.0.0.1]:10026
#Dùng port 587
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o content_filter=smtp-amavis:[127.0.0.1]:10026