access

package
v0.0.0-...-5da2a9f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 29, 2025 License: AGPL-3.0 Imports: 15 Imported by: 0

Documentation

Overview

Package access contains structures for access control management.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Blocker

type Blocker interface {
	// IsBlocked returns true if the req should be blocked.  req must not be
	// nil, and req.Question must have one item.
	IsBlocked(
		ctx context.Context,
		req *dns.Msg,
		rAddr netip.AddrPort,
		l *geoip.Location,
	) (isBlocked bool)
}

Blocker is the interface to control DNS resolution access.

type DefaultProfile

type DefaultProfile struct {
	// contains filtered or unexported fields
}

DefaultProfile controls profile specific IP and client blocking that take place before all other processing. DefaultProfile is safe for concurrent use.

func (*DefaultProfile) Config

func (p *DefaultProfile) Config() (conf *ProfileConfig)

Config implements the Profile interface for *DefaultProfile.

func (*DefaultProfile) IsBlocked

func (p *DefaultProfile) IsBlocked(
	ctx context.Context,
	req *dns.Msg,
	rAddr netip.AddrPort,
	l *geoip.Location,
) (blocked bool)

IsBlocked implements the Blocker interface for *DefaultProfile.

type EmptyBlocker

type EmptyBlocker struct{}

EmptyBlocker is an empty Blocker implementation that does nothing.

func (EmptyBlocker) IsBlocked

func (EmptyBlocker) IsBlocked(
	_ context.Context,
	_ *dns.Msg,
	_ netip.AddrPort,
	_ *geoip.Location,
) (isBlocked bool)

IsBlocked implements the Blocker interface for EmptyBlocker. It always returns false.

type EmptyProfile

type EmptyProfile struct {
	EmptyBlocker
}

EmptyProfile is an empty Profile implementation that does nothing.

func (EmptyProfile) Config

func (EmptyProfile) Config() (conf *ProfileConfig)

Config implements the Profile interface for EmptyProfile. It always returns nil.

type EmptyProfileMetrics

type EmptyProfileMetrics struct{}

EmptyProfileMetrics is the implementation of the ProfileMetrics interface that does nothing.

func (EmptyProfileMetrics) ObserveProfileInit

func (EmptyProfileMetrics) ObserveProfileInit(_ context.Context, _ time.Duration)

ObserveProfileInit implements the ProfileMetrics interface for EmptyProfileMetrics.

type EmptyStandard

type EmptyStandard struct{}

EmptyStandard is an empty StandardSetter implementation that does nothing.

func (EmptyStandard) SetConfig

func (EmptyStandard) SetConfig(_ *StandardBlockerConfig)

SetConfig implements the StandardSetter interface for EmptyStandard. It always returns false.

type Global

type Global struct {
	// contains filtered or unexported fields
}

Global controls IP and client blocking that takes place before all other processing. Global is safe for concurrent use.

func NewGlobal

func NewGlobal(blockedDomains []string, blockedSubnets []netip.Prefix) (g *Global, err error)

NewGlobal creates a new *Global from provided parameters.

func (*Global) IsBlockedHost

func (g *Global) IsBlockedHost(host string, qt uint16) (blocked bool)

IsBlockedHost implements the Interface interface for *Global.

func (*Global) IsBlockedIP

func (g *Global) IsBlockedIP(ip netip.Addr) (blocked bool)

IsBlockedIP implements the Interface interface for *Global.

type Interface

type Interface interface {
	// IsBlockedHost returns true if host should be blocked.
	IsBlockedHost(host string, qt uint16) (blocked bool)

	// IsBlockedIP returns the status of the IP address blocking as well as the
	// rule that blocked it.
	IsBlockedIP(ip netip.Addr) (blocked bool)
}

Interface is the access manager interface.

type Profile

type Profile interface {
	// Config returns the profile access configuration.
	Config() (conf *ProfileConfig)

	Blocker
}

Profile is the profile access manager interface.

type ProfileConfig

