कई डोमेन (वेबसाइटों) के लिए मेरे सर्वर में DKIM का उपयोग करना


22

मैंने उबंटू, पोस्टफिक्स और मेलमैन के लिए माउंटेनएक्स ( सेटअप डीकेआईएम (डोमेनकेय)) द्वारा पोस्ट किए गए ट्यूटोरियल को पढ़ा है , लेकिन मैं यह पता नहीं लगा सकता कि अगर मैं कई डोमेन के लिए ई-मेल होस्ट करना चाहता हूं तो इन चरणों को कैसे लागू किया जाए। क्या किसी के पास कोई सुराग है?

जवाबों:


30

अच्छा! मैंने इस प्रश्न में वर्णित पोस्ट से यह पता लगाया। मैंने स्वयं उत्तर और उसमें दिए गए लिंक के बीच एक तरह का मिश्रण बनाया। विशेष रूप से चौथा लिंक वह है जिसका मैंने उपयोग किया है।

तो बात कुछ इस तरह है। मान लीजिए कि आपको एक सर्वर या VPS मिल गया है और अपने एक डोमेन को मुख्य डोमेन बनाने के लिए और सर्वर नाम के रूप में इस्तेमाल किया जा सकता है (मेरे उदाहरण में: mydomain.com)।

इसलिए, सबसे पहले, हम चीजों को आसान बनाने के लिए रूट में बदल जाएंगे, लेकिन आप इस चरण को छोड़ सकते हैं और sudoहर कमांड से पहले उपयोग कर सकते हैं ।

sudo su

अब, हम OpenDKIM स्थापित करते हैं:

apt-get install opendkim opendkim-tools

चलो कॉन्फ़िगरेशन फ़ाइल को ठीक करें। हम /etc/opendkim.confसंपादन के लिए खोल रहे हैं । मैं नैनो का उपयोग करता हूं, लेकिन अन्य संपादक के साथ भी ऐसा ही है।

nano /etc/opendkim.conf

एक बार खोलने के बाद, इसे इस तरह दिखाइए। आप सहज महसूस करते हैं, तो आप कुछ विकल्पों को बदल सकते हैं, लेकिन Domain, KeyFileऔर Selectorटिप्पणी की रहना चाहिए।

# 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

अगला, हम कुछ फ़ोल्डर और फाइलें बनाते हैं जो OpenDKIM के उपयोग और प्रक्रिया के बारे में जानकारी प्रदान करेंगे। अभी के लिए, TrustedHostsफ़ाइल। हम इसे बनाते और संपादित करते हैं:

mkdir /etc/opendkim
nano /etc/opendkim/TrustedHosts

हमें इस फ़ाइल को विश्वसनीय पतों की सूची में रखना चाहिए: लोकलहोस्ट और 127.0.0.1, और आपके सर्वर का नाम और आईपी:

127.0.0.1
localhost
192.99.34.121
mydomain.com

अब हम OpenDKIM config फाइल को एडिट करते हैं।

nano /etc/default/opendkim

और फाइल के अंत में इन लाइनों को जोड़ें। वे OpenDKIM को बताएंगे कि किस पोर्ट से अनुरोधों पर हस्ताक्षर करने की उम्मीद करनी चाहिए:

SOCKET="inet:8891@localhost"

हम पोस्टफिक्स कॉन्फिग फाइल को ओपन करते हैं।

nano /etc/postfix/main.cf

और इन पंक्तियों को फ़ाइल के अंत में जोड़ें। वे पोस्टफिक्स को बताएंगे कि उसे हस्ताक्षर करने के लिए ई-मेल भेजना चाहिए और कहां।

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

यदि आप अभी डोमेन नहीं जोड़ रहे हैं, तो आप सब कुछ पुनः आरंभ कर सकते हैं, इसलिए कॉन्फ़िगरेशन प्रभावी होता है।

/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart

किया हुआ! सर्वर DKIM के साथ काम करने के लिए तैयार है। अब, आपको अपने डोमेन को इस सिस्टम में जोड़ने की आवश्यकता है। निम्नलिखित प्रक्रिया उन सभी डोमेन के लिए समान है जिन्हें आप जोड़ना चाहते हैं। मैं उदाहरण के लिए otherdomain.com का उपयोग करूंगा, इसे अपने साथ बदलें।

याद रखें कि मैं पहले से रूट था, लेकिन यदि आप नहीं हैं, sudo suतो कीवर्ड के साथ अपनी कमांड को चलाएं या पूर्ववर्ती करें sudo

sudo su

सबसे पहले, हम अपने डोमेन के लिए एक निर्देशिका बनाते हैं और उसके अंदर जाते हैं:

mkdir -p /etc/opendkim/keys/otherdomain.com
cd /etc/opendkim/keys/otherdomain.com

अब हम डोमेन के लिए एक कुंजी बनाते हैं:

opendkim-genkey -r -d otherdomain.com

