Tạo lập mail server trên hệ thống GNU/Linux (Phần 5)
Đây là bài tiếp tục của bài này Secure mail server Ngăn chặn hackers, phishers, spammers, sếp hay hàng xóm của bạn truy cập vào server của bạn là vấn đề rất quan trọng nhưng không khó để làm Authentication Cái giao dịch email thông thường giữa client và server thường được thực hiện ở dạng ...
Đây là bài tiếp tục của bài này
Secure mail server
Ngăn chặn hackers, phishers, spammers, sếp hay hàng xóm của bạn truy cập vào server của bạn là vấn đề rất quan trọng nhưng không khó để làm
Authentication
Cái giao dịch email thông thường giữa client và server thường được thực hiện ở dạng plain text. Bao gồm cả password và nội dung của một email.
SASL
SASL bảo vệ việc authentication (login) bằng cách mã hoá password để nó không bị truy cập một cách dễ dàng. Tuy nhiên phần còn lại của email vẫn là ở dạng plain text.
Tất nhiên nó không phải là lý tưởng vì vậy có một số cách để kết hợp SASL và lưu trữ password đã được mã hoá. Trong tương lai, các package của Ubuntu có thể sẽ hỗ trợ các tuỳ chọn thiết lập password_format cho SASL. Cho đến lúc đó bạn có thể thiết lập SASL để yêu cầu PAM so sánh password:
Cài đặt:
sudo apt-get install libsasl2-modules libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin libpam-mysql
Thiết lập:
Cho phép postfix truy cập vào file SASL
sudo adduser postfix assl
Tạo file sasl có thể truy cập được bằng chrooted Postfix
sudo mkdir -p /var/spool/postfix/var/run/saslauthd
Thêm các thiết lập SASL cho Post fix
sudo vi /etc/postfix/main.cf
# SASL smtpd_sasl_auth_enable = yes # If your potential clients use Outlook Express or other older clients # this needs to be set to yes broken_sasl_auth_clients = no smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain =
Thay đổi các configuration đã có:
# Add permit_sasl_authenticated to you existing smtpd_sender_restrictions smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit # Add permit_sasl_authenticated to you existing smtpd_recipient_restrictions smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
Thay đổi cách SASLAUTHD được chạy:
sudo vi /etc/default/saslauthd
# Toggle this to yes START=yes # Switch this to be under postfix's spool # And add -r so that the realm(domain) is part of the username OPTIONS="-r -c -m /var/spool/postfix/var/run/saslauthd"
Hướng dẫn Postfix cách giao tiếp với SASL
sudo vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd mech_list: plain login cram-md5 digest-md5 log_level: 7 allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail sql_passwd: mailPASSWORD sql_database: maildb sql_select: select crypt from users where id='%u@%r' and enabled = 1
(Khi SASL hoạt động, bạn có thể bỏ dòng log_level (Chú ý: Trong khi sql_passw là tên parameter ban đầu(không có d), một parameter là sql_passwd cũng hoạt động ở version mới hơn)
Hướng dẫn PAM cách authenticate smtp thông qua mysql:
sudo vi /etc/pam.d/smtp
Ở đây bắt buộc chỉ có 2 dòng, tôi chia nó ra chỉ để dễ đọc:
auth required pam_mysql.so user=mail passwd=mailPASSWORD host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1 account sufficient pam_mysql.so user=mail passwd=mailPASSWORD host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1
Thêm vào đó, việc tailing var/log/mail.log và /var/log/mysql/mysql.log khá hữu dụng để tail auth.log khi test SASL
tail -f /var/log/auth.log
Khởi động lại Postfix và saslauthd để cho phép SASL gửi emails.
sudo /etc/init.d/saslauthd restart sudo /etc/init.d/postfix restart
Imap SASL / Courier
Tôi thường không dùng SASL cho authentication ở Courrier, vì tôi đã bắt buộc sử dụng TLS cho tất cả các clients. Tuy nhiên nếu bạn có nhiều chính sách nới lỏng truy cập vì nó tốt hơn khi bạn có nhiều user, thì bạn có thể sẽ muốn có SASL ở Courier.
sudo vi /etc/courier/imapd
Phần này có thể đã có sẵn và chỉ bị comment out. Nếu không thì thay line hiện tại bằng cách thêm vào UTH=CRAM-MD5 AUTH=CRAM-SHA1 để nó giống như sau:
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"
sudo /etc/init.d/courier-authdaemon restart; sudo /etc/init.d/courier-imap restart; sudo /etc/init.d/courier-imap-ssl restart
Encryption
TLS
Việc mã hoá traffic giúp ngăn cản người khác nghe trộm việc giao tiếp của bạn, và rất được khuyến khích. Có nhiều kiểu giao tiếp khác nhau cần phải mã hoá: Data traffic giữa ứng dụng email và server khi bạn đọc và gửi email, giao tiếp giữa các email server khác và server mail của bạn. Để mã hoá email thì bạn cần thiết lập Courier. Để gửi đi giữa các server mã hoá bạn cần Postfix.
TLS trong Postfix
Để mã hoá, bạn cần các certificate. Ubuntu tạo sẵn cho bạn một vài cái để bạn có thể dùng khi thiết lập server. Tuy nhiên trước khi bạn chạy server, thì tôi khuyên bạn nên tạo certificate riêng ứng với tên domain của bạn.
vi /etc/postfix/main.cf
Đã có sẵn một vài TLS setting ở version debian/ubuntu mặc định của file này. Tôi đưa nó xuống cuối file, nhưng bạn có thể đặt ở đâu tuỳ ý.
# TLS parameters # smtp_use_tls = no smtp_tls_security_level = may # smtpd_use_tls=yes smtpd_tls_security_level = may # smtpd_tls_auth_only = no smtp_tls_note_starttls_offer = yes smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key # smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache # smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Tiếp theo chúng ta cần nhìn vào file master.cf
vi /etc/postfix/master.cf
Mặc định, chỉ có service smtp bình thường được bật lên. Nhưng tôi thích bật submission (port 587) lên, để client có thể sử dụng nó, và tôi có thể giới hạn họ chỉ dùng TLS. Cũng cần cho phép smtps service (port 465), để tương thích với một vài clients cũ (ví dụ như outlook express...)
submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes # if you do not want to restrict it encryption only, comment out next line< -o smtpd_tls_auth_only=yes # -o smtpd_tls_security_level=encrypt # -o header_checks= # -o body_checks=< -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject -o smtpd_sasl_security_options=noanonymous,noplaintext -o smtpd_sasl_tls_security_options=noanonymous # -o milter_macro_daemon_name=ORIGINATING< smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sasl_security_options=noanonymous,noplaintext -o smtpd_sasl_tls_security_options=noanonymous # -o milter_macro_daemon_name=ORIGINATING
TLS trong Courier
Ubuntu lại đã tạo sẵn certificate cho bạn, nhưng nếu bạn muốn tạo cái riêng cho mình, đặc biệt là để cho một domain name chuẩn, thì hãy làm như sau:
cd /etc/courier openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out imapd.pem -nodes -days 999
Và bạn cần sửa
vi /etc/courier/imapd-ssl
Mặc định Ubuntu đã chỉ sẵn vào certificate của bạn
TLS_CERTFILE=/etc/courier/imapd.pem
Hãy thay đổi cái này nếu cần thiết.
Nếu bạn cũng muốn giới hạn các người dùng của IMAP cho SSL/TLS, chỉ cần chỉnh setting này sang 1
IMAP_TLS_REQUIRED=1