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 # ...
Đâ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