Tạo lập mail server trên hệ thống GNU/Linux (Phần 3)

Đây là bài tiếp của bài sau đây

MTA - Postfix (tiếp)

Nếu ta sử dụng domain ảo, các phần sau đây sẽ phải để rỗng

local_recipient_maps =
mydestination =

Sau đó ta sẽ set một vài thông số như sau:

# how long if undelivered before sending warning update to sender		
delay_warning_time = 4h
# will it be a permanent error or temporary
unknown_local_recipient_reject_code = 450
# how long to keep message on queue before return as failed.
# some have 3 days, I have 16 days as I am backup server for some people
# whom go on holiday with their server switched off.
maximal_queue_lifetime = 7d
# max and min time in seconds between retries if connection failed
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# how long to wait when servers connect before receiving rest of data
smtp_helo_timeout = 60s
# how many address can be used in one message.
# effective stopper to mass spammers, accidental copy in whole address list
# but may restrict intentional mail shots.
smtpd_recipient_limit = 16
# how many error before back off.
smtpd_soft_error_limit = 3
# how many max errors before blocking it.
smtpd_hard_error_limit = 12

Bây giờ ta có thể chỉ định một số giới hạn. Hãy chú ý mỗi setting chỉ được viết trong một dòng.

# Requirements for the HELO statement
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname,
		reject_invalid_hostname, permit
# Requirements for the sender details
smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender,
		reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Requirements for the connecting server 
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org,
		reject_rbl_client blackholes.easynet.nl
# Requirement for the recipient address
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks,
		reject_non_fqdn_recipient, reject_unknown_recipient_domain,
		reject_unauth_destination, permit
smtpd_data_restrictions = reject_unauth_pipelining

Một số giới hạn khác:

# require proper helo at connections 
smtpd_helo_required = yes
# waste spammers time before rejecting them
smtpd_delay_reject = yes
disable_vrfy_command = yes

Tiếp theo ta cần thiết lập một vài maps và look ups cho các domain ảo.

# not sure of the difference of the next two
# but they are needed for local aliasing
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# this specifies where the virtual mailbox folders will be located
virtual_mailbox_base = /var/spool/mail/virtual
# this is for the mailbox location for each user
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# and this is for aliases
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# and this is for domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
# this is how to connect to the domains (all virtual, but the option is there)
# not used yet
# transport_maps = mysql:/etc/postfix/mysql_transport.cf

Bạn có thể sử dụng một lookup cho uid và gid của owner của các mail files. Nhưng tôi có xu hướng chỉ có một owner (ảo), vì vậy, thay vào đó tôi sử dụng đoạn sau:

virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

Bạn cần thiết lập một file alias. File này chỉ được sử dụng ở local, và không được sử dụng bởi mail domain của bạn.

sudo cp /etc/aliases /etc/postfix/aliases
# may want to view the file to check if ok.
# especially that the final alias, eg root goes
# to a real person
sudo postalias /etc/postfix/aliases

Tiếp theo bạn cần thiết lập folder nơi các mail ảo sẽ được lưu trữ. Phần này có thể đã được thiết lập xong bằng apt-get. Bạn cũng hãy tạo user sở hữu các folder.

# to add if there is not a virtual user
sudo mkdir /var/spool/mail/virtual
sudo groupadd --system virtual -g 5000
sudo useradd --system virtual -u 5000 -g 5000
sudo chown -R virtual:virtual /var/spool/mail/virtual

Chú ý: nếu sử dụng Amazon ec2, bạn có thể sẽ muốn chuyển mail spool tới thư mục /mnt hoặc chuyển tới Elastic Block Store. Sau đó bạn sẽ cần phải tạo symlink.

Thiết lập MySQL của Postfix.

Tiếp theo ta sẽ cần phải thiết lập các file để truy nhập các lookup thông qua database. Chúng ta sẽ chỉ thiết lập một phần nhỏ, phần còn lại ta sẽ làm sau nếu cần thiết.

Sửa (tạo mới) cách tìm vị trí của users mailbox:

sudo vi /etc/postfix/mysql_mailbox.cf
user=mail
password=mailPASSWORD
dbname=maildb
table=users
select_field=maildir
where_field=id
hosts=127.0.0.1
additional_conditions = and enabled = 1

Tạo cách để tìm email alias:

sudo vi /etc/postfix/mysql_alias.cf
user=mail
password=mailPASSWORD
dbname=maildb
table=aliases
select_field=destination
where_field=mail
hosts=127.0.0.1
additional_conditions = and enabled = 1

Tạo cách để tìm kiếm các domains:

sudo vi /etc/postfix/mysql_domains.cf

user=mail
password=mailPASSWORD
dbname=maildb
table=domains
select_field=domain
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1

Nếu bạn chỉ định một ip trong các host (ngược lại với localhost) thì nó sẽ kết nối thông qua tcp chứ không phải là mysql socket. PS: hãy nhớ thay thế password mặc định bằng password mà bạn chọn.

IMAP

Một server mail thông thường sẽ cần IMAP, tuy nhiên nếu server của bạn chỉ để backup hoặc redirect thì Courier sẽ không cần thiết

Courier IMAP

Cài đặt

sudo apt-get install courier-base courier-authdaemon courier-authlib-mysql \
			courier-imap courier-imap-ssl courier-ssl

sẽ mở ra các web directories. Bạn có thể bỏ qua phần này. Bạn cũng sẽ được cảnh báo về vị trí của certificate. Hãy bỏ qua nó. Dưới đây là những nội dung mà bạn cần phải thay đổi.

sudo vi /etc/courier/authdaemonrc

Sửa thành mysql mode

authmodulelist="authmysql"

Enable logging

DEBUG_LOGIN=2
sudo vi /etc/courier/authmysqlrc

Đổi user

MYSQL_USERNAME mail

Sửa password thành password mà bạn đã chọn:

MYSQL_PASSWORD mailPASSWORD

Sửa database:

MYSQL_DATABASE maildb

Sửa bảng user:

MYSQL_USER_TABLE users

Bỏ comment đoạn sau:

MYSQL_CRYPT_PWFIELD crypt

comment đoạn sau:

# MYSQL_CLEAR_PWFIELD clear

Thêm maildir

MYSQL_MAILDIR_FIELD concat(home,'/',maildir)

Thêm câu lệnh where

MYSQL_WHERE_CLAUSE enabled=1

Cuối cùng bạn có thể xem ở imapd file, nhưng không cần thay đổi gì cả.

vi /etc/courier/imapd