Cách tạo một máy chủ thư đầy đủ tính năng bằng Postal

theanh

Administrator
Nhân viên
Postal là một máy chủ thư hoàn chỉnh miễn phí và mã nguồn mở để gửi và nhận email. Nó được viết bằng Ruby và JavaScript. Bạn có thể dễ dàng cài đặt Postal trên máy chủ của riêng bạn. Nó cũng giúp bạn cung cấp thông tin DNS chính xác cần thiết để giảm email rác. Postal được nhiều tổ chức sử dụng để gửi và nhận email hàng ngày.

Trong hướng dẫn này, chúng tôi sẽ cài đặt Postal Mail Server trên Ubuntu 17.04.

Điều kiện tiên quyết
  • Máy chủ Ubuntu 17.04 tối thiểu. Khuyến nghị RAM 8 GB.
  • Quyền root. Hướng dẫn này được viết dưới dạng người dùng root, nếu bạn đăng nhập dưới dạng người dùng sudo, hãy chạy sudo -i.
  • một tên miền trỏ tới máy chủ của bạn.

Cập nhật Hệ thống Cơ sở​

Trước khi cài đặt bất kỳ gói nào, bạn nên cập nhật các gói và kho lưu trữ bằng lệnh sau.
Mã:
apt update && apt -y upgrade
Mã:
shutdown -r now
Sau khi hệ thống của bạn được cập nhật, hãy tiến hành cài đặt Ruby.

Cài đặt Ruby​

Postal được viết bằng Ruby, do đó, bạn cần cài đặt Ruby 2.3 trở lên trên hệ thống của mình. Trong hướng dẫn này, chúng ta sẽ cài đặt phiên bản Ruby mới nhất bằng RVM. Chạy lệnh sau để thêm khóa GPG của RVM vào máy chủ của bạn.
Mã:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
Bây giờ hãy cài đặt RVM bằng lệnh sau.
Mã:
curl -sSL https://get.rvm.io | bash -s stable
Để sử dụng RVM ngay lập tức, bạn sẽ cần chạy lệnh sau.
Mã:
source /etc/profile.d/rvm.sh
Bây giờ hãy lấy danh sách Ruby bằng lệnh sau.
Mã:
rvm list known
Bạn sẽ thấy đầu ra sau:
Mã:
# MRI Rubies[ruby-]1.8.6[-p420][ruby-]1.8.7[-head] # bảo mật được phát hành vào head[ruby-]1.9.1[-p431][ruby-]1.9.2[-p330][ruby-]1.9.3[-p551][ruby-]2.0.0[-p648][ruby-]2.1[.10][ruby-]2.2[.6][ruby-]2.3[.3][ruby-]2.4[.0]ruby-head
Bây giờ hãy cài đặt phiên bản Ruby mới nhất trong danh sách bằng lệnh sau.
Mã:
rvm install 2.4
Sử dụng phiên bản Ruby bằng lệnh sau.
Mã:
rvm use 2.4
Bạn có thể xác minh phiên bản Ruby bằng lệnh sau.
Mã:
ruby -v
Bạn sẽ thấy đầu ra sau nếu Ruby đã được cài đặt thành công.
Mã:
root@ubuntu:~# ruby -vruby 2.4.0p0 (2016-12-24 bản sửa đổi 57164) [x86_64-linux]

Cài đặt Ruby Gems​

Để chạy Postel trên máy chủ của bạn, bạn sẽ cần cài đặt bundler và procodile trên máy chủ của bạn. bundler là trình quản lý phụ thuộc cho các ứng dụng Ruby gem. procodile là công cụ quản lý quy trình cho các ứng dụng Ruby. Cài đặt cả hai ứng dụng bằng các lệnh sau.
Mã:
gem install bundler
Mã:
gem install procodile

Cài đặt MariaDB Database Server​

