| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package firewall
- import "strings"
- func geoMembers(code string) []string {
- code = strings.ToUpper(strings.TrimPrefix(strings.TrimPrefix(strings.TrimPrefix(strings.TrimPrefix(code, "!"), "geo:"), "geo_"), "!"))
- switch code {
- case "EU":
- return strings.Fields("AT BE BG HR CY CZ DK EE FI FR DE GR HU IE IT LV LT LU MT NL PL PT RO SK SI ES SE")
- case "BALKANS":
- return strings.Fields("GR CY AL BG RO RS MK ME BA HR SI TR")
- case "BLOCKLIST", "HIGHRISK":
- return strings.Fields("CN RU IR KP BY")
- }
- return []string{code}
- }
- func (m *FirewallManager) geoReferenced(code string) bool {
- m.mu.Lock()
- defer m.mu.Unlock()
- check := func(src, dst string) bool {
- for _, value := range []string{src, dst} {
- if value == "" {
- continue
- }
- for _, member := range geoMembers(value) {
- if member == code {
- return true
- }
- }
- }
- return false
- }
- for _, r := range m.filterRules {
- if !r.Disabled && check(r.SrcGeoIP, r.DstGeoIP) {
- return true
- }
- }
- for _, r := range m.natRules {
- if !r.Disabled && check(r.SrcGeoIP, r.DstGeoIP) {
- return true
- }
- }
- for _, r := range m.mangleRules {
- if !r.Disabled && check(r.SrcGeoIP, r.DstGeoIP) {
- return true
- }
- }
- return false
- }
|