Thứ sáu, 28/02/2014 | 00:00 GMT+7

Cách cài đặt và cấu hình DKIM với Postfix trên Debian Wheezy

Sự thất vọng khi bị gắn cờ giả là người gửi thư rác không phải là điều xa lạ đối với hầu hết các administrator server thư. Bằng cách loại trừ khả năng server bị xâm nhập, cờ sai thường do một trong những nguyên nhân sau:

  • server là một chuyển tiếp thư mở
  • địa chỉ IP của người gửi hoặc server bị đưa vào blacklist
  • server không có Tên domain Đủ điều kiện ( FQDN ) và bản ghi PTR
  • bản ghi DNS Khung policy người gửi ( SPF ) bị thiếu hoặc nó bị cấu hình sai
  • triển khai Thư được xác định DomainKeys ( DKIM ) bị thiếu hoặc nó không được cài đặt đúng cách

Đây là một số thuộc tính cơ bản đang được kiểm tra bởi phần lớn các bộ lọc thư rác độc quyền và open-souce (bao gồm cả SpamAssassin). Vượt qua các bài kiểm tra này là cực kỳ quan trọng đối với một server thư được cấu hình tốt.

Hướng dẫn này sẽ tập trung vào cài đặt và cấu hình OpenDKIM ]: một triển khai open-souce của hệ thống xác thực người gửi DKIM.

Giả định người đọc biết cách truy cập server qua SSH, Postfix và Dovecot đã được cài đặt và cấu hình ( hướng dẫn ), tên server và FQDN được cài đặt ( hướng dẫn , hướng dẫn ) và bản ghi SPF đã có sẵn ( hướng dẫn ).

Về DKIM

DKIM là một Tiêu chuẩn Internet cho phép một cá nhân hoặc tổ chức kết hợp domain với một email. Trên thực tế, điều này đóng role như một phương pháp xác nhận trách nhiệm đối với một tin nhắn. Về cốt lõi, DKIM được hỗ trợ bởi mật mã không đối xứng. Đại lý chuyển thư (MTA) của người gửi ký mọi thư gửi đi bằng private key . Người nhận truy xuất public key từ bản ghi DNS của người gửi và xác minh xem nội dung thư và một số trường tiêu đề không bị thay đổi kể từ khi quá trình ký thư diễn ra.

Cài đặt OpenDKIM

Trước khi bắt đầu cài đặt, nên cập nhật hệ thống:

sudo apt-get update sudo apt-get dist-upgrade 

Cài đặt OpenDKIM và các phụ thuộc của nó:

sudo apt-get install opendkim opendkim-tools 

Các gói bổ sung sẽ được liệt kê dưới dạng các gói phụ thuộc, hãy nhập yes và nhấn Enter để tiếp tục.

Cấu hình OpenDKIM

Một vài file phải được tạo và chỉnh sửa để cấu hình OpenDKIM.

Nano sẽ được sử dụng làm editor vì nó được cài đặt theo mặc định trên server DigitalOcean và hoạt động đơn giản:

  • chuyển bằng các phím mũi tên
  • thoát mà không lưu thay đổi: nhấn CTRL + X rồi nhấn N
  • thoát và lưu các thay đổi: nhấn CTRL + X rồi nhấn Y , cuối cùng nhấn Enter

Quan trọng: thay thế mọi version của example.com bằng domain của bạn trong tất cả các lệnh và file cấu hình. Đừng quên lưu các file của bạn sau khi chỉnh sửa.

Hãy bắt đầu với file cấu hình chính:

sudo nano /etc/opendkim.conf 

Nối các dòng sau vào cuối file conf (mỗi tham số được giải thích bên dưới). Theo tùy chọn, bạn có thể chọn số cổng tùy chỉnh cho Socket . Đảm bảo rằng nó không bị ứng dụng khác sử dụng.

