{"id":10,"date":"2015-11-15T13:29:59","date_gmt":"2015-11-15T21:29:59","guid":{"rendered":"https:\/\/cloudinsidr.com\/content\/?p=10"},"modified":"2016-08-27T13:42:51","modified_gmt":"2016-08-27T21:42:51","slug":"anti-spam-defense-in-postfix","status":"publish","type":"post","link":"https:\/\/www.cloudinsidr.com\/content\/anti-spam-defense-in-postfix\/","title":{"rendered":"Anti-Spam Defense: Using Postfix With smtpd Access Restrictions"},"content":{"rendered":"<p>Fighting spam, aren&#8217;t we all&#8230; To stem the tide of unwanted junk mail look no further than the built-in access restrictions in <a href=\"http:\/\/www.postfix.org\/\" target=\"_blank\">Postfix<\/a>.<\/p>\n<p><!--more--><\/p>\n<p>If you find yourself the postmaster-in-chief, the last think you want is having to rely on your users to weed through spam and navigate around phishing mails without fail. In fact, spam is a major source of security breaches that involve using social engineering to allow hackers to get a foot in the door.<\/p>\n<h4>Why mail services fail at filtering spam (some even fail miserably)<\/h4>\n<p>Unsolicited mail is a problem that every organization must fix for itself, one way or the other. Even those of us who are paying for an enterprise-class spam detection service aren&#8217;t always happy with the results. The same goes for anti-spam services that set honeybee traps all over the Internet to collect junk trying to come up with effective filters. Your mileage will vary in either case. Are their traps attracting the same spammers that are flooding your users&#8217; inboxes? Judging upon the efficiency of software tools and anti-spam services in real-world scenarios, the answer is: not so much. On top of it, mail services such as Gmail for Business or AWS Workmail have to tailor their services to all of their customers&#8217; industries, including such spam hotspots as car insurance, home improvement, and health care. Good luck with that.<\/p>\n<p>So how do you go about fixing the problem in your organization when you find yourself in charge of it? You could set up spam filtering software that uses heuristics such as Apache Spam Assassin, but it will come at the cost of a performance penalty\u00a0and with somewhat questionable benefits of\u00a0ongoing maintenance.<\/p>\n<p>Postfix supports Sendmail version 8 Milter protocol and thus Sendmail milters (mail filters). Milter.org, once the world&#8217;s most comprehensive catalog of Milters, has been shut down some time ago, and <a href=\"http:\/\/www.sendmail.com\/\" target=\"_blank\">Sendmail, Inc. is now Proofpoint, Inc,<\/a> following an acquisition. \u00a0Proofpoint Inc. continues to provide\u00a0milters in its <a href=\"http:\/\/www.sendmail.com\/sm\/open_source\/download\/\" target=\"_blank\">standard open source distribution of Sendmail<\/a>. Milters can be used to\u00a0fight spam, scan attachments for viruses, and sign messages. Even so, the future of milters is anything but\u00a0clear.\u00a0Unless you wanted to implement Sendmail milters in Postfix, your best bet when trying\u00a0to stem the flood of spam is using Postfix&#8217; built-in functionality: smtpd\u00a0restrictions, header and body checks, and external rbl\/rhsbl databases. These tools are more than adequate for most use case scenarios. Your other option is using the likes of Spam Assassin.<\/p>\n<p>To a degree, you could also\u00a0rely on the built-in access restrictions in the mail client\u00a0of your users&#8217; choice. To that end, you can extract email addresses of known spammers from your mail clients&#8217; log files or from discarded junk mail, then use them to build rules for handling incoming messages.<\/p>\n<p>Here is how to do it in Postfix.<\/p>\n<h2>A multi-step approach to spam filtering<\/h2>\n<p>Postfix allows you to implement multi-layered spam filtering: during the connection negotiation with SMTP clients using smtpd\u00a0restrictions, then when accepting incoming mail by scanning the\u00a0headers and the body of each message for clues. Postfix provides the following functionlity right off the bat:<\/p>\n<ul>\n<li>smtpd access\u00a0restrictions are defined\u00a0using Postfix\u00a0access maps; they come into play during the exchange between the SMTP server (your host) and the SMTP client that&#8217;s sending an incoming message to it:\n<ul>\n<li><strong><a href=\"http:\/\/www.postfix.org\/postconf.5.html#smtpd_client_restrictions\" target=\"_blank\">smtpd client access restrictions<\/a><\/strong> block the SMTP client based on its host name or IP address<\/li>\n<li><strong><a href=\"http:\/\/www.postfix.org\/postconf.5.html#smtpd_helo_restrictions\" target=\"_blank\">smtpd HELO access restrictions<\/a><\/strong> block malformed or inappropriate HELO (this method is not recommended in light of the widespread misconfiguration of legitimate SMTP\u00a0clients)<\/li>\n<li><strong><a href=\"http:\/\/www.postfix.org\/postconf.5.html#smtpd_sender_restrictions\" target=\"_blank\">smtpd sender restrictions<\/a>\u00a0<\/strong>block sender&#8217;s address (MAIL FROM)<\/li>\n<li><strong><a href=\"http:\/\/www.postfix.org\/postconf.5.html#smtpd_recipient_restrictions\" target=\"_blank\">smtpd recipient restrictions<\/a>\u00a0<\/strong>block recipient (RCPT TO)<\/li>\n<\/ul>\n<\/li>\n<li>external spam-fighting services:\n<ul>\n<li>RBL lists (MAIL FROM)<\/li>\n<li>RHSBL lists (RCPT TO)<\/li>\n<\/ul>\n<\/li>\n<li>content versification of incoming messages (which\u00a0passed smtpd access restrictions checks):\n<ul>\n<li>header\u00a0checks<\/li>\n<li>body\u00a0checks<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4><\/h4>\n<h4 style=\"padding-left: 30px;\">Tip: Quickly look up\u00a0Postfix configuration parameters<\/h4>\n<p style=\"padding-left: 30px;\">In order to quickly read out your current configuration, use the Postfix\u00a0configuration utility at the command prompt:<\/p>\n<pre style=\"padding-left: 60px;\">postconf<\/pre>\n<p style=\"padding-left: 30px;\">if possible, with the parameter you want to read out the value of, for example:<\/p>\n<pre style=\"padding-left: 60px;\">postconf smtpd_recipient_restrictions<\/pre>\n<p style=\"padding-left: 30px;\">In order to look up the defaults, add the -d flag.<\/p>\n<h2>The basics of smtpd access restrictions in Postfix<\/h2>\n<p><span style=\"font-weight: 400;\">Postfix can enforce several\u00a0types of smtpd access restrictions (set in main.cf), most notably:<\/span><\/p>\n<ul>\n<ul>\n<li><strong><a href=\"http:\/\/www.postfix.org\/postconf.5.html#smtpd_client_restrictions\" target=\"_blank\">smtpd client restrictions<\/a><\/strong>: restrictions based on the address of the originating\u00a0mail client (client IP and\/or host name)<\/li>\n<\/ul>\n<\/ul>\n<pre style=\"padding-left: 120px;\">smtpd_client_restrictions =<\/pre>\n<ul>\n<ul>\n<li><strong><a href=\"http:\/\/www.postfix.org\/postconf.5.html#smtpd_helo_restrictions\" target=\"_blank\">smtpd HELO restrictions<\/a><\/strong>: restrictions based on the contents of HELO<\/li>\n<\/ul>\n<\/ul>\n<pre class=\"\" style=\"padding-left: 120px;\">smtpd_helo_restrictions =<\/pre>\n<ul>\n<ul>\n<li><strong><a href=\"http:\/\/www.postfix.org\/postconf.5.html#smtpd_sender_restrictions\" target=\"_blank\">smtpd sender restrictions<\/a><\/strong>: restrictions based on the email address of the sender of the message <span style=\"font-weight: 400;\">(MAIL FROM:)<\/span><\/li>\n<\/ul>\n<\/ul>\n<pre class=\"\" style=\"padding-left: 120px;\">smtpd_sender_restrictions =<\/pre>\n<ul>\n<ul>\n<li><strong><a href=\"http:\/\/www.postfix.org\/postconf.5.html#smtpd_recipient_restrictions\" target=\"_blank\">smtpd recipient restrictions<\/a><\/strong>: restrictions based on the email address of the message\u00a0recipient <span style=\"font-weight: 400;\">(RCPT TO:)<\/span>.<\/li>\n<\/ul>\n<\/ul>\n<pre class=\"\" style=\"padding-left: 120px;\">smtpd_recipient_restrictions =<\/pre>\n<p>Wrapping\u00a0all restrictions inside\u00a0<strong>the\u00a0smtpd_recipient_restrictions<\/strong> directive\u00a0gives you one meaningful advantage:\u00a0the ability to\u00a0log all relevant information about each incoming connection that may help you to spot bugs in your configuration and\/or further refine your\u00a0setup.<\/p>\n<p>In order to set helo restrictions, it is advisable to enforce that a helo be sent for each message (in main.cf):<\/p>\n<pre style=\"padding-left: 120px;\">smtpd_helo_required = yes\r\n<\/pre>\n<p>You can specify optional\u00a0<b><\/b><b><\/b><b>smtpd_restriction_classes<\/b> for groups of access restrictions.<\/p>\n<p>Once you know how it works, configuring spam defenses and setting your access restrictions in Postfix is rather\u00a0easy.<\/p>\n<h2>Setting smtpd\u00a0access restrictions in Postfix<\/h2>\n<p>Postfix applies restrictions in the order they are\u00a0specified; the first restriction that matches &#8220;wins&#8221;.<\/p>\n<h4>Step 1.\u00a0Set smtpd_recipient_restrictions<\/h4>\n<p><span style=\"font-weight: 400;\">In main.cf, set smtpd_recipient_restrictions as follows (continue long lines by starting the next line with a whitespace character):<\/span><\/p>\n<pre class=\"\">smtpd_recipient_restrictions =\u00a0\r\n      permit_mynetworks,\r\n      permit_sasl_authenticated,\r\n      reject_unauth_destination,\r\n      reject_invalid_hostname,\r\n      reject_unauth_pipelining,\r\n      reject_non_fqdn_sender,\r\n      reject_unknown_sender_domain,\r\n      reject_non_fqdn_recipient,\r\n      reject_unknown_recipient_domain,\r\n### make sure the files referenced on the following four lines exist\r\n      check_client_access hash:\/etc\/postfix\/access_maps\/access_client,\r\n      check_helo_access hash:\/etc\/postfix\/access_maps\/access_helo,\r\n      check_sender_access regexp:\/etc\/postfix\/access_maps\/regex_access_sender, \r\n      check_recipient_access\u00a0hash:\/etc\/postfix\/access_maps\/access_recipient,\r\n### from time to time, anti-spam services may stop working; check the logs regularly to stay on top of things! \r\n      reject_rhsbl_client blackhole.securitysage.com,\r\n      reject_rhsbl_sender blackhole.securitysage.com,\r\n      reject_rbl_client relays.ordb.org,\r\n      reject_rbl_client zen.spamhaus.org,\r\n      reject_rbl_client b.bararacudacentral.org,\r\n      reject_rbl_client blackholes.easynet.nl,\r\n      reject_rbl_client cbl.abuseat.org,\r\n      reject_rbl_client proxies.blackholes.wirehub.net,\r\n      reject_rbl_client bl.spamcop.net,\r\n      reject_rbl_client sbl.spamhaus.org,\r\n      reject_rbl_client ubl.unsubscore.com,\r\n      permit\r\n\r\n<\/pre>\n<p>By placing the RBL (Real-time, IP Based Blacklist) and RHSBL (Real-time, Domain Based Blacklist) checks at the end of the list of restrictions you minimize costly external DNS checks to those instances of mail that managed to pass all the other spam checks.<\/p>\n<p>Postfix allows you to define\u00a0your\u00a0own access restrictions in a number of ways, including\u00a0using regular expressions. In order to confirm which methods are supported by your version, you can inquire at the prompt using:<\/p>\n<pre>postconf -m<\/pre>\n<h4>Step 2. Create access restrictions files that you referenced in main.cf<\/h4>\n<p>Create your access restrictions files as referenced in main.cf:<\/p>\n<pre class=\"\">\/etc\/postfix\/access_maps\/access_client\r\n\/etc\/postfix\/access_maps\/access_helo\r\n\/etc\/postfix\/access_maps\/regex_access_sender\r\n\/etc\/postfix\/access_maps\/access_recipient<\/pre>\n<h4>Step 3. Edit your access restrictions files<\/h4>\n<p>Edit\u00a0your access restrictions files in a text editor and populate them with rules. Follow the directions set in the\u00a0<strong>\/etc\/postfix\/access<\/strong> file.<\/p>\n<p>Be vigilant of the type of restriction you are applying in each case.\u00a0For example, to block a domain (domainname.tld) with its subdomains (anything.domainname.tld) in the <strong>check_client_access<\/strong> table, enter this in your \/etc\/postfix\/access_maps\/access_client file:<\/p>\n<pre class=\"\">.spammingdomain.tld REJECT Get lost.<\/pre>\n<p>In this case, <strong>REJECT<\/strong> is the directive, &#8220;<em>Get lost.<\/em>&#8221; is an optional message (could be a numerical error code as well). Instead of REJECT, here are some alternatives:<\/p>\n<ul>\n<li>you could\u00a0<strong>DISCARD<\/strong> the message to avoid responding to it (which\u00a0ties up resources\u00a0and may turn you into a\u00a0spammer yourself if your bounces hit an innocent victim),<\/li>\n<li>hold the message in the queue for the lifetime of the queue (<strong>HOLD<\/strong> <em>optional\u00a0comment<\/em>),<\/li>\n<li>add a header (<b>PREPEND<\/b> <i>headername: headervalue on a separate<\/i>\u00a0line preceding the header which triggered the event) or<\/li>\n<li>redirect spam\u00a0to one and only one recipient\u00a0<b>REDIRECT<\/b> <i>user@domain.tld<\/i>).<\/li>\n<\/ul>\n<p>For how these and other\u00a0directives work, refer to the manual page for access:<\/p>\n<pre>man access<\/pre>\n<p>A legitimate\u00a0email addresses rarely includes a hostname, but the exact opposite is usually true for spam. When you block a hostname in your access restrictions, the spammers can still get to you at virtually no expense by modifying the hostname. To turn the tables and make spamming of your systems uneconomical, you need\u00a0to make their domains obsolete\u00a0(so they can&#8217;t spam you without getting into expenses). Arguably the most efficient, sure-fire way of doing this\u00a0involves regular expressions.<\/p>\n<p>For some types of\u00a0restrictions, you may want\u00a0to use regex-based evaluation to\u00a0account for variations in user names, subject lines, and the like. For example, you could block the most frequently abused\u00a0top lever domains by using these directives:<\/p>\n<pre>\/\\.xyz$\/ REJECT\r\n\/\\.top$\/ REJECT\r\n\/\\.date$\/ REJECT\r\n\/\\.science$\/ REJECT\r\n\/\\.faith$\/ REJECT<\/pre>\n<p>in your\u00a0check_client_access and check_sender_access parameters.<\/p>\n<p>Other prime candidates for this type of a block are\u00a0the top level domains .pro, webcam, .work, and .download. This is not a solution for prime top-level domains\u00a0such as\u00a0.com, however. That&#8217;s where your past logs come in handy (read about\u00a0how to extract spammers&#8217; identifying information from logs and junk messages). For more detail on how to set up anti-spam filters using regular expressions, <a href=\"https:\/\/www.cloudinsidr.com\/content\/how-to-extract-spammers-identifying-information-from-logs-and-junk-emails-using-regex-and-other-tricks\/\" target=\"_blank\">read this post<\/a>\u00a0(includes ready-to-use RegEx expressions).<\/p>\n<h4>Step 4. Run postmap on your access restrictions files (if they are being referenced via\u00a0hash)<\/h4>\n<p>When you are done setting up the restrictions, run postmap on the files that are referenced with the parameters <strong>check_client_access<\/strong>, <strong>check_helo_access<\/strong>, <strong>check_sender_access<\/strong>, <strong>check_recipient_access <\/strong>using\u00a0<strong>hash:<\/strong><\/p>\n<pre class=\"\">postmap access_*<\/pre>\n<p>This is not necessary for files referenced via\u00a0regexp: (a reload will suffice) and won&#8217;t help with pcre: (in this case, it is advisable to restart postfix).<\/p>\n<h4>Step 5. Restart Postfix<\/h4>\n<p>Restart Postfix:<\/p>\n<pre>service postfix restart<\/pre>\n<p>to apply changes to its\u00a0main configuration file. When you change only files referenced via\u00a0regexp:, all you need to do is reload Postfix:<\/p>\n<pre>service postfix reload<\/pre>\n<h4>Step 6. Test your filter pattern matching<\/h4>\n<p><span style=\"font-weight: 400;\">As always, test your configuration to ensure that it works the way you intended. For files using regular expressions and referenced via regexp:<\/span><\/p>\n<pre>postmap -q 'teststring' regexp:\/etc\/postfix\/access_maps\/regex_access_sender<\/pre>\n<h4>Step 7. Correct and update<\/h4>\n<p>Whenever you update access restriction files referenced via\u00a0hash, run postmap on them.\u00a0For files referenced via\u00a0regexp:, simply reload postfix\u00a0and you should be good to go.<\/p>\n<h2>Watch your back (keep an eye on the logs!)<\/h2>\n<p><span style=\"font-weight: 400;\">You can view what\u2019s going on in the main log file by using the command:<\/span><\/p>\n<pre class=\"\">tail -f \/var\/log\/maillog<\/pre>\n<p>Also, keep an eye on the mail in the system&#8217;s postmaster account (it may be routed to root&#8217;s mail directory, so check there too).<\/p>\n<p><span style=\"font-weight: 400;\">Tip: One way to get acquainted with various anti-spam services is <a href=\"http:\/\/mxtoolbox.com\/blacklists.aspx\">MxToolbox<\/a>, a testing suite which sports\u00a0quite an impressive array of useful diagnostics tricks up its sleeve. Run a blacklist check on a domain and see what happens.<\/span><\/p>\n<p>You may also like:\u00a0<em><a href=\"https:\/\/www.cloudinsidr.com\/content\/youve-got-mail-the-changing-landscape-of-email-services-and-the-hype-of-unified-communications\/\" target=\"_blank\">You&#8217;ve Got Mail: The Changing Landscape of Email Services and the Emergence of Unified Communications<\/a><\/em>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fighting spam, aren&#8217;t we all&#8230; To stem the tide of unwanted junk mail look no further than the built-in access restrictions in Postfix.<\/p>\n","protected":false},"author":1,"featured_media":76,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[16,17,2],"tags":[14,9,15,3,5,11,12,13,10,4,134],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v14.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Anti-Spam Defense: Using Postfix With smtpd Access Restrictions - CloudInsidr<\/title>\n<meta name=\"robots\" content=\"index, follow\" \/>\n<meta name=\"googlebot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta name=\"bingbot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cloudinsidr.com\/content\/anti-spam-defense-in-postfix\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Anti-Spam Defense: Using Postfix With smtpd Access Restrictions - CloudInsidr\" \/>\n<meta property=\"og:description\" content=\"Fighting spam, aren&#8217;t we all&#8230; To stem the tide of unwanted junk mail look no further than the built-in access restrictions in Postfix.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cloudinsidr.com\/content\/anti-spam-defense-in-postfix\/\" \/>\n<meta property=\"og:site_name\" content=\"CloudInsidr\" \/>\n<meta property=\"article:published_time\" content=\"2015-11-15T21:29:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-08-27T21:42:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2015\/11\/cloudinsidr_logo_900px-wide.png\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"326\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#website\",\"url\":\"https:\/\/www.cloudinsidr.com\/content\/\",\"name\":\"CloudInsidr\",\"description\":\"Cyber security, infotech\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.cloudinsidr.com\/content\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/anti-spam-defense-in-postfix\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2015\/11\/cloudinsidr_logo_900px-wide.png\",\"width\":900,\"height\":326,\"caption\":\"cloudinsidr.com logo (900px wide)\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/anti-spam-defense-in-postfix\/#webpage\",\"url\":\"https:\/\/www.cloudinsidr.com\/content\/anti-spam-defense-in-postfix\/\",\"name\":\"Anti-Spam Defense: Using Postfix With smtpd Access Restrictions - CloudInsidr\",\"isPartOf\":{\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/anti-spam-defense-in-postfix\/#primaryimage\"},\"datePublished\":\"2015-11-15T21:29:59+00:00\",\"dateModified\":\"2016-08-27T21:42:51+00:00\",\"author\":{\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#\/schema\/person\/dd6ee9cb21cf05763fd7cff3d6f11b2b\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cloudinsidr.com\/content\/anti-spam-defense-in-postfix\/\"]}]},{\"@type\":[\"Person\"],\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#\/schema\/person\/dd6ee9cb21cf05763fd7cff3d6f11b2b\",\"name\":\"Cloud Insidr\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8b2fa1415b3d573b97d818b8f8f83b7c?s=96&d=mm&r=g\",\"caption\":\"Cloud Insidr\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/posts\/10"}],"collection":[{"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/comments?post=10"}],"version-history":[{"count":43,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/posts\/10\/revisions"}],"predecessor-version":[{"id":1276,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/posts\/10\/revisions\/1276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/media\/76"}],"wp:attachment":[{"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/media?parent=10"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/categories?post=10"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/tags?post=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}