pub struct AccessControl { /* private fields */ }Expand description
ACL rules
§Sections
ACL File is formatted in sections, each section has a name with surrounded by brackets [ and ]
followed by Rules line by line.
[SECTION-1]
RULE-1
RULE-2
RULE-3
[SECTION-2]
RULE-1
RULE-2
RULE-3Available sections are
- For local servers (
sslocal,ssredir, …)[bypass_all]- ACL runs inBlackListmode.[proxy_all]- ACL runs inWhiteListmode.[bypass_list]- Rules for connecting directly[proxy_list]- Rules for connecting through proxies
- For remote servers (
ssserver)[reject_all]- ACL runs inBlackListmode.[accept_all]- ACL runs inWhiteListmode.[black_list]- Rules for rejecting[white_list]- Rules for allowing[outbound_block_list]- Rules for blocking outbound addresses.
§Mode
Mode is the default ACL strategy for those addresses that are not in configuration file.
BlackList- Bypasses / Rejects all addresses except those in[proxy_list]or[white_list]WhiteList- Proxies / Accepts all addresses except those in[bypass_list]or[black_list]
§Rules
Rules can be either
- CIDR form network addresses, like
10.9.0.32/16 - IP addresses, like
127.0.0.1or::1 - Regular Expression for matching hosts, like
(^|\.)gmail\.com$ - Domain with preceding
|for exact matching, like|google.com - Domain with preceding
||for matching with subdomains, like||google.com
Implementations§
Source§impl AccessControl
impl AccessControl
Sourcepub fn load_from_file<P: AsRef<Path>>(p: P) -> Result<AccessControl>
pub fn load_from_file<P: AsRef<Path>>(p: P) -> Result<AccessControl>
Load ACL rules from a file
Sourcepub fn check_host_in_proxy_list(&self, host: &str) -> Option<bool>
pub fn check_host_in_proxy_list(&self, host: &str) -> Option<bool>
Check if domain name is in proxy_list. If so, it should be resolved from remote (for Android’s DNS relay)
Return
Some(true)ifhostis inwhite_list(should be proxied)Some(false)ifhostis inblack_list(should be bypassed)Noneifhostdoesn’t match any rules
Sourcepub fn check_ascii_host_in_proxy_list(&self, host: &str) -> Option<bool>
pub fn check_ascii_host_in_proxy_list(&self, host: &str) -> Option<bool>
Check if ASCII domain name is in proxy_list. If so, it should be resolved from remote (for Android’s DNS relay)
Return
Some(true)ifhostis inwhite_list(should be proxied)Some(false)ifhostis inblack_list(should be bypassed)Noneifhostdoesn’t match any rules
Sourcepub fn is_ip_empty(&self) -> bool
pub fn is_ip_empty(&self) -> bool
If there are no IP rules
Sourcepub fn is_host_empty(&self) -> bool
pub fn is_host_empty(&self) -> bool
If there are no domain name rules
Sourcepub fn check_ip_in_proxy_list(&self, ip: &IpAddr) -> bool
pub fn check_ip_in_proxy_list(&self, ip: &IpAddr) -> bool
Check if IpAddr should be proxied
Sourcepub fn is_default_in_proxy_list(&self) -> bool
pub fn is_default_in_proxy_list(&self) -> bool
Default mode
Default behavior for hosts that are not configured
true- Proxiedfalse- Bypassed
Sourcepub async fn check_target_bypassed(&self, addr: &Address) -> bool
pub async fn check_target_bypassed(&self, addr: &Address) -> bool
Check if target address should be bypassed (for client)
This function may perform a DNS resolution
Sourcepub fn check_client_blocked(&self, addr: &SocketAddr) -> bool
pub fn check_client_blocked(&self, addr: &SocketAddr) -> bool
Check if client address should be blocked (for server)
Sourcepub async fn check_outbound_blocked(&self, outbound: &Address) -> bool
pub async fn check_outbound_blocked(&self, outbound: &Address) -> bool
Check if outbound address is blocked (for server)
NOTE: Address::DomainAddress is only validated by regex rules,
resolved addresses are checked in the lookup_outbound_then! macro
Trait Implementations§
Source§impl Clone for AccessControl
impl Clone for AccessControl
Source§fn clone(&self) -> AccessControl
fn clone(&self) -> AccessControl
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more