Blocking TorGuard IPs on router with OpenWRT system

September 24, 2022    Blog Post

TorGuard VPN Service encrypts your internet access and provides an Anonymous IP so you can browse securely.


Why to block TorGuard IPs ?

Recently, my server start reciving lots of attacks from IPs which are exit nodes of TorGuard VPN. To be honest, I never heard about TorGuard so I had to looks to attackes IPs to be able to identify source network. Looking to reputation of few IP addresses I found that all was low and with lots of negative comments. After experiencing mass-scanns and over 100 attempsts of hack and spams, I decided to find a way to block this network.

How this works ?

I was hoping to find website with IPs of TorGuard VPN exit nodes on company website, and I was not disappointed. All required information I found under url https://torguard.net/network. I decided to use this same approach as I used regards blocking TOR network - create ipset setname which will contains all IPs published on url.

This time I decided to use Python with Pandas module to extract hostnames column from table published on TorGuard website. Using Python allowed to get me these data easier but unfortunately my router was not able to install Pandas module, so I run script on one of my RPi and transfer generated upset file to router.

This solution will work on any *nix system with installed iptables and ipset.


Installation

Prerequirements

Script is written in Python3 so obviously you will need it. Additionally, you need 3 mayor modules to be installed: pandas, requests and lxml. Use pip to install this modules:

$ sudo pip install pandas lxml requests

On Linux or router with OpenWrt system, you will need iptables and ipset packages to be installed. On OpenWrt you need to run commands:

# opkg update
# opkg install ipset

To clone repository with torguard_deny_list source code you will need git installed on system where you will run script or on your workstation from which you can move source files to destination system.

To clone repository run command:

# git clone https://github.com/monsoft/torguard_deny_list.git

** Running script **

To run script go to directory torguard_deny_list, change mode of torguard.py file to 0755 and run: ./torguard.py:

$ cd torguard_deny_list
$ chmod 0755 torguard.py
$ ./torguard.py
TorGuars nodes IP builder by Irek 'Monsoft' Pelech

Generating torguard_ipset.txt ipset list
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
IPs have been written to torguard_ipset.txt file. Please import it to your ipset list.

When script finish its work, you should find file torguard_ipset.txt with TorGuars VPN exit nodes IPs.

** Implementation **

Add ipset and rule configuration to IPtables firewall by adding below lines to end of /etc/config/firewall file right bofore config include line:

config ipset   
        option name 'torguard'
        option match 'src_ip'
        option storage 'hash' 
        option enabled '1'     
                               
config rule
        option src 'wan'
        option ipset 'torguard'
        option dest '*'   
        option target 'DROP' 
        option name 'DENY-from-TORGUARD-Network'
        list proto 'all'

and restart firewall service:

# /etc/init.d/firewall reload

Copy torguard_ipset.txt file to your router and import IP list:

ipset flush torguard
ipset restore -! < torguard_ipset.txt

Check if import was successful by running command:

# ipset list torguard|wc -l
652

Automation

I suspect that details on TorGuard website are constantly changing so it will be required to run this process at last once a week, so IP list will be up to date. I use cron to run script on my RPi and transfer file torguard_ipset.txt to my router, then I run ipset import commands to update torguard set.