openDKIM và Postfix trên Ubuntu Server 12.04LTS
Tôi sẽ cố gắng quay lại và định dạng này tốt hơn. Nhưng vì có một yêu cầu để gửi câu trả lời của tôi, tôi muốn đăng nó ngay bây giờ thay vì đợi cho đến khi tôi có thời gian để định dạng nó đúng. Do không có thời gian, tôi đã gói toàn bộ câu trả lời của mình trong một blockquote. Tôi hy vọng giải pháp này hữu ích.
Đây là những tài liệu tham khảo của tôi:
và Wikipedia có một mục tốt về chủ đề này
Tối thiểu bạn sẽ cần:
- Quyền truy cập root vào máy chủ thư của bạn
- Truy cập để cập nhật các bản ghi dns cho tên miền của bạn
Cài đặt opendkim từ kho lưu trữ:
# sudo apt-get install opendkim opendkim-tools
Bạn phải quyết định lựa chọn những gì mà bạn muốn sử dụng. Bộ chọn về cơ bản là một từ để mô tả khóa bạn muốn sử dụng. Ở đây tôi sẽ sử dụng bộ chọn 201205 khi khóa trở nên hợp lệ vào tháng 5 năm 2012 (xảo quyệt nhỉ?). Tôi đưa ra hai ví dụ cho sự đa dạng, hy vọng sẽ thêm rõ ràng. Bạn chỉ cần tạo MỘT khóa. Tuy nhiên, tôi đang đưa ra cả hai ví dụ để bạn có thể so sánh chúng.
- 201205 (khóa 1)
- my_selector (khóa 2)
Tên miền của tôi sẽ là example.com
, nhưng tôi sẽ sử dụng tên miền phụ cho ví dụ thứ hai của mình:
- example.com (khóa 1)
- mail.example.com (khóa 2)
Tôi quyết định làm việc trong thư mục sau:
# mkdir /etc/opendkim/
# cd /etc/opendkim
Tạo các khóa trong thư mục hiện tại, sử dụng bộ chọn và miền đã chọn của bạn.
# opendkim-genkey -s 201205 -d example.com
Bạn có thể hoặc không cần thay đổi quyền sở hữu. Xem chi tiết trong ví dụ của tôi cho khóa thứ 2 bên dưới để biết quyền sở hữu và quyền nên là gì.
Trước tiên, bạn nên kiểm tra xem có opendkim
người dùng không (ID người dùng / nhóm của bạn có thể khác nhau):
# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false
Và bạn có thể cần phải làm điều này:
# chmod 700 /var/run/opendkim
LƯU Ý: Hai lệnh tiếp theo này KHÔNG cần thiết trên Ubuntu 12.04. Nhưng nếu lệnh trên không cho thấy rằng người dùng opendkim đã được thiết lập đúng cách, hãy thực hiện tương tự như sau:
# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private
# cat 201205.private
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----
Bây giờ hãy kiểm tra khóa chung và nhận thấy có lỗi (trong openDKIM 2.5.2 trên Ubuntu 12.04)! Nơi nào chứa ;=rsa;
, nó nên chứa ;k=rsa;
. Cái k
còn thiếu Vui lòng chèn nó.
# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com
Sau khi được sửa, nó sẽ trông như thế này:
201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com
Hơn nữa, có lẽ bạn cần phải thoát khỏi dấu chấm phẩy như thế này. Nếu bạn không muốn bình luận kết thúc, chỉ cần xóa nó. Cũng lưu ý rằng bạn nên thêm cờ t = y để chỉ báo cho các máy chủ nhận được rằng bạn đang kiểm tra DKIM nhưng chưa tích cực sử dụng nó. Bạn còn lại với một bản ghi tài nguyên khả thi:
201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"
Bạn phải xuất bản nội dung của khóa công khai ở trên lên máy chủ DNS có thẩm quyền của bạn. Tôi khuyên bạn nên sử dụng bản ghi TXT. Dường như có một chút tranh cãi về việc nên sử dụng bản ghi SPF hay cả hai loại. Sau khi đọc một chút, tôi đã chọn độc quyền gắn bó với loại hồ sơ TXT, mặc dù tôi không tin đây là từ cuối cùng về chủ đề này.
Bạn nên sử dụng một thời gian ngắn (thời gian để sống) để bạn có thể thay đổi khóa mà không cần đợi tuổi để nó truyền qua DNS. Tôi đã sử dụng 180 giây.
Ví dụ thứ hai về việc tạo một cặp khóa là khó khăn hơn đối với tôi. Tôi sẽ mô tả những gì tôi đã làm. Yếu tố đầu tiên là tôi đã sử dụng giá trị tên miền "example.com" mặc dù khóa sẽ được sử dụng cho "mail.example.com". Tôi đến đây thông qua thử nghiệm và lỗi. Nó hoạt động, trong khi sử dụng "mail.example.com" không hoạt động. Thật không may, tôi không nhận thức được lý do đằng sau điều này. Đây thực sự là sự khác biệt duy nhất tôi gặp phải, nhưng nó đủ rắc rối đến nỗi tôi cảm thấy mình nên ghi lại những trải nghiệm của mình khi sử dụng tên miền phụ. Không có hướng dẫn cấp độ bắt đầu nào khác mà tôi tìm thấy đã làm điều này. Tạo khóa thứ hai:
opendkim-genkey -s my_selector -d example.com
kiểm tra quyền sở hữu và quyền của khóa riêng, như trên. Đây là những gì họ nên trông giống như:
# ls -la /etc/opendkim
-rw------- 1 opendkim opendkim 891 May 10 07:44 my_selector.private
Sau khi xuất bản bản ghi DNS, hãy kiểm tra nó với dig
. Nó sẽ trả về chính xác những gì bạn đã nhập trong bản ghi tài nguyên (RR).
$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"
Bây giờ, kiểm tra chìa khóa. Các lệnh bên dưới giả sử bạn đang ở trong thư mục chứa khóa (/ etc / opendkim cho tôi).
# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK
Những kết quả này được mong đợi. "Khóa không an toàn" không biểu thị lỗi. Đó là một hậu quả mong đợi của việc không sử dụng DNSSSEC. DNSSEC đang đến, nhưng nó chưa sẵn sàng cho thời gian chính, theo cách đọc của tôi.
Ví dụ với khóa 2:
# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK
Lưu ý rằng opendkim đang báo cáo rằng khóa không an toàn. Điều này liên quan đến thực tế là DNSSEC không được triển khai trên máy chủ DNS của tôi và về mặt lý thuyết ai đó có thể chặn việc tra cứu DNS và thay thế nó bằng khóa riêng của họ.
Chỉnh sửa tệp cấu hình OpenDKIM:
# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain example.com
KeyFile /etc/opendkim/201205.private
Selector 201205
#
# Commonly-used options
Canonicalization relaxed/simple
Mode sv
SubDomains yes
# Log to syslog
Syslog yes
LogWhy yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask 022
UserID opendkim:opendkim
#
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
#
Socket inet:8891@localhost
#EOF
Nếu bạn đang sử dụng ví dụ khóa thứ 2 của tôi, với tên miền được nhắm mục tiêu, mail.example.com, mục nhập vẫn sẽ chỉ tham chiếu tên miền chính:
Domain example.com
KeyFile /etc/dkim/my_selector.private
Selector my_selector
-----
Lưu ý từ một trong các nguồn của tôi: Nếu bạn chạy nhiều phiên bản Postfix, bạn cần thêm điều này vào opendkim.conf cho mỗi phiên bản (hoặc những trường hợp bạn muốn sử dụng opendkim)
Tạo một tệp với trình soạn thảo văn bản của bạn /etc/opendkim/TrustedHosts
:
Thêm tên miền, tên máy chủ và / hoặc ip cần được xử lý bởi OpenDKIM. Đừng quên localhost.
127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)
(dòng cuối cùng ở trên có lẽ sẽ không cần thiết. Nếu bạn có địa chỉ IP để thêm, hãy đảm bảo bạn sử dụng địa chỉ của riêng bạn chứ không phải ví dụ ở trên.)
Chỉnh sửa /etc/default/opendkim
:
Bỏ ghi chú hàng này và sử dụng cổng 8891:
SOCKET="inet:8891@localhost" # listen on loopback on port
Đảm bảo tường lửa của bạn (iptables) cho phép loopback trên localhost:
sudo iptables -A INPUT -i lo -j ACCEPT
Tiếp theo, Tạo tệp bằng trình soạn thảo văn bản của bạn /etc/opendkim/KeyTable
và thêm tên miền vào KeyTable
Thêm dòng:
#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private
Tiếp theo Tạo tệp bằng trình soạn thảo văn bản của bạn /etc/opendkim/SigningTable
và thêm tên miền vào SigningTable
Tôi cho thấy cả hai ví dụ. Lưu ý rằng đối với khóa thứ 2 của tôi, bây giờ tôi phải sử dụng tên miền đầy đủ "mail.example.com":
example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com
Lưu ý rằng trong tên miền OpenDKIM 2.0.1 có phân biệt chữ hoa chữ thường. Trong ví dụ này, chúng tôi đang sử dụng phiên bản OpenDKIM mới hơn và điều này dường như không phải là vấn đề.
Cấu hình postfix. Chỉnh sửa /etc/postfix/main.cf và thêm các dòng vào cuối
milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891
Đồng thời thay đổi tên máy chủ:
#myhostname = localhost #original
myhostname = mail.example.com
Bạn cũng nên thay đổi mục tương ứng trong / etc / hosts. Những thay đổi này có hiệu lực sau khi khởi động lại (mặc dù bạn có thể đặt nó ngay lập tức bằng lệnh hostname NEW_NAME
:).
Khởi động lại postfix và opendkim nếu bạn không khởi động lại:
# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
* Stopping Postfix Mail Transport Agent postfix [ OK ]
* Starting Postfix Mail Transport Agent postfix [ OK ]
Kiểm tra
Cách tốt nhất để kiểm tra xem thư đã ký của bạn có được xác thực hay không và các bản ghi DNS của bạn được thiết lập đúng là sử dụng một trong các dịch vụ kiểm tra miễn phí. Tôi đã sử dụng những:
- Trình xác thực email Brandon Checketts - http://www.brandonchecketts.com/emailtest.php (yêu thích của tôi)
- Gửi email đã ký đến: check-auth@verifier.port25.com (cũng yêu thích của tôi)
Gửi email đã ký đến: sa-test@sendmail.net (bạn có thể đặt tất cả các địa chỉ email kiểm tra vào trường Đến: của một tin nhắn gửi đi để kiểm tra)
Gửi email đã ký đến: autorespond+dkim@dk.elandsys.com <--- MÔI GIỚI !!! Đừng dùng cái này.
Mỗi trong số này sẽ cho bạn biết nếu mọi thứ đang hoạt động đúng, và cung cấp cho bạn một số gợi ý về khắc phục sự cố nếu cần.
Nếu bạn có tài khoản Gmail, bạn cũng có thể gửi tin nhắn đã ký ở đó để kiểm tra nhanh chóng và dễ dàng.
Khi bạn hài lòng rằng tất cả đều ổn, bạn có thể xóa cờ kiểm tra trong bản ghi DNS TXT và tăng TTL.
Làm xong!