diff --git a/plinth/modules/email/dns.py b/plinth/modules/email/dns.py index 2540fc8f9..6491c44ef 100644 --- a/plinth/modules/email/dns.py +++ b/plinth/modules/email/dns.py @@ -7,10 +7,17 @@ See: https://dmarcguide.globalcyberalliance.org/ See: https://support.google.com/a/answer/2466580 See: https://datatracker.ietf.org/doc/html/rfc6186 See: https://rspamd.com/doc/modules/dkim_signing.html +See: https://en.wikipedia.org/wiki/Reverse_DNS_lookup """ +import ipaddress +import typing from dataclasses import dataclass +from plinth.modules.privacy import lookup_public_address + +from . import privileged + @dataclass class Entry: # pylint: disable=too-many-instance-attributes @@ -41,8 +48,6 @@ class Entry: # pylint: disable=too-many-instance-attributes def get_entries(): """Return the list of DNS entries to make.""" - from . import privileged - domain = privileged.domain.get_domains()['primary_domain'] mx_spam_entries = [ Entry(type_='MX', value=f'{domain}.'), @@ -70,3 +75,21 @@ def get_entries(): port=995, value=f'{domain}.'), ] return mx_spam_entries + dkim_entries + autoconfig_entries + + +def get_reverse_entries() -> list[Entry]: + """Return the list of reverse DNS entries to make.""" + entries = [] + domain = privileged.domain.get_domains()['primary_domain'] + for ip_type in typing.get_args(typing.Literal['ipv4', 'ipv6']): + try: + ip_address = lookup_public_address(ip_type) + reverse_pointer = ipaddress.ip_address(ip_address).reverse_pointer + except Exception as exception: + reverse_pointer = \ + f'Error querying external {ip_type} address: {exception}' + + entry = Entry(domain=reverse_pointer, type_='PTR', value=f'{domain}.') + entries.append(entry) + + return entries diff --git a/plinth/modules/email/templates/email.html b/plinth/modules/email/templates/email.html index 9af501d41..4fa1d4da2 100644 --- a/plinth/modules/email/templates/email.html +++ b/plinth/modules/email/templates/email.html @@ -58,4 +58,41 @@ + +
+ {% blocktrans trimmed %} + If your {{ box_name }} runs on a cloud service infrastructure, you + should configure + Reverse DNS lookup. This isn't mandatory, however, it greatly improves + email deliverability. Reverse DNS isn't configured where your regular DNS + is. You should look for it in the settings of your VPS. Some providers + preconfigure the IP address part for you and you only have to set the domain part. + {% endblocktrans %} +
+ +| {% trans "Host" %} | +{% trans "TTL" %} | +{% trans "Type" %} | +{% trans "Host/Target/Value" %} | +
|---|---|---|---|
| {{ dns_entry.domain|default_if_none:"" }} | +{{ dns_entry.ttl }} | +{{ dns_entry.type_ }} | +{{ dns_entry.get_split_value }} | +