AutoRestart             Yes AutoRestartRate         10/1h UMask                   002 Syslog                  yes SyslogSuccess           Yes LogWhy                  Yes  Canonicalization        relaxed/simple  ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts InternalHosts           refile:/etc/opendkim/TrustedHosts KeyTable                refile:/etc/opendkim/KeyTable SigningTable            refile:/etc/opendkim/SigningTable  Mode                    sv PidFile                 /var/run/opendkim/opendkim.pid SignatureAlgorithm      rsa-sha256  UserID                  opendkim:opendkim  Socket                  inet:12301@localhost 
  • AutoRestart : tự động khởi động lại bộ lọc khi bị lỗi

  • AutoRestartRate : chỉ định tốc độ khởi động lại tối đa của bộ lọc, nếu quá trình khởi động lại bắt đầu xảy ra nhanh hơn tốc độ này, bộ lọc sẽ kết thúc; 10/1h - 10 lần khởi động lại / giờ

  • UMask : cung cấp tất cả các quyền truy cập cho group user được xác định bởi UserID và cho phép user khác đọc và thực thi file , trong trường hợp này, nó sẽ cho phép tạo và sửa đổi file Pid.

  • Syslog , SyslogSuccess , * LogWhy : các tham số này cho phép ghi log chi tiết thông qua các lệnh gọi đến log hệ thống

  • Quá trình chuẩn: xác định phương pháp chuẩn hoá sử dụng tại ký tin nhắn, simple phương pháp cho phép hầu như không thay đổi trong khi relaxed một Chịu nhỏ thay đổi như
    thay thế khoảng trắng; relaxed/simple - tiêu đề thư sẽ được xử lý với thuật toán relaxed và nội dung với thuật toán simple

  • ExternalIgnoreList : chỉ định các server bên ngoài có thể gửi thư qua server dưới dạng một trong các domain ký mà không cần thông tin xác thực

  • Server nội bộ : xác định danh sách server nội bộ có thư không nên được xác minh nhưng thay vào đó được ký

  • KeyTable : ánh xạ các tên khóa đến các khóa ký

  • SigningTable : liệt kê các chữ ký để áp dụng cho thư dựa trên địa chỉ được tìm thấy trong trường From: header

  • Chế độ : khai báo các chế độ hoạt động; trong trường hợp này, milter đóng role là ( s ) người ký và người xác minh ( v )

  • PidFile : đường dẫn đến file Pid chứa số nhận dạng quy trình

  • SignatureAlgorithm : chọn thuật toán ký để sử dụng khi tạo chữ ký

  • UserID : quá trình opendkim chạy dưới user và group này

  • Socket : milter sẽ lắng nghe trên socket được chỉ định ở đây, Posfix sẽ gửi tin nhắn tới opendkim để ký và xác minh thông qua socket này; 12301@localhost định nghĩa một socket TCP lắng nghe trên localhost , cổng 12301

Cấu hình đơn giản này nghĩa là cho phép ký thư cho một hoặc nhiều domain , để tìm hiểu về các tùy chọn khác, vui lòng truy cập vào đây .

Kết nối milter với Postfix:

sudo nano /etc/default/opendkim 

Thêm dòng sau, chỉ chỉnh sửa số cổng nếu sử dụng một cổng tùy chỉnh:

SOCKET="inet:12301@localhost" 

Cấu hình postfix để sử dụng milter này:

sudo nano /etc/postfix/main.cf 

Đảm bảo rằng hai dòng này có trong file cấu hình Postfix và không được comment :

milter_protocol = 2 milter_default_action = accept 

Có khả năng là một bộ lọc (SpamAssasin, Clamav, v.v.) đã được Postfix sử dụng; nếu các tham số sau có mặt, chỉ cần nối milter opendkim vào chúng (milter được phân tách bằng dấu phẩy), số cổng phải giống như trong opendkim.conf :

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301 non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301 

Nếu các tham số bị thiếu, hãy xác định chúng như sau:

smtpd_milters = inet:localhost:12301 non_smtpd_milters = inet:localhost:12301 

Tạo cấu trúc folder sẽ chứa các server tin cậy, bảng khóa, bảng ký và khóa tiền điện tử:

