একাধিক ডোমেন (ওয়েবসাইট) জন্য আমার সার্ভারে DKIM ব্যবহার করা


22

আমি উবুন্টু, পোস্টফিক্স এবং মেইলম্যানের জন্য মাউন্টেনএনএক্স ( সেটআপ ডি কেআইএম (ডোমেনকিস) পোস্ট টিউটোরিয়ালটি পড়েছি , তবে কয়েকটি ডোমেনের হোস্ট করতে এবং ইমেলগুলি প্রেরণ করতে চাইলে কীভাবে এই পদক্ষেপগুলি প্রয়োগ করতে হয় তা আমি বুঝতে পারি না। কারও কি কোনও ক্লু আছে?

উত্তর:


30

ভাল! আমি প্রশ্নের মধ্যে উল্লিখিত পোস্ট থেকে এটি সন্ধান। আমি নিজেই উত্তর এবং এটিতে সরবরাহিত লিঙ্কগুলির মধ্যে এক ধরণের মিশ্রণ তৈরি করেছি। বিশেষত চতুর্থ লিঙ্কটি আমি ব্যবহার করেছি।

জিনিসটি এভাবে চলে যায়। মনে করুন আপনি একটি সার্ভার বা ভিপিএস পেয়েছেন এবং আপনার ডোমেনগুলির একটিকে প্রধান ডোমেন হিসাবে তৈরি করুন এবং সার্ভারের নাম হিসাবে ব্যবহার করুন (আমার উদাহরণে: mydomain.com)।

সুতরাং, প্রথমত, আমরা জিনিসগুলিকে সহজ করার জন্য আমরা রুটে পরিবর্তন করব, তবে আপনি এই পদক্ষেপটি এড়িয়ে sudoপ্রতিটি আদেশের আগে ব্যবহার করতে পারেন ।

sudo su

এখন, আমরা ওপেনডিকেম ইনস্টল করব:

apt-get install opendkim opendkim-tools

কনফিগারেশন ফাইলটি ঠিক করি fix আমরা /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

এরপরে, আমরা কয়েকটি ফোল্ডার এবং ফাইল তৈরি করি যা ওপেনডিকেআইএম ব্যবহার এবং প্রক্রিয়া করা উচিত সে সম্পর্কে তথ্য ধারণ করবে। আপাতত, TrustedHostsফাইল। আমরা এটি তৈরি এবং সম্পাদনা করি:

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

আমাদের অবশ্যই এই ফাইলে বিশ্বস্ত ঠিকানাগুলির একটি তালিকা রাখতে হবে: লোকালহোস্ট এবং 127.0.0.1, এবং আপনার সার্ভারের নাম এবং আইপি:

127.0.0.1
localhost
192.99.34.121
mydomain.com

এখন আমরা ওপেনডিকেআইএম কনফিগারেশন ফাইলটি সম্পাদনা করি।

nano /etc/default/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

সম্পন্ন! সার্ভারটি ডিজিকেমের সাথে কাজ করার জন্য প্রস্তুত। এখন, আপনাকে এই সিস্টেমে আপনার ডোমেনগুলি যুক্ত করতে হবে। নীচের প্রক্রিয়াটি আপনি যে সমস্ত ডোমেন যুক্ত করতে চান তার জন্য একই। আমি উদাহরণ হিসাবে উদাহরণস্বরূপ 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

আমরা সদ্য নির্মিত ফাইলটির ওপেনডিকেম ব্যবহারকারীর মালিকানা দেব:

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ডোমেনের ডিএনএস জোনের একটি রেকর্ডে উদ্ধৃতিগুলির মধ্যে তথ্য যুক্ত করুন এবং আমাদের অবশ্যই default._domainkeyরেকর্ডের নাম হিসাবে ব্যবহার করতে হবে । দ্রষ্টব্য: "উদ্ধৃতিগুলির মধ্যে" " v=DKIM1;k=rsa; p=WIGfM..." দিয়ে শুরু হওয়া পাঠ্য ।

যদি আমরা এখনই ডোমেন যুক্ত করে ফেলেছি তবে পরিবর্তনগুলি প্রয়োগ করতে আমরা সবকিছু পুনরায় চালু করি।

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

সম্পন্ন!


2
দুর্দান্ত নির্দেশিকা, তবে আমাকে "@@mailample.com" এর জন্য মেইল.লগ-এ "ত্রুটি" কোনও 'সাইন ইন টেবিলের ম্যাচ মেলেনি "একটি ত্রুটি এড়াতে সাইনিং টেবিল এন্ট্রিগুলি থেকে @ @ সরিয়ে ফেলতে হয়েছিল। ব্যবহারকারী / 2011/08 / 1332.html
dw1

1
এই গাইডটির জন্য ধন্যবাদ, আমার dw1 এর মতো একই সমস্যা ছিল তবে সাইনিং টেবিল থেকে * @ অপসারণ করার পরে প্রত্যাশার মতো কাজ করেছিল। আরও একটি বিষয় হ'ল /etc/opendkim/TrustedHostsফাইলটিতে হোস্টের আইপি কেবল একবার সেখানে থাকতে হবে, এই হোস্টের মাধ্যমে কতগুলি ডোমেন চালানো যায় না। আপনি যদি অন্য কোনও নির্বাচক হিসাবে defaultএটি ব্যবহার করতে চান তবে এটি অবশ্যই সব ফাইলগুলিতে এটি পরিবর্তন করুন !
ফ্ল্যাটারন

সমস্ত গাইড অনুসরণ করেছে তবে ডিকেআইএম স্বাক্ষর যুক্ত হবে বলে মনে হচ্ছে না ... আমি কীভাবে এটি ডিবাগ করতে পারি?
the_nuts

1
এর জন্য ধন্যবাদ! আমি উবুন্টু 16.x এবং ওপেনডকিম ২.১০.৩ এ আছি ... সাইনিং টেবেলে আমার *@ডোমেন নামের আগে অংশটি দরকার ছিল; আমি এটি সংশোধন না করা পর্যন্ত কিছুই সই করা হয়নি। সিসি: @ এই_নিটস
প্যাট্রিক মুর

1
পরিষেবাগুলি পুনরায় আরম্ভ করা সফল না হতে পারে, যদি ফাইলগুলি / ইত্যাদি / ওপেনডাকিম / কী টেবল এবং / অথবা / ইত্যাদি / ওপেনডিম / সাইনিং টেবিল উপস্থিত না থাকে। খালি এগুলি ব্যবহার করে তৈরি করুন # touch /etc/opendkim/KeyTable # touch /etc/opendkim/SigningTable
ক্রিস্টজান অ্যাডোজান

4

এই স্ক্রিপ্টটি "সম্পন্ন হওয়ার পরে সার্ভারটি DKIM এর সাথে কাজ করতে প্রস্তুত" পরে অংশটি স্বয়ংক্রিয় করে দেয়

এই প্রক্রিয়াটিকে অটোমেট করতে সহায়তা করার জন্য আমি এই ব্যাশ স্ক্রিপ্টটি তৈরি করেছি। ডোমেনগুলি = () অ্যারের ভিতরে প্রতি লাইন প্রতি একটি 'ডোমেন ডটকম' যুক্ত করুন।

ফাইল এবং ডিরেক্টরিগুলি ইতিমধ্যে উপস্থিত না থাকলে প্রথমে তৈরি করুন

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

spfs.txt ফাইলটিতে প্রতিটি ডোমেনের জন্য আপনার ডিএনএস রেকর্ডগুলিতে আপনাকে যুক্ত করতে হবে এমন সমস্ত এসপিএফ রেকর্ড থাকবে।

দ্রষ্টব্য: একাধিকবার চলবেন না, এটি কোনও ডোমেন ইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করে না। স্ক্রিপ্টটিও রুট হিসাবে চালানো দরকার।

#!/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

এই স্ক্রিপ্টটি "সম্পন্ন হওয়ার পরে সার্ভারটি DKIM এর সাথে কাজ করতে প্রস্তুত" পরে অংশটি স্বয়ংক্রিয় করে দেয়

এই প্রক্রিয়াটিকে অটোমেট করতে সহায়তা করার জন্য আমি এই ব্যাশ স্ক্রিপ্টটি তৈরি করেছি। ডোমেনগুলি = () অ্যারের ভিতরে প্রতি লাইনে 'উদাহরণ.com' এর মতো একটি ডোমেন যুক্ত করুন।

এই স্ক্রিপ্টটি আপনার জন্য ফাইলগুলি তৈরি করে এবং ফাইলটিতে একটি লাইন ইতিমধ্যে রয়েছে কিনা তা পরীক্ষা করে

Spfs.txt প্রতিবার এটি চলার পরে সরানো হয় এবং পুনরায় তৈরি করা হয় এবং সংযোজনের আগে spfs.txt এর বিপরীতে ডিফল্ট 2txt এর দ্বিতীয় লাইন চেক করে

আপনাকে অবশ্যই আপনার সার্ভারগুলি আইপিভি 4 এবং আইপিভি 6 (যদি সেগুলি থাকে) প্রদত্ত ভেরিয়েবলগুলিতে স্থাপন করতে হবে। তারা খালি নয় কিনা তা এটি পরীক্ষা করে

যোগ করা চেকগুলির জন্য আপনি একাধিকবার এই ফাইলটি চালাতে পারেন।

#!/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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.