Triển khai Email server trên Ubuntu (với Postfix, Courier, SSL/TLS, SpamAssassin, ClamAV, Amavis)

T.V.T Marine Automation Company Limited, David Tran

Thiết lập một email server luôn luôn là một công việc phức tạp do chính bản thân sự phức tạp của một hệ thống email. Chỉ cài được một email server, làm cho nó hoạt động để bạn có thể gửi nhận email thôi là chưa đủ. Bạn còn cần phải làm cho server đó bảo mật, an toàn, có khả năng lọc thử rác và hoạt động hiệu quả, tiết kiệm ("ngốn" ít tài nguyên), v.v.

Để giúp đỡ các bạn mới "tập tành" cài đặt một email server cho doanh nghiệp mình, hôm nay tôi bắt đầu viết hướng dẫn về cách cài đặt và cấu hình một email server HOÀN CHỈNH trên hệ điều hành Ubuntu Server.

Lưu ý:

  1. Hướng dẫn ở bài này đã test thành công với:
    • Ubuntu 12.04
    • Ubuntu 11.04
    • Ubuntu 10.04
    • Ubuntu 9.04
  2. Nếu không có yêu cầu gì đặc thù, bạn nên sử dụng các dịch vụ email trên nền tảng điện toán đám mây như Google App, Microsoft Outlook.Com

Mục tiêu:

Sau khi Cài đặt & Cấu hình xong, email server của bạn sẽ có các chức năng sau:

  • Người dùng có thể kết nối đến Email server sử dụng các trình email client có hỗ trợ POP3 hoặc/và IMAP như MS Outlook, Thunder Bird, Outlook Express, v.v.
  • Việc kết nối đến Email server sử dụng lớp mã hóa SSL/TLS để đảm bảo việc bảo mật thông tin trong quá trình gửi/nhận email.
  • Quét virus toàn bộ email để tránh các virus được đính kèm trong email

Để thực hiện được các tính năng cao cấp bên trên, tôi sử dụng các phần mềm sau để cài đặt và tích hợp lẫn nhau trên server:

  1. Postfix: là một MTA (Mail Transfer Agent), chịu trách nhiệm về việc nhận email và lưu trữ trên server cũng như cho phép người dùng có thẩm quyền có thể đăng nhập và gửi email.
  2. Courier: là một phần mềm tương tác với Postfix và cung cấp giao diện POP3 và IMAP cho người dùng kết nối đến Postfix để gửi/nhận email.
  3. SASL với SSL và TLS: cho phép người dùng kết nối đến email server và gửi/nhận email một cách an toàn và bảo mật thông tin.
  4. SpamAssassin: như tên gọi của nó (SpamAssassin - Kẻ ám sát Spam) là một phần mềm chuyên dụng chuyên phân tích các email gửi đến và sàng lọc tất cả những email mà nó cho là email rác (spam).
  5. ClamAV: phần mềm diệt virus tích hợp với máy chủ email Postfix. Nó sẽ quét toàn bộ các email gửi đến email server trước khi chuyển đến Inbox của người dùng.
  6. Amavis: tích hợp SpamAssasin và ClamAV và hook Postfix

Hướng dẫn Cài đặt 7 Cấu hình

apt-get update;
apt-get install mysql-server postfix postfix-mysql libsasl2-modules \
libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin \
libpam-mysql clamav-base libclamav6 clamav-daemon clamav-freshclam \
amavisd-new spamassassin spamc courier-base courier-authdaemon \
courier-authlib-mysql courier-imap courier-imap-ssl courier-pop \
courier-pop-ssl courier-ssl

Virtual User

Chú ý: Tất cả các email msg sẽ được nhận bởiu user ảo (virtual) này. Chỉ cần một tàu khoản hệ thống (system account) được tạo và chúng ta sẽ quản lý các mailbox chức năng virtual user của Postfix
groupadd virtual -g 5000
useradd -r -g "virtual" -G "users" -c "Virtual User" -u 5000 virtual
mkdir /var/spool/mail/virtual
chown virtual:virtual /var/spool/mail/virtual

Quan trọng!

trong khối lệnh trên, tôi cưỡng bức ID của user thành 5000 và sử dụng giá trị này cho các cấu hình dưới đây. Nếu bạn sử dụng một ID khác, hãy đảm bảo rằng các cấu hình thiết lập dưới đây sử dụng đúng ID mà bạn đã cưỡng bức trong bước này.

 Postfix

mv /etc/postfix/main.cf{,.dist}
vi /etc/postfix/main.cf
Copy/Paste (Nhớ thay đổi mail.example.com thành domain của bạn)
myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
append_dot_mydomain = no
readme_directory = no
mydestination =
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks_style = host
mailbox_size_limit = 0
virtual_mailbox_limit = 0
recipient_delimiter = +
inet_interfaces = all
message_size_limit = 0
 
# SMTP Authentication (SASL)
 
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
 
# Encrypted transfer (SSL/TLS)
 
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/private/mail.example.com.crt
smtpd_tls_key_file = /etc/ssl/private/mail.example.com.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 
# Basic SPAM prevention
 
smtpd_helo_required = yes
smtpd_delay_reject = yes
disable_vrfy_command = yes
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject
 
# Force incoming mail to go through Amavis
 
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
 
# Virtual user mappings
 
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
virtual_mailbox_base = /var/spool/mail/virtual
virtual_mailbox_maps = mysql:/etc/postfix/maps/user.cf
virtual_uid_maps = static:5000
virtual_gid_maps =  static:5000
virtual_alias_maps = mysql:/etc/postfix/maps/alias.cf
virtual_mailbox_domains = mysql:/etc/postfix/maps/domain.cf
mv /etc/postfix/master.cf{,.dist}
vi /etc/postfix/master.cf
Tiếp tục Copy/Paste ^_^
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
submission inet n       -       -       -       -       smtpd
pickup    fifo  n       -       -       60      1       pickup
  -o content_filter=
  -o receive_override_options=no_header_body_checks
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       -       1000?   1       tlsmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify
flush     unix  n       -       -       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       -       -       -       smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       -       -       -       smtp
	-o smtp_fallback_relay=
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
retry     unix  -       -       -       -       -       error
discard   unix  -       -       -       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       -       -       -       lmtp
anvil     unix  -       -       -       -       1       anvil
scache    unix  -       -       -       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# See the Postfix UUCP_README file for configuration details.
#
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix	-	n	n	-	2	pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}
amavis    unix -        -       -       -       2       smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
  -o disable_dns_lookups=yes
  -o max_use=20
127.0.0.1:10025 inet n  -       -       -       -       smtpd
  -o content_filter=
  -o local_recipient_maps=
  -o relay_recipient_maps=
  -o smtpd_restriction_classes=
  -o smtpd_delay_reject=no
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_data_restrictions=reject_unauth_pipelining
  -o smtpd_end_of_data_restrictions=
  -o mynetworks=127.0.0.0/8
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o smtpd_client_connection_count_limit=0
  -o smtpd_client_connection_rate_limit=0
  -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

 

[ Còn tiếp ]