MariaDB là một nhánh của MySQL database server. MySQL là phần mềm hệ thống quản lý cơ sở dữ liệu quan hệ được sử dụng để lưu trữ dữ liệu ở định dạng bảng. Để cài đặt MariaDB trên máy chủ của bạn, hãy chạy:
Mã:
apt -y install mariadb-client mariadb-server libmysqlclient-dev
Chạy các lệnh sau để khởi động MariaDB và cho phép nó khởi động khi khởi động.
Mã:
systemctl start mariadb
Mã:
systemctl enable mariadb
Bây giờ hãy chạy các lệnh sau để bảo mật cài đặt MariaDB của bạn.
Mã:
mysql_secure_installation
Lệnh trên sẽ chạy một tập lệnh để bảo mật cài đặt MariaDB mới. Tập lệnh sẽ yêu cầu mật khẩu người dùng root hiện tại, chúng tôi vừa cài đặt MariaDB, mật khẩu root chưa được đặt, chỉ cần nhấn enter để tiếp tục.

Tập lệnh sẽ hỏi bạn có muốn đặt mật khẩu root cho cài đặt MariaDB của mình không, hãy chọn y và đặt mật khẩu mạnh cho cài đặt. Hầu hết các câu hỏi đều tự giải thích và bạn nên trả lời có hoặc y cho tất cả các câu hỏi.

Thiết lập cơ sở dữ liệu cho Postal​

Để tạo cơ sở dữ liệu cho Postal, trước tiên chúng ta cần đăng nhập vào dòng lệnh MySQL. Chạy lệnh sau để thực hiện tương tự.
Mã:
mysql -u root -p
Lệnh trên sẽ đăng nhập vào shell MySQL của người dùng root, lệnh sẽ nhắc nhập mật khẩu của người dùng root. Cung cấp mật khẩu để đăng nhập. Bây giờ hãy chạy truy vấn sau để tạo cơ sở dữ liệu mới cho cài đặt Postal của bạn.
Mã:
CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
Truy vấn trên sẽ tạo một cơ sở dữ liệu mới có tên là postal. Đảm bảo rằng bạn sử dụng dấu chấm phẩy ở cuối mỗi truy vấn vì truy vấn luôn kết thúc bằng dấu chấm phẩy.

Bây giờ hãy cung cấp tất cả các quyền cho người dùng cơ sở dữ liệu của bạn đối với cơ sở dữ liệu bạn đã tạo. Chạy lệnh sau.
Mã:
GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
Thay thế StrongPassword bằng một mật khẩu rất mạnh và an toàn.

Cơ sở dữ liệu sẽ được Postal tự động ghi, nhưng để làm được điều đó, chúng ta sẽ cần cung cấp các quyền thích hợp cho người dùng Postal. Chạy lệnh sau để cấp quyền cho tất cả người dùng bắt đầu bằng postal-.
Mã:
GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
Bây giờ hãy chạy lệnh sau để áp dụng ngay các thay đổi trên các quyền cơ sở dữ liệu.
Mã:
FLUSH PRIVILEGES;
Thoát khỏi dấu nhắc MySQL bằng lệnh sau.
Mã:
EXIT;

Cài đặt RabbitMQ​

RabbitMQ được viết bằng Ngôn ngữ Erlang, trong hướng dẫn này chúng ta sẽ cài đặt phiên bản Erlang mới nhất vào máy chủ. Cài đặt Erlang bằng lệnh sau.
Mã:
apt -y install erlang
Nhập khóa GPG bằng cách chạy:
Mã:
curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
Bây giờ hãy thêm kho lưu trữ RabbitMQ bằng cách chạy lệnh sau:
Mã:
add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'
Cập nhật chỉ mục kho lưu trữ bằng cách chạy lệnh sau.
Mã:
apt update
Bây giờ bạn có thể cài đặt RabbitMQ bằng cách chạy lệnh sau.
Mã:
apt -y install rabbitmq-server
RabbitMQ hiện đã được cài đặt trên hệ thống của bạn.

Thiết lập RabbitMQ​

