Struct socks_hub::AccessControl
source · 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-3
Available 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