mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Extend stop-dns-rebind to reject IPv6 LL and ULA addresses.
We also reject the loopback address if rebind-localhost-ok is NOT set. Signed-off-by: DL6ER <dl6er@dl6er.de>
This commit is contained in:
committed by
Simon Kelley
parent
63ed917ad9
commit
e7ee1aa093
@@ -395,11 +395,13 @@ were previously disabled.
|
|||||||
.TP
|
.TP
|
||||||
.B --stop-dns-rebind
|
.B --stop-dns-rebind
|
||||||
Reject (and log) addresses from upstream nameservers which are in the
|
Reject (and log) addresses from upstream nameservers which are in the
|
||||||
private IP ranges. This blocks an attack where a browser behind a
|
private ranges. This blocks an attack where a browser behind a
|
||||||
firewall is used to probe machines on the local network.
|
firewall is used to probe machines on the local network. For IPv6, the
|
||||||
|
private range covers the IPv4-mapped addresses in private space plus
|
||||||
|
all link-local (LL) and site-local (ULA) addresses.
|
||||||
.TP
|
.TP
|
||||||
.B --rebind-localhost-ok
|
.B --rebind-localhost-ok
|
||||||
Exempt 127.0.0.0/8 from rebinding checks. This address range is
|
Exempt 127.0.0.0/8 and ::1 from rebinding checks. This address range is
|
||||||
returned by realtime black hole servers, so blocking it may disable
|
returned by realtime black hole servers, so blocking it may disable
|
||||||
these services.
|
these services.
|
||||||
.TP
|
.TP
|
||||||
|
|||||||
@@ -844,12 +844,26 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
|
|||||||
private_net(addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
|
private_net(addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if ((flags & F_IPV6) &&
|
/* Block IPv4-mapped IPv6 addresses in private IPv4 address space */
|
||||||
IN6_IS_ADDR_V4MAPPED(&addr.addr6))
|
if (flags & F_IPV6)
|
||||||
{
|
{
|
||||||
struct in_addr v4;
|
if (IN6_IS_ADDR_V4MAPPED(&addr.addr6))
|
||||||
v4.s_addr = ((const uint32_t *) (&addr.addr6))[3];
|
{
|
||||||
if (private_net(v4, !option_bool(OPT_LOCAL_REBIND)))
|
struct in_addr v4;
|
||||||
|
v4.s_addr = ((const uint32_t *) (&addr.addr6))[3];
|
||||||
|
if (private_net(v4, !option_bool(OPT_LOCAL_REBIND)))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check for link-local (LL) and site-local (ULA) IPv6 addresses */
|
||||||
|
if (IN6_IS_ADDR_LINKLOCAL(&addr.addr6) ||
|
||||||
|
IN6_IS_ADDR_SITELOCAL(&addr.addr6))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Check for the IPv6 loopback address (::1) when
|
||||||
|
option rebind-localhost-ok is NOT set */
|
||||||
|
if (!option_bool(OPT_LOCAL_REBIND) &&
|
||||||
|
IN6_IS_ADDR_LOOPBACK(&addr.addr6))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user