Bạn có thể bắt đầu quy trình máy chủ RabbitMQ bằng cách chạy lệnh sau.
Mã:
systemctl start rabbitmq-server
Để tự động khởi động RabbitMQ khi khởi động, hãy chạy lệnh sau.
Mã:
systemctl enable rabbitmq-server
Bây giờ hãy chạy lệnh sau để tạo máy chủ ảo cho Postal trong máy chủ RabbitMQ.
Mã:
rabbitmqctl add_vhost /postal
Bây giờ hãy thêm người dùng RabbitMQ cho Postal bằng cách chạy lệnh sau.
Mã:
rabbitmqctl add_user postal StrongPassword
Thay thế StrongPassword là mật khẩu rất mạnh.

Bây giờ hãy đặt quyền thích hợp trên máy chủ ảo RabbitMQ cho người dùng RabbitMQ.
Mã:
rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"

Cài đặt Git và Node.js​

Git sẽ được sử dụng để truy xuất gói cài đặt và một số phụ thuộc. Chạy lệnh sau để cài đặt Git trên hệ thống của bạn.
Mã:
apt -y install git
Bạn có thể kiểm tra xem Git đã được cài đặt thành công hay chưa bằng cách kiểm tra phiên bản bằng lệnh sau.
Mã:
git --version
Bạn sẽ nhận được kết quả sau.
Mã:
root@ubuntu:~# git --versiongit version 2.11.0
Node.js sẽ được sử dụng để biên dịch thư viện JavaScript. Cài đặt phần mềm bằng lệnh sau.
Mã:
apt -y install nodejs
Bạn có thể kiểm tra xem Node.js đã được cài đặt thành công hay chưa bằng cách chạy lệnh sau.
Mã:
nodejs -v
Bạn sẽ nhận được kết quả sau.
Mã:
root@ubuntu:~# nodejs -vv4.7.2
Bây giờ chúng ta đã có tất cả các phụ thuộc đã sẵn sàng, bạn có thể cài đặt Postal.

Cài đặt Postal​

Postal sẽ chạy như một người dùng riêng biệt. Chạy lệnh sau để tạo người dùng mới.
Mã:
useradd -r -m -d /opt/postal -s /bin/bash postal
Lệnh trên sẽ tạo người dùng mới với tên người dùng postal và thư mục gốc được đặt thành /opt/postal.