हम नई बनाई गई फ़ाइल का OpenDKIM उपयोगकर्ता स्वामित्व देते हैं:

chown opendkim:opendkim default.private

और हम KeyTableअपने नए डोमेन के लिए अपनी नई कुंजी जोड़ने के लिए फ़ाइल खोलते हैं :

nano /etc/opendkim/KeyTable

हम इसे फ़ाइल के अंत में जोड़ते हैं (हमारे पास अन्य सभी डोमेन के बाद):

default._domainkey.otherdomain.com otherdomain.com:default:/etc/opendkim/keys/otherdomain.com/default.private

हम SigningTableफ़ाइल खोलते हैं ।

nano /etc/opendkim/SigningTable

और फ़ाइल के अंत में संलग्न करें (फिर, हमारे पास प्रत्येक डोमेन के लिए एक पंक्ति होगी):

otherdomain.com default._domainkey.otherdomain.com

यह साइनिंगटेबल उन सभी मेलों को सूचीबद्ध करता है जिन पर हस्ताक्षर किए जाते हैं। बस एक डोमेन नाम जोड़कर, उस डोमेन के सभी मेल पर हस्ताक्षर किए जाएंगे।

मुझे अगले चरण को करने की आवश्यकता पर यकीन नहीं है, लेकिन मैंने अभी किया, बस मामले में ... हम TrustedHostsफ़ाइल को खोलते हैं।

nano /etc/opendkim/TrustedHosts

और फ़ाइल के अंत में जोड़ें:

otherdomain.com

एक आखिरी चीज़: हम फ़ाइल की सामग्री दिखाते हैं /etc/opendkim/keys/otherdomain.com/default.txt

cat /etc/opendkim/keys/otherdomain.com/default.txt

और TXTडोमेन के DNS ज़ोन में उद्धरण के बीच की जानकारी को एक रिकॉर्ड में जोड़ें , और हमें default._domainkeyरिकॉर्ड के नाम के रूप में भी उपयोग करना चाहिए । नोट: "उद्धरण के बीच" वह पाठ है जो " v=DKIM1;k=rsa; p=WIGfM..." से शुरू होता है ।

यदि हम डोमेन जोड़ रहे हैं (अब तक), हम परिवर्तनों को लागू करने के लिए सब कुछ पुनः आरंभ करते हैं।

/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart

किया हुआ!


2
महान मार्गदर्शक, लेकिन मुझे एक गलती से बचने के लिए साइनिंगटेबल प्रविष्टियों से * @ को हटाना पड़ा। mail.log में 'user@example.com' के लिए कोई साइनिंग टेबल मैच नहीं, प्रति lists.opendkim.org/archive/opendyim/ उपयोगकर्ता / 2011/08 / 1332.html
dw1

1
इस गाइड के लिए धन्यवाद, मुझे dw1 जैसी ही समस्या थी लेकिन साइनिंगटेबल से * @ हटाने के बाद सब कुछ उम्मीद के मुताबिक काम किया। एक और बात यह है कि /etc/opendkim/TrustedHostsफ़ाइल में होस्ट का आईपी केवल एक बार वहां होना है, चाहे इस होस्ट के माध्यम से कितने डोमेन चलें। यदि आप कुछ अन्य चयनकर्ता का उपयोग करना चाहते defaultहैं, तो इसे सभी फाइलों में बदलना सुनिश्चित करें!
Flatron

सभी गाइड का पालन किया, लेकिन DKIM हस्ताक्षर नहीं जोड़ा जा रहा है ... मैं इसे कैसे डीबग कर सकता हूं?
the_nuts

1
इसके लिए धन्यवाद! मैं Ubuntu 16.x और opendkim 2.10.3 पर हूं ... मुझे साइनिंगटेबल *@में डोमेन नाम के आगे वाले हिस्से की आवश्यकता है ; जब तक मैंने इसे ठीक नहीं किया तब तक कुछ भी हस्ताक्षर नहीं किया गया था। cc: @the_nuts
पैट्रिक मूर

1
यदि फ़ाइल / etc / opendkim / KeyTable और / या / / / opendkim / SigningTable मौजूद नहीं हैं, तो सेवाओं का पहला पुनरारंभ सफल नहीं हो सकता है। बस उन्हें बनाने का उपयोग कर # touch /etc/opendkim/KeyTable # touch /etc/opendkim/SigningTable
क्रिस्टन Adojaan

4

यह स्क्रिप्ट "पूरा हो गया! सर्वर DKK के साथ काम करने के लिए तैयार है"

इस प्रक्रिया को स्वचालित करने में मदद के लिए मैंने इस बैश स्क्रिप्ट को बनाया। बस डोमेन = () सरणी के अंदर प्रति पंक्ति एक 'domain.com' जोड़ें।

यदि वे पहले से मौजूद नहीं हैं, तो पहले फाइलें और निर्देशिका बनाएं