sudo mkdir /etc/opendkim sudo mkdir /etc/opendkim/keys 

Chỉ định server tin cậy :

sudo nano /etc/opendkim/TrustedHosts 

Ta sẽ sử dụng file này để xác định cả ExternalIgnoreListInternalHosts , các thông báo bắt nguồn từ các server , domain và địa chỉ IP này sẽ được tin cậy và ký.

Bởi vì file cấu hình chính của ta khai báo TrustedHosts là một file biểu thức chính quy ( refile ), ta có thể sử dụng trình duyệt ký tự đại diện, *.example.com nghĩa là các thư đến từ các domain phụ của example.com cũng sẽ được tin cậy, không chỉ các thư được gửi từ domain root .

Tùy chỉnh và thêm các dòng sau vào file mới tạo. Có thể chỉ định nhiều domain , không chỉnh sửa ba dòng đầu tiên:

127.0.0.1 localhost 192.168.0.1/24  *.example.com  #*.example.net #*.example.org 

Tạo một bảng khóa:

sudo nano /etc/opendkim/KeyTable 

Một bảng khóa chứa từng cặp bộ chọn / domain và đường dẫn đến private key của chúng. Bất kỳ chuỗi chữ và số nào cũng được dùng làm bộ chọn, trong ví dụ này, mail được sử dụng và không cần thiết phải thay đổi nó.

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private  #mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private #mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private 

Tạo bảng ký:

sudo nano /etc/opendkim/SigningTable 

Tệp này được sử dụng để khai báo domain / địa chỉ email và bộ chọn của chúng.

*@example.com mail._domainkey.example.com  #*@example.net mail._domainkey.example.net #*@example.org mail._domainkey.example.org 

Tạo public key và private key

Thay đổi folder khóa:

cd /etc/opendkim/keys 

Tạo một folder riêng cho domain để giữ các khóa:

sudo mkdir example.com cd example.com 

Tạo các khóa:

sudo opendkim-genkey -s mail -d example.com 

-s chỉ định bộ chọn và -d domain , lệnh này sẽ tạo hai file , mail.private là private key của ta và mail.txt chứa public key .

Thay đổi chủ sở hữu của private key thành opendkim :

sudo chown opendkim:opendkim mail.private 

Thêm public key vào bản ghi DNS của domain

Mở mail.txt :

sudo nano -$ mail.txt 

Khóa công khai được định nghĩa dưới tham số p . Không sử dụng khóa ví dụ bên dưới, nó chỉ là hình minh họa và sẽ không hoạt động trên server của bạn.

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for example.com 

Sao chép khóa đó và thêm bản ghi TXT vào các mục nhập DNS của domain của bạn:

Name: mail._domainkey.example.com.  Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" 

Xin lưu ý các thay đổi DNS có thể mất vài giờ để có hiệu lực.

Khởi động lại Postfix và OpenDKIM:

sudo service postfix restart sudo service opendkim restart 

Xin chúc mừng! Bạn đã cấu hình thành công DKIM cho server thư của bạn !

Cấu hình có thể được kiểm tra bằng cách gửi một email trống đến check-auth@verifier.port25.com và sẽ nhận được phản hồi. Nếu mọi thứ hoạt động chính xác, bạn sẽ thấy DKIM check: pass trong phần Summary of Results .

========================================================== Summary of Results ========================================================== SPF check:          pass DomainKeys check:   neutral DKIM check:         pass Sender-ID check:    pass SpamAssassin check: ham 

Ngoài ra, bạn có thể gửi thư đến địa chỉ Gmail mà bạn kiểm soát, xem tiêu đề của email đã nhận trong hộp thư đến Gmail của bạn, dkim=pass phải có trong trường tiêu đề Authentication-Results .

Authentication-Results: mx.google.com;        spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;        dkim=pass header.i=@example.com; 

<div class = “author”> Người gửi: P. Sebastian </a> </div>


Tags:

Các tin liên quan