Cho phép Ruby lắng nghe các cổng đặc quyền bằng cách chạy lệnh sau.
Mã:
setcap 'cap_net_bind_service=+ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/ruby
Bây giờ mọi thứ đã sẵn sàng, hãy tải xuống kho lưu trữ Postal mới nhất và giải nén kho lưu trữ dưới dạng người dùng Postal bằng lệnh sau.
Mã:
wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal
Bây giờ hãy tạo một liên kết tượng trưng đến tệp nhị phân Postal bằng cách chạy lệnh sau.
Mã:
ln -s /opt/postal/bin/postal /usr/bin/postal
Bây giờ bạn có thể tương tác với máy chủ Postal của mình từ bất kỳ thư mục nào. Để chạy các lệnh tiếp theo, bạn sẽ cần đăng nhập vào shell với tư cách là người dùng postal.
Mã:
su - postal
Bây giờ bạn sẽ cần cài đặt tất cả các phụ thuộc ruby cần thiết để chạy ứng dụng.
Mã:
postal bundle /opt/postal/vendor/bundle
Sau khi các phụ thuộc đã được cài đặt, bạn sẽ cần tạo các tệp cấu hình mặc định.
Mã:
postal initialize-config
Lệnh trên sẽ tạo cấu hình cần thiết cho cài đặt Postal của bạn bao gồm nhiều khóa và chứng chỉ khác nhau. Lệnh này cũng sẽ tạo tệp cấu hình postal.yml mặc định. Bạn sẽ nhận được kết quả sau.
Mã:
postal@ubuntu:~$ postal initialize-configĐã tạo tệp cấu hình ví dụ tại /opt/postal/config/postal.ymlĐã tạo khóa riêng mới cho Let's EncryptĐã tạo khóa ký mới cho các yêu cầu DKIM & HTTPĐã tạo khóa riêng mới cho các kết nối TLS máy chủ nhanh mặc địnhĐã tạo chứng chỉ tự ký mới cho các kết nối TLS máy chủ nhanh mặc định
Bây giờ bạn sẽ cần định cấu hình một số tùy chọn trong cấu hình postal.yml.
Mã:
nano /opt/postal/config/postal.yml
Tìm dòng sau:
Mã:
web: # Máy chủ mà giao diện quản lý sẽ khả dụng trên máy chủ: postal.example.com
Đổi tên máy chủ thành tên miền thực của bạn. Tiếp theo, hãy tìm những dòng sau.
Mã:
main_db: # Chỉ định chi tiết kết nối cho máy chủ cơ sở dữ liệu MySQL của bạn: 127.0.0.1 username: postal password: p0stalpassw0rd database: postalmessage_db: # Chỉ định chi tiết kết nối cho máy chủ MySQL của bạn, nơi sẽ lưu trữ # cơ sở dữ liệu tin nhắn cho máy chủ thư. host: 127.0.0.1 username: postal password: p0stalpassw0rd prefix: postal
Thay đổi tên người dùng, mật khẩu và tên cơ sở dữ liệu theo cơ sở dữ liệu bạn đã tạo. Tiếp theo, hãy tìm những dòng sau:
Mã:
rabbitmq: # Chỉ định chi tiết kết nối cho máy chủ RabbitMQ của bạn. host: 127.0.0.1 username: postal password: StrongPassword vhost: /postal
Thay đổi cấu hình trên theo vhost và người dùng đã tạo cho RabbitMQ. Tiếp theo, hãy tìm cấu hình DNS.
Mã:
dns: # Chỉ định bản ghi DNS mà bạn đã cấu hình. Tham khảo tài liệu tại # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration để biết thêm # thông tin về những điều này. mx_records: - mx.postal.example.com smtp_server_hostname: postal.example.com spf_include: spf.postal.example.com return_path: rp.postal.example.com route_domain: routes.postal.example.com track_domain: track.postal.example.com
Thay đổi các miền ở trên bằng các miền thực tế mà bạn muốn sử dụng với máy chủ thư.

