Cloudron makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server. Find out more or install now.


Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Bookmarks
  • Search
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

Cloudron Forum

Apps | Demo | Docs | Install
  1. Cloudron Forum
  2. Feature Requests
  3. Firewall / Spamassassin: Automatic list update

Firewall / Spamassassin: Automatic list update

Scheduled Pinned Locked Moved Feature Requests
firewallspamassassin
50 Posts 10 Posters 5.8k Views 10 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • necrevistonnezrN Online
      necrevistonnezrN Online
      necrevistonnezr
      wrote on last edited by necrevistonnezr
      #41

      Thanks again!
      I just tried this - it generated merged_list_20240110_091244.txt and formatted_merged_list_20240110_091244.txt but somehow, the temp_data.txt is not generated, and therefore the upload is not successful?

      BTW, here's your script with english comments and filenames:

      #!/bin/bash
      
      # Current date and time
      current_datetime=$(date +"%Y%m%d_%H%M%S")
      
      # Array containing the URLs of the IP lists and their descriptions
      declare -a urls=(
      	"https://iplists.firehol.org/files/spamhaus_drop.netset,Spamhaus - Drop"
              "https://iplists.firehol.org/files/spamhaus_edrop.netset,Spamhaus - eDrop"
              "https://www.ipdeny.com/ipblocks/data/aggregated/af-aggregated.zone,AF - Afganistan"
              "https://www.ipdeny.com/ipblocks/data/aggregated/bd-aggregated.zone,BD - Bangladesh"
              "https://www.ipdeny.com/ipblocks/data/aggregated/by-aggregated.zone,BY - Belarus"
              "https://www.ipdeny.com/ipblocks/data/aggregated/br-aggregated.zone,BR - Brazil"
              "https://www.ipdeny.com/ipblocks/data/aggregated/cn-aggregated.zone,CN - China"
              "https://www.ipdeny.com/ipblocks/data/aggregated/ir-aggregated.zone,IR - Iran"
              "https://www.ipdeny.com/ipblocks/data/aggregated/in-aggregated.zone,IN - India"
              "https://www.ipdeny.com/ipblocks/data/aggregated/kp-aggregated.zone,KP - North Korea"
              "https://www.ipdeny.com/ipblocks/data/aggregated/np-aggregated.zone,NP - Nepal"
              "https://www.ipdeny.com/ipblocks/data/aggregated/pk-aggregated.zone,PK - Pakistan"
              "https://www.ipdeny.com/ipblocks/data/aggregated/ro-aggregated.zone,RO - Romania"
              "https://www.ipdeny.com/ipblocks/data/aggregated/ru-aggregated.zone,RU - Russia"
              "https://www.ipdeny.com/ipblocks/data/aggregated/sg-aggregated.zone,SG - Singapore"
              "https://www.ipdeny.com/ipblocks/data/aggregated/sy-aggregated.zone,SY - Syria"
              "https://www.ipdeny.com/ipblocks/data/aggregated/tr-aggregated.zone,TR - Turkey"
              "https://www.ipdeny.com/ipblocks/data/aggregated/ua-aggregated.zone,UA - Ukraine"
              "https://www.ipdeny.com/ipblocks/data/aggregated/vn-aggregated.zone,VN - Vietnam"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/af-aggregated.zone,AF - Afganistan"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/bd-aggregated.zone,BD - Bangladesh"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/by-aggregated.zone,BY - Belarus"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/br-aggregated.zone,BR - Brazil"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/cn-aggregated.zone,CN - China"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/ir-aggregated.zone,IR - Iran"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/in-aggregated.zone,IN - India"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/np-aggregated.zone,NP - Nepal"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/pk-aggregated.zone,PK - Pakistan"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/ro-aggregated.zone,RO - Romania"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/ru-aggregated.zone,RU - Russia"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/sg-aggregated.zone,SG - Singapore"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/sy-aggregated.zone,SY - Syria"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/tr-aggregated.zone,TR - Turkey"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/ua-aggregated.zone,UA - Ukraine"
              "https://www.ipdeny.com/ipv6/ipaddresses/aggregated/vn-aggregated.zone,VN - Vietnam"
      )
      
      # File name with the current date and time
      output_file="merged_list_${current_datetime}.txt"
      
      # Download and merge the IP lists
      for url_info in "${urls[@]}"
      do
          # Splitting the URL information
          IFS=',' read -r url description <<< "$url_info"
      
          # Add comment with the URL and description
          echo "# URL: $url" >> "$output_file"
          echo "# Description: $description" >> "$output_file"
      
          echo "Download IP list from $url"
          # Download the IP list and add it to the file
          curl -sS "$url" >> "$output_file"
      done
      
      echo "Merge completed! The merged list is stored in $output_file"
      
      # Formatting the file for the Cloudron Blocklist API
      formatted_file="formatted_$output_file"
      
      # # Add "\n" to the end of each line
      awk '{printf "%s\\n",$0}' "$output_file" > "$formatted_file"
      
      # Cloudron Blocklist API endpoint
      cloudron_api_endpoint="https://yourcloudrondomain.com/api/v1/network/blocklist"
      
      # API Key for authentication (replace 'your-api-key' with your API key)
      api_key="your-api-key"
      
      # Upload to Cloudron Blocklist API with wget
      echo "# Upload to Cloudron Blocklist API with wget..."
      
      # The data in the required format for the API
      data="{\"blocklist\":\"$(cat "$formatted_file" | tr '\n' '\\n')\"}"
      
      # Send the file with a POST request via wget
      echo "$data"> temp_data.txt
      wget --method=POST --header="Content-Type: application/json" --header="Authorization: Bearer $api_key" --body-file=temp_data.txt "$cloudron_api_endpoint" --quiet --output-document=output.txt
      
      # Show the output of wget
      cat output.txt
      
      # Delete temporary files
      rm temp_data.txt
      
      1 Reply Last reply
      2
      • imc67I Offline
        imc67I Offline
        imc67
        translator
        wrote on last edited by imc67
        #42

        Sorry for the Dutch language in the script, ChatGPT is wonderfully writing Dutch without asking haha.

        Strange it doesn't seem to work, I extended the script later to upload it in one run to 3 different Cloudrons and that also works perfect. The part of creating the temp_data.txt is exactly the same.

        • Do you see the prompt "# Upload to Cloudron Blocklist API with wget..."?
        • What happens after that prompt is showed?
        • It takes with these lists about 1,5 minute (on a AMD EPYC 7702P 64-Core Processor with 32GB memory) to process it via API so you have to have some patience 😊 (This is however exactly the same time like when you use the copy/paste in the GUI).
        • After the script is finished the temp_data.txt is deleted, did the script ever finished?
        • I execute the script in a LAMP app (on one of the Cloudrons) with only 256MB memory
        • last maybe a stupid question but you've set the API token to "read/write"?

        I just executed the script (my 3 Cloudrons version) en after about 5 minutes all 3 Cloudrons had the new lists with 60562 IPs (ranges) blocked.

        1 Reply Last reply
        1
        • necrevistonnezrN Online
          necrevistonnezrN Online
          necrevistonnezr
          wrote on last edited by
          #43

          🤦 I executed the script with sh script.sh instead of bash script.sh - after doing the latter it worked!
          Thanks again.

          BTW the output.txt only contains {}...?

          imc67I 1 Reply Last reply
          1
          • necrevistonnezrN necrevistonnezr

            🤦 I executed the script with sh script.sh instead of bash script.sh - after doing the latter it worked!
            Thanks again.

            BTW the output.txt only contains {}...?

            imc67I Offline
            imc67I Offline
            imc67
            translator
            wrote on last edited by
            #44

            @necrevistonnezr said in Firewall / Spamassassin: Automatic list update:

            after doing the latter it worked

            aha ok, I always use ./script.sh

            indeed output.txt also with me contains no data, as I read the script the right way it should contain errors during wget

            1 Reply Last reply
            2
            • necrevistonnezrN Online
              necrevistonnezrN Online
              necrevistonnezr
              wrote on last edited by necrevistonnezr
              #45

              Super!
              I have used this script now via cron and everything seems to work fine, including a significant reduction of "denied" mail attempts in the mail log.

              I've added the following lines to keep the last 20 url lists, compressed with 7z (which I prefer for compression), for analysis (if needed):

              7z a -mx9 "${current_datetime}.7z" "formatted_$output_file"
              rm "formatted_$output_file"
              rm "$output_file"
              ls -td *.7z | grep -v '/$' | tail -n +20 | while IFS= read -r f; do rm -f "$f"; do>
              

              Also: If you use the script, don't just blindly add url-lists. I already managed to lock myself out once by adding the "standard" Firehol list (https://iplists.firehol.org/files/firehol_level1.netset)

              1 Reply Last reply
              5
              • necrevistonnezrN necrevistonnezr referenced this topic on
              • necrevistonnezrN necrevistonnezr referenced this topic on
              • necrevistonnezrN Online
                necrevistonnezrN Online
                necrevistonnezr
                wrote on last edited by necrevistonnezr
                #46

                With @imc67 permission, I created a community guide from this thread...

                humptydumptyH 1 Reply Last reply
                4
                • necrevistonnezrN Online
                  necrevistonnezrN Online
                  necrevistonnezr
                  wrote on last edited by
                  #47

                  ... thought I got a "Failed pipeline for master | 3dbdac62" notification... 🙂

                  1 Reply Last reply
                  1
                  • N NCKNE referenced this topic on
                  • necrevistonnezrN necrevistonnezr

                    With @imc67 permission, I created a community guide from this thread...

                    humptydumptyH Offline
                    humptydumptyH Offline
                    humptydumpty
                    wrote on last edited by
                    #48

                    @necrevistonnezr link to the guide, pretty please!

                    1 Reply Last reply
                    0
                    • necrevistonnezrN Online
                      necrevistonnezrN Online
                      necrevistonnezr
                      wrote on last edited by
                      #49

                      https://docs.cloudron.io/guides/community/

                      humptydumptyH 1 Reply Last reply
                      0
                      • necrevistonnezrN necrevistonnezr

                        https://docs.cloudron.io/guides/community/

                        humptydumptyH Offline
                        humptydumptyH Offline
                        humptydumpty
                        wrote on last edited by
                        #50

                        @necrevistonnezr I was looking in the forum 🤦 Thank you!

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Bookmarks
                          • Search