type ProfileConfig struct {
	// AllowedNets is slice of CIDRs to be allowed.
	AllowedNets []netip.Prefix

	// BlockedNets is slice of CIDRs to be blocked.
	BlockedNets []netip.Prefix

	// AllowedNets is slice of location ASNs to be allowed.
	AllowedASN []geoip.ASN

	// BlockedASN is slice of location ASNs to be blocked.
	BlockedASN []geoip.ASN

	// BlocklistDomainRules is slice of rules to match requests.
	BlocklistDomainRules []string

	// StandardEnabled controls whether the profile should also apply standard
	// access settings.
	StandardEnabled bool
}

ProfileConfig is a profile specific access configuration.

NOTE: Do not change fields of this structure without incrementing internal/profiledb/internal.FileCacheVersion.

type ProfileConstructor

type ProfileConstructor struct {
	// contains filtered or unexported fields
}

ProfileConstructor creates default access managers for profiles.

func NewProfileConstructor

func NewProfileConstructor(conf *ProfileConstructorConfig) (c *ProfileConstructor)

NewProfileConstructor returns a properly initialized *ProfileConstructor. conf must not be nil.

func (*ProfileConstructor) New

func (c *ProfileConstructor) New(conf *ProfileConfig) (p *DefaultProfile)

New creates a new access manager for a profile based on the configuration. conf must not be nil and must be valid.

type ProfileConstructorConfig

type ProfileConstructorConfig struct {
	// Metrics is used for the collection of the statistics of profile access
	// managers.  It must not be nil.
	Metrics ProfileMetrics

	// Standard is the standard blocker for all profiles which have enabled this
	// feature.  It must not be nil.
	Standard Blocker
}

ProfileConstructorConfig is the configuration for the ProfileConstructor.

type ProfileMetrics

type ProfileMetrics interface {
	// ObserveProfileInit records the duration taken for the initialization of
	// the profile access engine.
	ObserveProfileInit(ctx context.Context, dur time.Duration)
}

ProfileMetrics is an interface used for collecting statistics related to the profile access engine.

type StandardBlocker

type StandardBlocker struct {
	// contains filtered or unexported fields
}

StandardBlocker is the dynamic Blocker implementation with standard access settings.

func NewStandardBlocker

func NewStandardBlocker(conf *StandardBlockerConfig) (s *StandardBlocker)

NewStandardBlocker creates a new StandardBlocker instance. conf must not be nil.

func (*StandardBlocker) IsBlocked

func (b *StandardBlocker) IsBlocked(
	_ context.Context,
	req *dns.Msg,
	rAddr netip.AddrPort,
	l *geoip.Location,
) (blocked bool)

IsBlocked implements the Blocker interface for *StandardBlocker.

func (*StandardBlocker) SetConfig

func (b *StandardBlocker) SetConfig(c *StandardBlockerConfig)

SetConfig implements the StandardSetter interface for *StandardBlocker.

type StandardBlockerConfig

type StandardBlockerConfig struct {
	// AllowedNets are the networks allowed for DNS resolution.  If empty or
	// nil, all networks are allowed, except those blocked by BlockedNets.
	AllowedNets []netip.Prefix

	// BlockedNets are the networks blocked for DNS resolution.  If empty or
	// nil, all networks are allowed, except those allowed by AllowedNets.
	BlockedNets []netip.Prefix

	// AllowedASN are the ASNs allowed for DNS resolution.  If empty or nil, all
	// ASNs are allowed, except those blocked by BlockedASN.
	AllowedASN []geoip.ASN

	// BlockedASN are the ASNs blocked for DNS resolution.  If empty or nil, all
	// ASNs are allowed, except those allowed by AllowedASN.
	BlockedASN []geoip.ASN

	// BlocklistDomainRules are the rules blocking the domains.  If empty or
	// nil, no domains are blocked.
	BlocklistDomainRules []string
}

StandardBlockerConfig is the configuration structure for the standard access blocker.

func (*StandardBlockerConfig) Equal

func (c *StandardBlockerConfig) Equal(other *StandardBlockerConfig) (ok bool)

Equal returns true if c and other are equal. nil is only equal to other nil.

type StandardSetter

type StandardSetter interface {
	// SetConfig sets the configuration for the standard access blocker.  conf
	// must not be nil.  Fields of conf must not be modified after calling this
	// method.  It must be safe for concurrent use.
	SetConfig(conf *StandardBlockerConfig)
}

StandardSetter is the interface for setting the standard access blocker configuration.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL