diff --git a/install/config/config.yml b/install/config/config.yml index 90d1bf5d5..1f50057e8 100644 --- a/install/config/config.yml +++ b/install/config/config.yml @@ -22,7 +22,8 @@ server: methods: ["GET", "POST", "PUT", "DELETE", "PATCH"] allowed_headers: ["X-CSRF-Token", "Content-Type"] credentials: false - {{if .EnableGeoblocking}}maxmind_db_path: "./config/GeoLite2-Country.mmdb"{{end}} + {{if .EnableMaxMind}}maxmind_db_path: "./config/GeoLite2-Country.mmdb"{{end}} + {{if .EnableMaxMind}}maxmind_asn_path: "./config/GeoLite2-ASN.mmdb"{{end}} {{if .EnableEmail}} email: smtp_host: "{{.EmailSMTPHost}}" diff --git a/install/main.go b/install/main.go index b3979ace9..5609d8cf0 100644 --- a/install/main.go +++ b/install/main.go @@ -54,8 +54,8 @@ type Config struct { InstallGerbil bool TraefikBouncerKey string DoCrowdsecInstall bool - EnableGeoblocking bool - Secret string + EnableMaxMind bool + Secret string IsEnterprise bool } @@ -123,15 +123,15 @@ func main() { fmt.Println("\nConfiguration files created successfully!") - // Download MaxMind database if requested - if config.EnableGeoblocking { - fmt.Println("\n=== Downloading MaxMind Database ===") + // Download MaxMind Country / ASN database if requested + if config.EnableMaxMind { + fmt.Println("\n=== Downloading MaxMind Country and ASN Databases ===") if err := downloadMaxMindDatabase(); err != nil { - fmt.Printf("Error downloading MaxMind database: %v\n", err) + fmt.Printf("Error downloading MaxMind databases: %v\n", err) fmt.Println("You can download it manually later if needed.") } } - + fmt.Println("\n=== Starting installation ===") if readBool("Would you like to install and start the containers?", true) { @@ -188,15 +188,15 @@ func main() { fmt.Println("\n=== MaxMind Database Update ===") if _, err := os.Stat("config/GeoLite2-Country.mmdb"); err == nil { fmt.Println("MaxMind GeoLite2 Country database found.") - if readBool("Would you like to update the MaxMind database to the latest version?", false) { + if readBool("Would you like to update the MaxMind databases (Country and ASN) to the latest version?", false) { if err := downloadMaxMindDatabase(); err != nil { fmt.Printf("Error updating MaxMind database: %v\n", err) fmt.Println("You can try updating it manually later if needed.") } } } else { - fmt.Println("MaxMind GeoLite2 Country database not found.") - if readBool("Would you like to download the MaxMind GeoLite2 database for geoblocking functionality?", false) { + fmt.Println("MaxMind GeoLite2 Country and ASN databases not found.") + if readBool("Would you like to download the MaxMind GeoLite2 databases for blocking functionality?", false) { if err := downloadMaxMindDatabase(); err != nil { fmt.Printf("Error downloading MaxMind database: %v\n", err) fmt.Println("You can try downloading it manually later if needed.") @@ -204,9 +204,11 @@ func main() { // Now you need to update your config file accordingly to enable geoblocking fmt.Print("Please remember to update your config/config.yml file to enable geoblocking! \n\n") // add maxmind_db_path: "./config/GeoLite2-Country.mmdb" under server - fmt.Println("Add the following line under the 'server' section:") + // add maxmind_asn_path: "./config/GeoLite2-ASN.mmdb" under server + fmt.Println("Add the following lines under the 'server' section:") fmt.Println(" maxmind_db_path: \"./config/GeoLite2-Country.mmdb\"") - } + fmt.Println(" maxmind_asn_path: \"./config/GeoLite2-ASN.mmdb\"") + } } } @@ -527,8 +529,8 @@ func collectUserInput() Config { fmt.Println("\n=== Advanced Configuration ===") config.EnableIPv6 = readBool("Is your server IPv6 capable?", true) - config.EnableGeoblocking = readBool("Do you want to download the MaxMind GeoLite2 database for geoblocking functionality?", true) - + config.EnableMaxMind = readBool("Do you want to download the MaxMind GeoLite2 Country and ADN databases for blocking functionality?", true) + if config.DashboardDomain == "" { fmt.Println("Error: Dashboard Domain name is required") os.Exit(1) @@ -780,29 +782,42 @@ func checkPortsAvailable(port int) error { } func downloadMaxMindDatabase() error { - fmt.Println("Downloading MaxMind GeoLite2 Country database...") + fmt.Println("Downloading MaxMind GeoLite2 Country and ASN databases...") - // Download the GeoLite2 Country database + // Download the GeoLite2 Country databases if err := run("curl", "-L", "-o", "GeoLite2-Country.tar.gz", "https://github.com/GitSquared/node-geolite2-redist/raw/refs/heads/master/redist/GeoLite2-Country.tar.gz"); err != nil { - return fmt.Errorf("failed to download GeoLite2 database: %v", err) + return fmt.Errorf("failed to download GeoLite2 Country database: %v", err) } - - // Extract the database + if err := run("curl", "-L", "-o", "GeoLite2-ASN.tar.gz", + "https://github.com/GitSquared/node-geolite2-redist/raw/refs/heads/master/redist/GeoLite2-ASN.tar.gz"); err != nil { + return fmt.Errorf("failed to download GeoLite2 ASN database: %v", err) + } + + // Extract the Country database if err := run("tar", "-xzf", "GeoLite2-Country.tar.gz"); err != nil { - return fmt.Errorf("failed to extract GeoLite2 database: %v", err) + return fmt.Errorf("failed to extract GeoLite2 Country database: %v", err) } - + if err := run("tar", "-xzf", "GeoLite2-ASN.tar.gz"); err != nil { + return fmt.Errorf("failed to extract GeoLite2 ASN database: %v", err) + } + // Find the .mmdb file and move it to the config directory if err := run("bash", "-c", "mv GeoLite2-Country_*/GeoLite2-Country.mmdb config/"); err != nil { - return fmt.Errorf("failed to move GeoLite2 database to config directory: %v", err) + return fmt.Errorf("failed to move GeoLite2 Country database to config directory: %v", err) } - + if err := run("bash", "-c", "mv GeoLite2-ASN_*/GeoLite2-ASN.mmdb config/"); err != nil { + return fmt.Errorf("failed to move GeoLite2 ASN database to config directory: %v", err) + } + // Clean up the downloaded files - if err := run("rm", "-rf", "GeoLite2-Country.tar.gz", "GeoLite2-Country_*"); err != nil { - fmt.Printf("Warning: failed to clean up temporary files: %v\n", err) + if err := run("sh", "-c", "rm -rf GeoLite2-Country.tar.gz GeoLite2-Country_*"); err != nil { + fmt.Printf("Warning: failed to clean up temporary country files: %v\n", err) } - - fmt.Println("MaxMind GeoLite2 Country database downloaded successfully!") + if err := run("sh", "-c", "rm -rf GeoLite2-ASN.tar.gz GeoLite2-ASN_*"); err != nil { + fmt.Printf("Warning: failed to clean up temporary ASN files: %v\n", err) + } + + fmt.Println("MaxMind GeoLite2 Country and ASN database downloaded successfully!") return nil }