Introduction
This tool will automatically create apache rules on Linux system to block all connection from one country or more. The blocklist is created with an API that fetch data in our SQL database based on IP address country location.
Data accuracy
The list of IP address by country below is a grouping of IP by country and CIDR of our database. The data has over 99.5% accuracy on a country basis. The database is updated monthly.
API Usage
First you need to know the code (ISO 3166 format) of the country you would like to block. The full list is available hereOnce you have the country code, you can now get the list at the following url (Afghanistan and Argentina in this example). If your browser show the data on a single line, simply view the page source code :
http://ipinfodb.com/country_query.php?country=AF,AR&output=htaccess_deny
#COUNTRY_BLOCK_START
<Limit GET HEAD POST>
order allow,deny
deny from 58.147.128.0/19
deny from 67.212.160.0/24
deny from 80.247.139.0/24
deny from 82.205.190.0/21
[...]
allow from all
</Limit>
#COUNTRY_BLOCK_END
How the script is working
You will have to create a text file with all .htaccess files (with complete path) you wish to update with the script. If you have other information in your htaccess files they will still remain there, the script will only update the portion between the tags "#COUNTRY_BLOCK_START" and "#COUNTRY_BLOCK_END".
Before you start with the script
Create a text file named htaccessfile.txt. In that file, put all (existing!) .htaccess files you wish to update. For example :/var/www/example.com/.htaccess
/var/www/mydomain.com/.htaccess
Script configuration
On top of the script, you will find this section. You need to modify these variables if needed :###MODIFY THIS SECTION### WORKDIR="/home/someuser/" HTACCESSFILE="htaccessfile.txt" HTACCESSBLOCK="htaccess-blocklist.txt" TEMPFILE="htaccess.temp" COUNTRIES="AF,AR" TYPE="deny" #########################
HTACCESSFILE : is the file where you will put your .htaccess paths
HTACCESSBLOCK and TEMPFILE : are temporary file that will be deleted at the end of the script execution
COUNTRIES : is the list of countries you wish to deny/allow, separated with a coma
TYPE : "allow" or "deny" access to these countries
Automatic bash script
The following script will fetch the right IP addresses of the country you would like to block from our API and then add these rules in iptables.#!/bin/bash ###ipinfodb.com### ###MODIFY THIS SECTION### WORKDIR="/home/someuser/" HTACCESSFILE="htaccessfile.txt" HTACCESSBLOCK="htaccess-blocklist.txt" TEMPFILE="htaccess.temp" COUNTRIES="AF,AR" TYPE="deny" ######################### #####DO NOT MAKE MODIFICATIONS BELOW##### cd $WORKDIR #Get the file from blogama.org API wget -c --output-document=$HTACCESSBLOCK "http://ipinfodb.com/country_query.php?country=$COUNTRIES&output=htaccess_$TYPE" for i in $( cat $WORKDIR$HTACCESSFILE ); do if [ -f $i ]; then cat $i 2>&1 | grep "COUNTRY_BLOCK_START" if [ "$?" -ne "1" ]; then #ALREADY IN HTACCESS sed '/#COUNTRY_BLOCK_START/,/#COUNTRY_BLOCK_END/d' $i > $WORKDIR$TEMPFILE cat $WORKDIR$HTACCESSBLOCK >> $WORKDIR$TEMPFILE mv $WORKDIR$TEMPFILE $i else #NOT IN HTACCESS cat $WORKDIR$HTACCESSBLOCK >> $i fi fi done rm -f $WORKDIR$HTACCESSBLOCK

