Thiết lập MTAs
Tại đây, chúng ta sẽ sử dụng MTA Exim4 trên hệ thống MX, server làm nhiệm vụ chuyển tiếp và lưu trữ email.
Với server chuyển tiếp:
Trước tiên, chúng ta cần gán thêm repository volatile trong file /etc/apt/source.list.d/volatile.list:
deb http://volatile.debian.org/debian-volatile lenny/volatile main
và cập nhật cơ sở dữ liệu apt:
sudo apt-get update
Sau đó là bước cài đặt exim4, nhớ chọn Yes để chia nhỏ các file cấu hình:
sudo apt-get install exim4-daemon-heavy clamav-daemon clamav-freshclam openssl
Theo thứ tự, để sử dụng TLS thông qua các session của SMTP thì hệ thống cần có chứng nhận – certificate. Đó có thể là chứng nhận do các tổ chức, doanh nghiệp cung cấp hoặc chỉ là do hệ thống tự tạo ra. Ở đây, chúng ta sẽ sử dụng trường hợp thứ 2 - certificate tự tạo, khi sử dụng các máy tính trạm sẽ hiển thị thông tin cảnh báo về những certificate này.
Tạo RSA key:
openssl genrsa 2048
chmod 640 exim.key
Yêu cầu Certificate:
openssl req -new -key exim.key -out exim.csr
Xác nhận Certificate:
openssl x509 -req -signkey exim.key -in exim.csr -days 9999 -out exim.c
Copy file:
chown Debian-exim exim.key
sudo cp exim.key exim.crt /etc/exim4
Kích hoạt TLS trong file /etc/exim4/update-exim4.conf.conf:
...
MAIN_TLS_ENABLE='true'
...
Sau đó, tạo file macro khởi tạo /etc/exim4/conf.d/main/04_mailMEOmacrodefs:
ldap_default_servers = ldap.middle.earth
.ifndef MAILMEO_DOMAINROOT
MAILMEO_DOMAINROOT = ou=domains,dc=middle,dc=earth
.endif
Trong đó MAILMEO_DOMAINROOT định nghĩa và khởi tạo giá trị LDAP root dn – nơi lưu trữ thông tin về domain và user. Với những server làm nhiệm vụ chuyển tiếp thì các tài khoản người dùng sẽ được xác nhận trước khi email được gửi đi, mô hình này là SMTP-AUTH. Và để thực hiện quá trình này, chúng ta phải tạo file cấu hình khác /etc/exim4/conf.d/auth/50_mailMEO_authsmtp:
plain_server:
driver = plaintext
public_name = PLAIN
server_condition = ${if ldapauth \
{user="uid=${quote_ldap_dn:${extract{1}{@}{$2}{$value} fail}},\
dc=${quote_ldap_dn:${extract{2}{@}{$2}{$value} fail}},\
MAILMEO_DOMAINROOT" \
pass=${quote:$3} \
ldap:///}{yes}{no}}
server_set_id = $auth2
server_prompts = :
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif
login_server:
driver = plaintext
public_name = LOGIN
server_condition = ${if ldapauth \
{user="uid=${quote_ldap_dn:${extract{1}{@}{$1}{$value} fail}},\
dc=${quote_ldap_dn:${extract{2}{@}{$1}{$value} fail}},\
MAILMEO_DOMAINROOT" \
pass=${quote:$2} \
ldap:///}{yes}{no}}
server_set_id = $auth1
server_prompts = "Username:: : Password::"
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif
Vì chúng ta lưu trữ các mật khẩu dưới dạng mã hóa, do vậy bắt buộc phải sử dụng cơ chế xác thực mật khẩu một cách rõ ràng dựa vào PLAIN hoặc LOGIN (hoặc là cả 2). Mặt khác, những người quản trị chỉ nên dùng chuẩn AUTH để “giấu” các session SMTP. Và nếu muốn dùng chức năng AUTH để xóa bỏ toàn bộ các session, hãy khởi tạo thông số AUTH_SERVER_ALLOW_NOTLS_PASSWORDS (ví dụ đặt bằng giá trị true) trong file /etc/exim4/conf.d/main/04_mailMEOmacrodefs. Bên cạnh đó, chúng ta sẽ yêu cầu exim truyền toàn bộ dữ liệu qua cổng 587 – thường được dùng phổ biến hơn MUA để đăng tải email, và để báo cho chuẩn TLS. Trong file cấu hình /etc/exim4/update-exim4.conf.conf, hãy sửa lại tham số dc_local_interfaces theo giá trị sau:
dc_local_interfaces='0.0.0.0:0.0.0.0.587'
Chức năng bảo mật được các chương trình Antivirus – ở đây là clamav đảm nhận, ứng dụng này liên kết chặt chẽ với exim4. Tất cả những gì cần làm là kích hoạt lựa chọn trong file /etc/exim4/conf.d/main/02_exim4-config_options:
av_scanner = clamd:/var/run/clamav/clamd.ctl
Bỏ chú thích của 3 dòng trong file /etc/exim4/conf.d/acl/40_exim4-config_check_data:
deny
malware = *
message = This message was detected as possible malware ($malware_name).
Gán các tài khoản clamav tới nhóm Debian-exim:
sudo adduser clamav Debian-exim
Sau đó, khởi động lại clamav và exim4, và chúng ta cũng đã hoàn thành các công đoạn cơ bản với server chuyển tiếp:
sudo /etc/init.d/clamav-daemon restart
sudo /etc/init.d/exim4 restart
Với server lưu trữ – Mailstore
Server này có nhiệm vụ lưu trữ tất cả các dữ liệu email trên hệ thống, quá trình kiểm tra và phân loại spam cũng được thực hiện tại đây. Thực chất, quá trình này sẽ “ngốn” rất nhiều tài nguyên của hệ thống, do vậy hầu hết mọi người chỉ muốn làm bước này sau mỗi quá trình lọc (DNSBL hoặc tương tự). Để tận dụng tối đa hiệu quả của dovecot, chúng ta nên sử dụng phiên bản 1.2.x. Nhưng thật không may rằng các phiên bản 1.0 dành cho Debian thiếu khá nhiều chức năng quan trọng, điển hình là quotawarning. Để khắc phục tình trạng này, chúng ta cần ghép thêm repository backport bằng file /etc/apt/sources.list.d/backports.list:
deb http://backports.debian.org/debian-backports lenny-backports main
và chạy tiếp các lệnh sau:
sudo apt-get update
sudo apt-get install spamassassin exim4-daemon-heavy
sudo apt-get -t lenny-backports install dovecot-imapd dovecot-pop3d
Các định nghĩa về exim trong file /etc/exim4/conf.d/main/04_mailMEOmacrodefs:
ldap_default_servers = ldap.middle.earth
# mailMEO macros definitions
.ifndef MAILMEO_DOMAINROOT
MAILMEO_DOMAINROOT = ou=domains,dc=middle,dc=earth
.endif
.ifndef MAILMEO_MAINDOMAIN
MAILMEO_MAINDOMAIN = ${lookup ldap {USER=userid=exim,dc=middle,dc=earth PASS=eximmta ldap:///MAILMEO_DOMAINROOT?dc?one?(associatedDomain=$domain)}}
.endif
domainlist mailMEO_domains = <\n ${sg{${lookup ldapm {\
USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///MAILMEO_DOMAINROOT?associatedDomain?one?\
(&(objectClass=inetLocalMailRecipient)(objectClass=dNSDomain)(mailHost=${loo
kup dnsdb{a=$primary_hostname}{$value}fail}))}}}{,}{\\n}}
trong đó giá trị mailMEO_domains sẽ trả lại kết quả là danh sách các domain được nắm giữ trong LDAP, và để kích hoạt các tính năng quản lý với các domain trong LDAP, đơn giản chúng ta chỉ cần tạo thêm các entry entry dựa vào mẫu sau (hãy thay đổi các thông số kỹ thuật theo hệ thống của bạn):
dn: dc=%MYDOMAIN.TLD%,ou=domains,dc=middle,dc=earth
dc: middle.earth
objectClass: dNSDomain
objectClass: top
objectClass: inetLocalMailRecipient
objectClass: domainRelatedObject
mailHost: %IPADDR_OF_MAILSTORE%
associatedDomain: %MYDOMAIN%
Mặt khác, chúng ta phải chỉ định rõ ràng tới exim để chấp nhận các domain đó bằng cách thêm domainlist vào file rcpt acl: /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt, hãy thay đổi các thông số sau:
require
message = relay not permitted
domains = +local_domains : +relay_to_domains
thành:
require
message = relay not permitted
domains = +local_domains : +relay_to_domains : +mailMEO_domains
Tại đây, MAILMEO_MAINDOMAIN đề cập đến 1 chức năng mà chúng ta hay gọi là domain aliasing, nó cho phép các địa chỉ email của domain này cũng có thể tồn tại trong domain khác. Trong dữ liệu mẫu lotr.middle.earth là 1 domain alias của middle.earth, do vậy mailbox của frodo có thể được truy cập từ frodo@middle.earth hoặc frodo@lotr.middle.earth. Trong đó middle.earth là domain chính, với mức phân quyền nhất định, ví dụ tính năng xác thực qua chuẩn POP/IMAP/SMTP chỉ có thể dùng được qua domain chính này.