/etc/opendkim/keys/
/etc/opendkim/KeyTable
/etc/opendkim/SigningTable
/etc/opendkim/TrustedHosts
/etc/opendkim/spfs.txt

spfs.txt फ़ाइल में वे सभी spf रिकॉर्ड होंगे जो आपको प्रत्येक डोमेन के लिए अपने DNS रिकॉर्ड में जोड़ने होंगे।

नोट: एक से अधिक बार न चलाएं, यह देखने के लिए जांच नहीं करता है कि क्या डोमेन पहले से मौजूद है। स्क्रिप्ट को रूट के रूप में भी चलाने की आवश्यकता है।

#!/bin/bash
domains=(
        'domain.com'
)
for domain in "${domains[@]}"
do
keydir="/etc/opendkim/keys/$domain"
if [ -d "$keydir" ]
then
cd $keydir
else
mkdir $keydir
cd $keydir
fi
opendkim-genkey -r -d $domain
chown opendkim:opendkim default.private
echo "default._domainkey.$domain $domain:default:$keydir/default.private" >> /etc/opendkim/KeyTable
echo "$domain default._domainkey.$domain" >> /etc/opendkim/SigningTable
echo "$domain" >> /etc/opendkim/TrustedHosts
echo "$(cat $keydir/default.txt)" >> spfs.txt
done

3

यह स्क्रिप्ट "पूरा हो गया! सर्वर DKK के साथ काम करने के लिए तैयार है"

इस प्रक्रिया को स्वचालित करने में मदद के लिए मैंने इस बैश स्क्रिप्ट को बनाया। बस डोमेन के अंदर प्रति पंक्ति 'example.com' जैसे एक डोमेन जोड़ें = () सरणी।

यह स्क्रिप्ट आपके लिए फाइलें बनाती है और जांच करती है कि क्या फाइल में कोई लाइन पहले से है

Spfs.txt को हर बार चलाने के बाद हटा दिया जाता है और दोबारा बनाया जाता है।

आपको अपने सर्वरों को प्रदान किए गए चर में ipv4 और ipv6 (यदि आपके पास हैं) रखना चाहिए। यह जाँचता है कि क्या वे खाली हैं

जोड़े गए चेक की बदौलत आप इस फाइल को कई बार चला सकते हैं।

#!/bin/bash
# List of domains
domains=( 
        'example.com'
)
# file paths and directories
dkim="/etc/opendkim"
keys="$dkim/keys"
keyfile="$dkim/KeyTable"
signfile="$dkim/SigningTable"
trustfile="$dkim/TrustedHosts"
spffile="$dkim/spfs.txt"
# Set Ipv6 and Ipv4 addresses for the server here
ipv4=""
ipv6=""
# loopback addresses for the server
loop=( localhost 127.0.0.1 )
function loopback {
        for back in "${loop[@]}"
        do
                if ! grep -q "$back" "$trustfile"; then
                        echo "$back" >> "$trustfile"
                fi
        done
}
# Check for files and create / write to them if they dont exist
if [ ! -d "$keys" ]; then
        mkdir "$keys"
fi
if [ ! -f "$keyfile" ]; then
        touch "$keyfile"
fi
if [ ! -f "$signfile" ]; then
        touch "$signfile"
fi
if [ ! -f "$trustfile" ]; then
        touch "$trustfile"
        loopback
else
        loopback
fi
if [ ! -f "$spffile" ]; then
        touch "$spffile"
else
        rm -rf "$spffile"
        touch "$spffile"
fi
if [ ! -z "$ipv6" ]; then
        if ! grep -q "$ipv6" "$trustfile"; then
                echo "$ipv6" >> "$trustfile"
        fi
fi
if [ ! -z "$ipv4" ]; then
        if ! grep -q "$ipv4" "$trustfile"; then
                echo "$ipv4" >> "$trustfile"
        fi
fi
# Generate keys and write the spfs records we need for each domain to one file
for domain in "${domains[@]}"
do
        keydir="$keys/$domain"
        default="$keydir/default.txt"
        if [ ! -d "$keydir" ]; then
                mkdir $keydir
        fi
        cd $keydir
        opendkim-genkey -r -d $domain
        chown opendkim:opendkim default.private
        key="default._domainkey.$domain $domain:default:$keydir/default.private"
        sign="$domain default._domainkey.$domain"
        trust="$domain"
        spf="$(cat $default)"
        # Check only the last line against the spf file as the first line is always the same
        spflast="$(tail -1 $default)"
        if ! grep -q "$key" "$keyfile"; then
                echo "$key" >> "$keyfile"
        fi
        if ! grep -q "$sign" "$signfile"; then
                echo "$sign" >> "$signfile"
        fi
        if ! grep -q "$trust" "$trustfile"; then
                echo "$trust" >> "$trustfile"
        fi
        if ! grep -q "$spflast" "$spffile"; then
                echo "$spf" >> "$spffile"
        fi
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.