Lưu tệp và thoát khỏi trình chỉnh sửa. Bây giờ, Khởi tạo cơ sở dữ liệu và các tài sản khác bằng cách chạy:
Mã:
postal initialize
Tạo người dùng Quản trị viên Bưu điện bằng cách chạy lệnh sau.
Mã:
postal make-user
Lệnh trên sẽ yêu cầu bạn nhập địa chỉ email, tên người dùng và mật khẩu. Lệnh trên sẽ tạo ra kết quả đầu ra sau.
Mã:
postal@ubuntu:~$ postal make-userPostal User CreatorNhập thông tin cần thiết để tạo người dùng Postal mới.Công cụ này thường chỉ được sử dụng để tạo người dùng quản trị ban đầu của bạn.Địa chỉ email: [emailprotected]Tên: LiptanHọ: BiswasMật khẩu ban đầu: : **************Người dùng đã được tạo bằng địa chỉ email [emailprotected]
Quá trình thiết lập dòng lệnh của Postal hiện đã hoàn tất, bạn có thể khởi động máy chủ bằng lệnh sau.
Mã:
postal start
Để kiểm tra xem các dịch vụ đã được khởi động đúng cách chưa, hãy chạy lệnh sau.
Mã:
postal status
Bạn sẽ nhận được kết quả đầu ra sau.
Mã:
postal@ubuntu:~$ trạng thái bưu chínhProcodile Phiên bản 1.0.17Gốc ứng dụng /opt/postalGiám sát PID 5319Bắt đầu 2017-07-21 07:26:19 +0000|| web|| Số lượng 1|| Lệnh bundle exec puma -C config/puma.rb|| Tái sinh 5 sau mỗi 3600 giây|| Chế độ khởi động lại usr1|| Đường dẫn nhật ký không được chỉ định|| Địa chỉ/Cổng không được chỉ định|| => web.1 Đang chạy 07:26 pid:5325 tái sinh:0 cổng:- thẻ:-|| worker|| Số lượng 1|| Lệnh bundle exec ruby script/worker.rb|| Tái sinh 5 sau mỗi 3600 giây|| Chế độ khởi động lại start-term|| Đường dẫn nhật ký không được chỉ định|| Địa chỉ/Cổng không được chỉ định|| => worker.1 Đang chạy 07:26 pid:5327 respawns:0 port:- tag:-|| cron|| Số lượng 1|| Lệnh bundle exec rake postal:cron|| Tái sinh 5 sau mỗi 3600 giây|| Chế độ khởi động lại term-start|| Đường dẫn nhật ký không được chỉ định|| Địa chỉ/Cổng không được chỉ định|| => cron.1 Đang chạy 07:26 pid:5329 respawns:0 port:- tag:-|| smtp|| Số lượng 1|| Lệnh bundle exec rake postal:smtp_server|| Tái sinh 5 sau mỗi 3600 giây|| Chế độ khởi động lại usr1|| Đường dẫn nhật ký không được chỉ định|| Địa chỉ/Cổng không được chỉ định|| => smtp.1 Đang chạy 07:26 pid:5332 respawns:0 port:- tag:-|| requeuer|| Số lượng 1|| Lệnh bundle exec rake postal:requeuer|| Tái tạo 5 sau mỗi 3600 giây|| Chế độ khởi động lại term-start|| Đường dẫn nhật ký không được chỉ định|| Địa chỉ/Cổng không được chỉ định|| => requeuer.1 Đang chạy 07:26 pid:5334 respawns:0 port:- tag:-
Để dừng Postal, bạn luôn có thể chạy lệnh sau.
Mã:
postal stop

Cấu hình Nginx làm Proxy ngược​

Vì lý do bảo mật, giao diện web và API của Postal phải nằm sau bất kỳ máy chủ web sản xuất nào như Apache hoặc Nginx. Trong hướng dẫn này, chúng ta sẽ cài đặt và cấu hình Nginx như một proxy ngược.

Cài đặt máy chủ web Nginx bằng cách chạy lệnh sau.
Mã:
apt -y install nginx
Bạn nên sử dụng SSL để truy cập Nginx. Bạn có thể sử dụng chứng chỉ tự ký hoặc chứng chỉ SSL miễn phí Let's Encrypt hoặc chứng chỉ thương mại. Trong hướng dẫn này, chúng ta sẽ sử dụng SSL miễn phí Let's Encrypt.

Cài đặt máy khách Let's Encrypt còn được gọi là certbot bằng cách chạy lệnh sau.
Mã:
apt -y install certbot
Sau khi quá trình cài đặt hoàn tất, hãy chạy lệnh sau để lấy chứng chỉ từ cơ quan cấp chứng chỉ Let's Encrypt. Đảm bảo rằng tên miền được trỏ đến máy chủ của bạn vì certbot sẽ kiểm tra cơ quan cấp chứng chỉ miền trước khi cung cấp chứng chỉ. Thay thế mail.example.com bằng tên miền thực của bạn.
Mã:
certbot certonly --standalone -d mail.example.com
Sau khi tạo chứng chỉ, chúng sẽ được lưu trữ trong /etc/letsencrypt/live/mail.example.com.

Let’s Encrypt SSL hết hạn sau 90 ngày, vì vậy bạn nên đặt gia hạn tự động cho chứng chỉ của mình. Chạy lệnh sau để mở tệp crontab của bạn.
Mã:
crontab -e
Nhập dòng sau vào tệp crontab.
Mã:
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
Cron job ở trên sẽ tự động chạy vào mỗi Thứ Hai lúc 1:30 sáng và nếu chứng chỉ của bạn sắp hết hạn, nó sẽ tự động gia hạn chúng.

