{"id":1135,"date":"2017-02-21T09:11:31","date_gmt":"2017-02-21T03:41:31","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=1135"},"modified":"2026-08-11T20:36:58","modified_gmt":"2026-08-11T15:06:58","slug":"dkim-setup-postfix-mailserver-centos-6-7","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/","title":{"rendered":"DKIM Setup on Postfix Mail Server Using OpenDKIM \u2013 CentOS 6\/7"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>Email deliverability is one of the major challenges when setting up a new mail server. Emails sent from an untrusted or unauthenticated mail server may be delivered to spam folders or rejected by popular email providers.<\/p>\n\n\n\n<p><strong>DomainKeys Identified Mail (DKIM)<\/strong> is an email authentication mechanism that allows an outgoing mail server to digitally sign emails. The receiving mail server can use the public key published in the sender&#8217;s DNS records to verify that the email was authorized by the sending domain and that the signed message has not been modified during transmission.<\/p>\n\n\n\n<p>In this guide, we will configure <strong>OpenDKIM<\/strong> as the DKIM signing service and integrate it with <strong>Postfix<\/strong>. OpenDKIM will digitally sign outgoing emails, while Postfix will pass the messages to OpenDKIM through a Milter interface.<\/p>\n\n\n\n<p>The guide covers:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Installing OpenDKIM<\/li>\n\n\n\n<li>Configuring OpenDKIM<\/li>\n\n\n\n<li>Generating DKIM keys<\/li>\n\n\n\n<li>Configuring KeyTable and SigningTable<\/li>\n\n\n\n<li>Configuring trusted hosts<\/li>\n\n\n\n<li>Publishing the DKIM public key in DNS<\/li>\n\n\n\n<li>Integrating OpenDKIM with Postfix<\/li>\n\n\n\n<li>Starting and enabling the services<\/li>\n\n\n\n<li>Verifying DKIM signatures<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p>Before starting the configuration, ensure the following requirements are available.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. CentOS Server<\/h3>\n\n\n\n<p>A CentOS 6 or CentOS 7 server with root or sudo access.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Postfix<\/h3>\n\n\n\n<p>Postfix must already be installed and configured as the mail transfer agent.<\/p>\n\n\n\n<p>Verify the installation:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">postconf mail_version\n<\/pre>\n\n\n\n<p>Check the Postfix service:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">service postfix status\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Domain Name<\/h3>\n\n\n\n<p>You should have a valid domain that will be used to send emails.<\/p>\n\n\n\n<p>For this example, we will use:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">domain.tld\n<\/pre>\n\n\n\n<p>Replace <code>domain.tld<\/code> with your actual domain throughout the configuration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. DNS Access<\/h3>\n\n\n\n<p>You must have access to the DNS management panel for the domain because the DKIM public key needs to be published as a TXT record.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. EPEL Repository<\/h3>\n\n\n\n<p>The EPEL repository should be enabled because OpenDKIM can be installed from EPEL on CentOS 6\/7.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. SMTP Connectivity<\/h3>\n\n\n\n<p>The server should have working outbound SMTP connectivity and Postfix should already be able to send emails.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Technical Implementation<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Install the EPEL Repository<\/h2>\n\n\n\n<p>First, enable the EPEL repository.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CentOS 6<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">wget http:\/\/download.fedoraproject.org\/pub\/epel\/6\/x86_64\/epel-release-6-8.noarch.rpm\nrpm -ivh epel-release-6-8.noarch.rpm\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">CentOS 7<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">wget https:\/\/dl.fedoraproject.org\/pub\/epel\/epel-release-latest-7.noarch.rpm\nrpm -ivh epel-release-latest-7.noarch.rpm\n<\/pre>\n\n\n\n<p>Alternatively:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">yum install epel-release\n<\/pre>\n\n\n\n<p>Verify the repository:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">yum repolist\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Install OpenDKIM<\/h2>\n\n\n\n<p>Install OpenDKIM and its required packages:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">yum install opendkim\n<\/pre>\n\n\n\n<p>Verify that OpenDKIM was installed:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">rpm -qa | grep opendkim\n<\/pre>\n\n\n\n<p>Check the installed binary:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">which opendkim\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configure OpenDKIM<\/h2>\n\n\n\n<p>Back up the existing configuration before making changes:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cp \/etc\/opendkim.conf \/etc\/opendkim.conf.bak\n<\/pre>\n\n\n\n<p>Open the configuration file:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vi \/etc\/opendkim.conf\n<\/pre>\n\n\n\n<p>Configure the required parameters:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">AutoRestart              Yes\nAutoRestartRate          10\/1h\nLogWhy                   Yes\nSyslog                   Yes\nSyslogSuccess            Yes\nMode                     sv\nCanonicalization         relaxed\/simple\nExternalIgnoreList       refile:\/etc\/opendkim\/TrustedHosts\nInternalHosts            refile:\/etc\/opendkim\/TrustedHosts\nKeyTable                 refile:\/etc\/opendkim\/KeyTable\nSigningTable             refile:\/etc\/opendkim\/SigningTable\nSignatureAlgorithm       rsa-sha256\nSocket                   inet:8892@localhost\nPidFile                  \/var\/run\/opendkim\/opendkim.pid\nUMask                    022\nUserID                   opendkim:opendkim\nTemporaryDirectory       \/var\/tmp\n<\/pre>\n\n\n\n<p>The important configuration files used by OpenDKIM are:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/etc\/opendkim.conf\n\/etc\/opendkim\/KeyTable\n\/etc\/opendkim\/SigningTable\n\/etc\/opendkim\/TrustedHosts\n<\/pre>\n\n\n\n<p>The Milter socket is configured to listen on:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">127.0.0.1:8892\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Generate DKIM Keys<\/h2>\n\n\n\n<p>Create a directory for the domain:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir -p \/etc\/opendkim\/keys\/domain.tld\n<\/pre>\n\n\n\n<p>Generate the DKIM key pair:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">opendkim-genkey -D \/etc\/opendkim\/keys\/domain.tld\/ -d domain.tld -s default\n<\/pre>\n\n\n\n<p>This will generate two files:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">default.private\ndefault.txt\n<\/pre>\n\n\n\n<p>The files contain:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>default.private<\/code> \u2014 Private DKIM key used by OpenDKIM to sign emails.<\/li>\n\n\n\n<li><code>default.txt<\/code> \u2014 Public DKIM key that must be published in DNS.<\/li>\n<\/ul>\n\n\n\n<p>Set the appropriate ownership:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">chown -R opendkim:opendkim \/etc\/opendkim\/keys\/domain.tld\n<\/pre>\n\n\n\n<p>Rename the private key to match the configuration:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mv \/etc\/opendkim\/keys\/domain.tld\/default.private \\\n   \/etc\/opendkim\/keys\/domain.tld\/default\n<\/pre>\n\n\n\n<p>Set secure permissions on the private key:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">chmod 600 \/etc\/opendkim\/keys\/domain.tld\/default\n<\/pre>\n\n\n\n<p>Verify:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ls -l \/etc\/opendkim\/keys\/domain.tld\/\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Configure KeyTable<\/h2>\n\n\n\n<p>Open the KeyTable:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vi \/etc\/opendkim\/KeyTable\n<\/pre>\n\n\n\n<p>Add:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">default._domainkey.domain.tld domain.tld:default:\/etc\/opendkim\/keys\/domain.tld\/default\n<\/pre>\n\n\n\n<p>The configuration follows this format:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">key_name domain:selector:key_file\n<\/pre>\n\n\n\n<p>Here:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>domain.tld<\/code> is the sending domain.<\/li>\n\n\n\n<li><code>default<\/code> is the DKIM selector.<\/li>\n\n\n\n<li><code>\/etc\/opendkim\/keys\/domain.tld\/default<\/code> is the private key.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Configure SigningTable<\/h2>\n\n\n\n<p>Open:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vi \/etc\/opendkim\/SigningTable\n<\/pre>\n\n\n\n<p>Add:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">*@domain.tld default._domainkey.domain.tld\n<\/pre>\n\n\n\n<p>The <code>*<\/code> means that emails sent from any address belonging to <code>domain.tld<\/code> will use the configured DKIM key.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">admin@domain.tld\nsupport@domain.tld\nsales@domain.tld\n<\/pre>\n\n\n\n<p>will all be signed using:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">default._domainkey.domain.tld\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Configure TrustedHosts<\/h2>\n\n\n\n<p>Open:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vi \/etc\/opendkim\/TrustedHosts\n<\/pre>\n\n\n\n<p>Add the mail server&#8217;s trusted hosts.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">127.0.0.1\nlocalhost\ndomain.tld\n<\/pre>\n\n\n\n<p>If required, the server&#8217;s IP address can also be included:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">192.0.2.10\n<\/pre>\n\n\n\n<p>Do not add arbitrary external IP addresses to this file. Only trusted systems that are authorized to submit mail through the DKIM signer should be included.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Configure DNS DKIM Record<\/h2>\n\n\n\n<p>The public DKIM key generated earlier can be viewed with:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cat \/etc\/opendkim\/keys\/domain.tld\/default.txt\n<\/pre>\n\n\n\n<p>You will see a record similar to:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">default._domainkey IN TXT (\n\"v=DKIM1; k=rsa; \"\n\"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...\"\n)\n<\/pre>\n\n\n\n<p>Create a DNS TXT record for:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">default._domainkey.domain.tld\n<\/pre>\n\n\n\n<p>with the generated public key as the value.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Type: TXT\nName: default._domainkey\nValue: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBg...\n<\/pre>\n\n\n\n<p>Do not copy the example key above. Always use the public key generated on your own server.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Important<\/h3>\n\n\n\n<p>The private key must <strong>never<\/strong> be published in DNS.<\/p>\n\n\n\n<p>Only the public key from <code>default.txt<\/code> should be added to DNS.<\/p>\n\n\n\n<p>DNS propagation time depends on the DNS provider and TTL. It may become available quickly, but cached records can take longer to update.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9: Verify the DNS Record<\/h2>\n\n\n\n<p>After adding the DNS record, verify it using:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">host -t txt default._domainkey.domain.tld\n<\/pre>\n\n\n\n<p>You can also use:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dig TXT default._domainkey.domain.tld\n<\/pre>\n\n\n\n<p>For a shorter output:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dig TXT default._domainkey.domain.tld +short\n<\/pre>\n\n\n\n<p>The response should contain something similar to:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBg...\"\n<\/pre>\n\n\n\n<p>If the TXT record is not returned, verify the DNS record name, value, and DNS provider configuration.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Configure Postfix<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Step 10: Integrate OpenDKIM with Postfix<\/h2>\n\n\n\n<p>Open the Postfix configuration:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vi \/etc\/postfix\/main.cf\n<\/pre>\n\n\n\n<p>Add the following:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">smtpd_milters = inet:127.0.0.1:8892\nnon_smtpd_milters = $smtpd_milters\nmilter_default_action = accept\nmilter_protocol = 2\n<\/pre>\n\n\n\n<p>The configuration tells Postfix to send mail through the OpenDKIM Milter service running on:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">127.0.0.1:8892\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Validate the Postfix configuration<\/h3>\n\n\n\n<p>Run:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">postfix check\n<\/pre>\n\n\n\n<p>You can also verify the configured Milter parameters:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">postconf | grep milter\n<\/pre>\n\n\n\n<p>Expected output should include:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">milter_default_action = accept\nmilter_protocol = 2\nnon_smtpd_milters = $smtpd_milters\nsmtpd_milters = inet:127.0.0.1:8892\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 11: Start and Enable OpenDKIM<\/h2>\n\n\n\n<p>Start OpenDKIM:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">service opendkim start\n<\/pre>\n\n\n\n<p>Enable it at boot:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">chkconfig opendkim on\n<\/pre>\n\n\n\n<p>Check the service:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">service opendkim status\n<\/pre>\n\n\n\n<p>Verify that OpenDKIM is listening on port <code>8892<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">netstat -lntp | grep 8892\n<\/pre>\n\n\n\n<p>Expected output should show OpenDKIM listening on localhost.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 12: Restart Postfix<\/h2>\n\n\n\n<p>Restart Postfix:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">service postfix restart\n<\/pre>\n\n\n\n<p>Check the status:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">service postfix status\n<\/pre>\n\n\n\n<p>If Postfix fails to start, check the configuration:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">postfix check\n<\/pre>\n\n\n\n<p>and review the mail logs.<\/p>\n\n\n\n<p>On CentOS systems, the Postfix mail log is commonly:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/var\/log\/maillog\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Verification<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Step 13: Check OpenDKIM Logs<\/h2>\n\n\n\n<p>Monitor the mail log:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">tail -f \/var\/log\/maillog\n<\/pre>\n\n\n\n<p>When an outgoing message is successfully signed, you should see an entry similar to:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">opendkim[5644]: 5FF7E161215: DKIM-Signature field added (s=default, d=domain.tld)\n<\/pre>\n\n\n\n<p>This confirms that OpenDKIM added a DKIM signature to the outgoing message.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 14: Verify the Email Headers<\/h2>\n\n\n\n<p>Send an email from:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">user@domain.tld\n<\/pre>\n\n\n\n<p>to an external mailbox such as Gmail.<\/p>\n\n\n\n<p>Open the received email and inspect the message headers.<\/p>\n\n\n\n<p>A successful authentication result may look similar to:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DKIM-Signature: v=1; a=rsa-sha256; d=domain.tld; s=default; ...\n<\/pre>\n\n\n\n<p>The receiving mail server may also show:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DKIM: PASS\n<\/pre>\n\n\n\n<p>The exact header format and authentication results depend on the receiving mail provider.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 15: Test Using an Email Authentication Verifier<\/h2>\n\n\n\n<p>You can also send an email to an email authentication testing service such as:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">check-auth@verifier.port25.com\n<\/pre>\n\n\n\n<p>The service can return authentication results for the submitted message, including DKIM, SPF, and other mail authentication information.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Configuring DKIM for Multiple Domains<\/h1>\n\n\n\n<p>If the same Postfix server sends emails for multiple domains, each domain can have its own DKIM key.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/etc\/opendkim\/keys\/domain1.tld\/\n\/etc\/opendkim\/keys\/domain2.tld\/\n\/etc\/opendkim\/keys\/domain3.tld\/\n<\/pre>\n\n\n\n<p>Each domain should have its own entry in the KeyTable:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">default._domainkey.domain1.tld domain1.tld:default:\/etc\/opendkim\/keys\/domain1.tld\/default\ndefault._domainkey.domain2.tld domain2.tld:default:\/etc\/opendkim\/keys\/domain2.tld\/default\ndefault._domainkey.domain3.tld domain3.tld:default:\/etc\/opendkim\/keys\/domain3.tld\/default\n<\/pre>\n\n\n\n<p>The SigningTable can then contain:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">*@domain1.tld default._domainkey.domain1.tld\n*@domain2.tld default._domainkey.domain2.tld\n*@domain3.tld default._domainkey.domain3.tld\n<\/pre>\n\n\n\n<p>Each domain must also have its corresponding DKIM public key published in DNS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Troubleshooting<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">OpenDKIM is not running<\/h2>\n\n\n\n<p>Check the service:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">service opendkim status\n<\/pre>\n\n\n\n<p>Check the logs:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">tail -100 \/var\/log\/maillog\n<\/pre>\n\n\n\n<p>Check whether port <code>8892<\/code> is listening:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">netstat -lntp | grep 8892\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Postfix cannot connect to OpenDKIM<\/h2>\n\n\n\n<p>Verify the Postfix configuration:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">postconf | grep milter\n<\/pre>\n\n\n\n<p>Verify OpenDKIM is listening:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">netstat -lntp | grep 8892\n<\/pre>\n\n\n\n<p>Make sure both configurations use the same address and port:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Postfix:\ninet:127.0.0.1:8892\n\nOpenDKIM:\ninet:8892@localhost\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">DKIM signature is not being added<\/h2>\n\n\n\n<p>Check the OpenDKIM logs:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">grep -i opendkim \/var\/log\/maillog\n<\/pre>\n\n\n\n<p>Verify:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/etc\/opendkim\/KeyTable\n\/etc\/opendkim\/SigningTable\n\/etc\/opendkim\/TrustedHosts\n<\/pre>\n\n\n\n<p>Also verify the private key permissions:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ls -l \/etc\/opendkim\/keys\/domain.tld\/default\n<\/pre>\n\n\n\n<p>The key should be readable by the <code>opendkim<\/code> user.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">DNS DKIM record is not found<\/h2>\n\n\n\n<p>Run:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dig TXT default._domainkey.domain.tld +short\n<\/pre>\n\n\n\n<p>If there is no response:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Verify the DNS record name.<\/li>\n\n\n\n<li>Verify the TXT record value.<\/li>\n\n\n\n<li>Confirm that the DNS change was saved.<\/li>\n\n\n\n<li>Check the DNS provider&#8217;s propagation status.<\/li>\n\n\n\n<li>Confirm that the selector is <code>default<\/code>.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Security Recommendations<\/h1>\n\n\n\n<p>The DKIM private key is highly sensitive and must be protected.<\/p>\n\n\n\n<p>Recommended permissions:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">chown opendkim:opendkim \/etc\/opendkim\/keys\/domain.tld\/default\nchmod 600 \/etc\/opendkim\/keys\/domain.tld\/default\n<\/pre>\n\n\n\n<p>Do not:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Publish the private key in DNS.<\/li>\n\n\n\n<li>Share the private key with external users.<\/li>\n\n\n\n<li>Store the private key in publicly accessible directories.<\/li>\n\n\n\n<li>Commit the private key to Git repositories.<\/li>\n\n\n\n<li>Expose the OpenDKIM Milter port publicly.<\/li>\n<\/ul>\n\n\n\n<p>Since the Milter is configured to listen on localhost, it should not normally be exposed to external networks.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p>Configuring DKIM with OpenDKIM and Postfix adds an important layer of authentication to outgoing email. OpenDKIM generates a cryptographic signature using the private DKIM key, while receiving mail servers use the corresponding public key published in DNS to verify the signature.<\/p>\n\n\n\n<p>The complete process consists of installing OpenDKIM, generating a domain-specific key pair, configuring the KeyTable and SigningTable, defining trusted hosts, publishing the public key in DNS, and integrating OpenDKIM with Postfix through the Milter interface.<\/p>\n\n\n\n<p>After completing the configuration, always verify the setup using the mail server logs and the headers of a received email. A successful configuration should show a valid <code>DKIM-Signature<\/code> and, on the receiving server, a <strong>DKIM PASS<\/strong> result.<\/p>\n\n\n\n<p>DKIM should also be used together with <strong>SPF<\/strong> and <strong>DMARC<\/strong> to provide a more complete email authentication and anti-spoofing strategy.<\/p>\n\n\n\n<p>With Postfix, OpenDKIM, DNS, SPF, and DMARC correctly configured, organizations can improve the authenticity, security, and deliverability of their outgoing emails.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Email deliverability is one of the major challenges when setting up a new mail server. Emails sent from an untrusted or unauthenticated mail server may be delivered to spam folders or rejected by popular email providers. DomainKeys Identified Mail (DKIM) is an email authentication mechanism that allows an outgoing&hellip; <a href=\"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/\" class=\"more-link read-more\" rel=\"bookmark\">Continue Reading <span class=\"screen-reader-text\">DKIM Setup on Postfix Mail Server Using OpenDKIM \u2013 CentOS 6\/7<\/span><i class=\"fa fa-arrow-right\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[284,285],"tags":[161,286,171],"class_list":{"0":"post-1135","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"hentry","6":"category-centos","7":"category-postfix","8":"tag-centos","9":"tag-opendkim","10":"tag-postfix","11":"h-entry","13":"h-as-article"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pheonix Solutions - We Empower Your Business Growth<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pheonix Solutions - We Empower Your Business Growth\" \/>\n<meta property=\"og:description\" content=\"Introduction Email deliverability is one of the major challenges when setting up a new mail server. Emails sent from an untrusted or unauthenticated mail server may be delivered to spam folders or rejected by popular email providers. DomainKeys Identified Mail (DKIM) is an email authentication mechanism that allows an outgoing&hellip; Continue Reading DKIM Setup on Postfix Mail Server Using OpenDKIM \u2013 CentOS 6\/7\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/\" \/>\n<meta property=\"og:site_name\" content=\"PHEONIXSOLUTIONS\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/PheonixSolutions-209942982759387\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-21T03:41:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-11T15:06:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2016\/09\/PX2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"3837\" \/>\n\t<meta property=\"og:image:height\" content=\"2540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@pheonixsolution\" \/>\n<meta name=\"twitter:site\" content=\"@pheonixsolution\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/0ffa33d73c869faec2d50e79c24e3503\"},\"headline\":\"DKIM Setup on Postfix Mail Server Using OpenDKIM \u2013 CentOS 6\\\/7\",\"datePublished\":\"2017-02-21T03:41:31+00:00\",\"dateModified\":\"2026-08-11T15:06:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/\"},\"wordCount\":1299,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#organization\"},\"keywords\":[\"centOS\",\"opendkim\",\"Postfix\"],\"articleSection\":[\"Centos\",\"Postfix\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/\",\"url\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/\",\"name\":\"Pheonix Solutions - We Empower Your Business Growth\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#website\"},\"datePublished\":\"2017-02-21T03:41:31+00:00\",\"dateModified\":\"2026-08-11T15:06:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/dkim-setup-postfix-mailserver-centos-6-7\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DKIM Setup on Postfix Mail Server Using OpenDKIM \u2013 CentOS 6\\\/7\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/\",\"name\":\"Pheonix Solutions\",\"description\":\"We Empower Your Business Growth\",\"publisher\":{\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#organization\",\"name\":\"PheonixSolutions\",\"url\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/logo.png\",\"contentUrl\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/logo.png\",\"width\":454,\"height\":300,\"caption\":\"PheonixSolutions\"},\"image\":{\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/PheonixSolutions-209942982759387\\\/\",\"https:\\\/\\\/x.com\\\/pheonixsolution\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/0ffa33d73c869faec2d50e79c24e3503\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09bacc0294abee1322a23ab4bc6a0330dd4cb4df707dc9d0b0efeba6c109608b?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09bacc0294abee1322a23ab4bc6a0330dd4cb4df707dc9d0b0efeba6c109608b?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09bacc0294abee1322a23ab4bc6a0330dd4cb4df707dc9d0b0efeba6c109608b?s=96&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"http:\\\/\\\/pheonixsolutions.com\\\/blog\"],\"url\":\"https:\\\/\\\/pheonixsolutions.com\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pheonix Solutions - We Empower Your Business Growth","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/","og_locale":"en_US","og_type":"article","og_title":"Pheonix Solutions - We Empower Your Business Growth","og_description":"Introduction Email deliverability is one of the major challenges when setting up a new mail server. Emails sent from an untrusted or unauthenticated mail server may be delivered to spam folders or rejected by popular email providers. DomainKeys Identified Mail (DKIM) is an email authentication mechanism that allows an outgoing&hellip; Continue Reading DKIM Setup on Postfix Mail Server Using OpenDKIM \u2013 CentOS 6\/7","og_url":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/","og_site_name":"PHEONIXSOLUTIONS","article_publisher":"https:\/\/www.facebook.com\/PheonixSolutions-209942982759387\/","article_published_time":"2017-02-21T03:41:31+00:00","article_modified_time":"2026-08-11T15:06:58+00:00","og_image":[{"width":3837,"height":2540,"url":"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2016\/09\/PX2.png","type":"image\/png"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@pheonixsolution","twitter_site":"@pheonixsolution","twitter_misc":{"Written by":"admin","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/#article","isPartOf":{"@id":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/"},"author":{"name":"admin","@id":"https:\/\/pheonixsolutions.com\/blog\/#\/schema\/person\/0ffa33d73c869faec2d50e79c24e3503"},"headline":"DKIM Setup on Postfix Mail Server Using OpenDKIM \u2013 CentOS 6\/7","datePublished":"2017-02-21T03:41:31+00:00","dateModified":"2026-08-11T15:06:58+00:00","mainEntityOfPage":{"@id":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/"},"wordCount":1299,"commentCount":0,"publisher":{"@id":"https:\/\/pheonixsolutions.com\/blog\/#organization"},"keywords":["centOS","opendkim","Postfix"],"articleSection":["Centos","Postfix"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/","url":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/","name":"Pheonix Solutions - We Empower Your Business Growth","isPartOf":{"@id":"https:\/\/pheonixsolutions.com\/blog\/#website"},"datePublished":"2017-02-21T03:41:31+00:00","dateModified":"2026-08-11T15:06:58+00:00","breadcrumb":{"@id":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/pheonixsolutions.com\/blog\/dkim-setup-postfix-mailserver-centos-6-7\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/pheonixsolutions.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DKIM Setup on Postfix Mail Server Using OpenDKIM \u2013 CentOS 6\/7"}]},{"@type":"WebSite","@id":"https:\/\/pheonixsolutions.com\/blog\/#website","url":"https:\/\/pheonixsolutions.com\/blog\/","name":"Pheonix Solutions","description":"We Empower Your Business Growth","publisher":{"@id":"https:\/\/pheonixsolutions.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pheonixsolutions.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/pheonixsolutions.com\/blog\/#organization","name":"PheonixSolutions","url":"https:\/\/pheonixsolutions.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/pheonixsolutions.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2016\/12\/logo.png","contentUrl":"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2016\/12\/logo.png","width":454,"height":300,"caption":"PheonixSolutions"},"image":{"@id":"https:\/\/pheonixsolutions.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/PheonixSolutions-209942982759387\/","https:\/\/x.com\/pheonixsolution"]},{"@type":"Person","@id":"https:\/\/pheonixsolutions.com\/blog\/#\/schema\/person\/0ffa33d73c869faec2d50e79c24e3503","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/09bacc0294abee1322a23ab4bc6a0330dd4cb4df707dc9d0b0efeba6c109608b?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09bacc0294abee1322a23ab4bc6a0330dd4cb4df707dc9d0b0efeba6c109608b?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09bacc0294abee1322a23ab4bc6a0330dd4cb4df707dc9d0b0efeba6c109608b?s=96&r=g","caption":"admin"},"sameAs":["http:\/\/pheonixsolutions.com\/blog"],"url":"https:\/\/pheonixsolutions.com\/blog\/author\/admin\/"}]}},"jetpack_shortlink":"https:\/\/wp.me\/p7F4uM-ij","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=1135"}],"version-history":[{"count":1,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1135\/revisions"}],"predecessor-version":[{"id":10776,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1135\/revisions\/10776"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=1135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=1135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=1135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}