Bây giờ hãy tạo một khối máy chủ mới cho trang web của bạn bằng cách chạy lệnh sau.
Mã:
nano /etc/nginx/conf.d/mail.example.com.conf
Điền nội dung sau vào tệp.
Mã:
server { listen [::]:80; listen 0.0.0.0:80; server_name mail.example.com; return 301 https://$host$request_uri;}server { listen [::]:443 ssl; listen 0.0.0.0:443 ssl; root /opt/postal/public; server_name mail.example.com; ssl_certificate /etc/letsencrypt/live/mail.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mail.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.1 TLSv1; ssl_prefer_server_ciphers bật; ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS; vị trí / { kích thước thân máy khách tối đa 50M; try_files $uri $uri/index.html $uri.html @puma; } vị trí /tài sản { add_header Kiểm soát bộ đệm tuổi tối đa=3600; } vị trí @puma { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_pass http://127.0.0.1:5000; }}
Lưu tệp và thoát khỏi trình chỉnh sửa. Bây giờ hãy khởi động lại máy chủ web nginx bằng cách chạy.
Mã:
systemctl restart nginx
Để cho phép nginx tự động khởi động khi khởi động, hãy chạy lệnh sau.
Mã:
systemctl enable nginx
Bây giờ bạn có thể truy cập Postal bằng cách duyệt trang web sau thông qua trình duyệt web yêu thích của mình.
Mã:
https://mail.example.com

Cấu hình Postal​

Sau khi duyệt trang web trên, bạn sẽ thấy giao diện sau.




Nhập địa chỉ email và mật khẩu của người dùng mà bạn đã tạo trước đó. Sau khi đăng nhập, bạn sẽ được yêu cầu tạo một tổ chức mới.



Cung cấp tên của tổ chức. Bạn có thể chọn sử dụng tên viết tắt được tạo tự động hoặc bạn có thể tự chỉ định một tên. Tên viết tắt được sử dụng làm tên người dùng trong khi xác thực với máy chủ SMTP. Tên chỉ nên chứa các chữ cái, số và dấu gạch nối.




Sau khi tổ chức được tạo, bạn sẽ được yêu cầu tạo một máy chủ thư mới.




Cung cấp tên, tên viết tắt và chế độ của máy chủ thư. Ở chế độ Trực tiếp, tất cả email được định tuyến và gửi bình thường nhưng ở chế độ phát triển, chúng chỉ hiển thị trên giao diện web.




Sau khi đã thêm máy chủ thư, bạn sẽ cần thêm một miền mới vào máy chủ thư. Nhấp vào tab Domains và tạo một tên miền mới.



Sau khi đã thêm tên miền, bạn sẽ cần cấu hình DNS cho tên miền. Bạn sẽ cần thêm hai bản ghi TXT cho SPF và DKIM. Bạn cũng sẽ cần thêm một bản ghi CNAME và bản ghi MX cho đường dẫn trả về và gửi thư. Sau khi cấu hình DNS, hãy nhấp vào nút Kiểm tra xem bản ghi của tôi có chính xác không để xác minh cấu hình DNS.



Bây giờ, bạn sẽ cần tạo thông tin xác thực SMTP để gửi và nhận email.



Chọn loại là SMTP hoặc API. Cung cấp tên cho thông tin xác thực SMTP, chọn cách bạn muốn xử lý địa chỉ email.

Sau khi hoàn tất, bạn có thể quay lại tab Tổng quan và bạn sẽ thấy thông tin cần thiết để gửi hoặc nhận địa chỉ email.


Kết luận​

Trong hướng dẫn này, chúng tôi đã thiết lập thành công máy chủ thư đầy đủ tính năng bằng Postal trên Ubuntu 17.04. Bạn có thể sử dụng máy chủ thư để gửi và nhận email của tổ chức mình.
 
Back
Bên trên