I have a website that I do not want to be viewed by entire countries. The website is running on a LAMP server. How can I achieve this?
-
7There is nothing more anoying than access denytion becaus you live in a specific country.– user42235Aug 18, 2009 at 8:01
-
I also do not recommend it, but it is a requirement of the client– haim evgiAug 18, 2009 at 8:04
-
Except for getting sued because of sharing content with people not eligible for it :).– ZedAug 18, 2009 at 8:33
-
It is impossible to block access from countries, the internet is not configured that way. You will get many false positives and false negatives.– JaccoAug 18, 2009 at 8:42
-
there are many legal reasons to block countries, for example some countries do not allow online gambling and if you happen to run a gambling site and don't want to get into jail in that country, you might need to block those countries.– rytisFeb 1, 2010 at 20:03
6 Answers
Use mod_geoip module. http://www.maxmind.com/app/mod_geoip
For example:
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
# ... place more countries here
Deny from env=BlockCountry
You can use rewrite_mod's REMOTE_ADDR condition to redirect banned users to a single page describing the fact that they are not allowed to enter, or simply give them a 403 error.
RewriteCond %{REMOTE_ADDR} ^123\.123\.123\.[0-9]{3}$
RewriteRule .* ...
To get the range of IPs for a country, get the Maxmind database for example.
-
+1 for referencing a source, though I don't think using rewrite rules is the way to go, the list might be quite large! Aug 18, 2009 at 7:58
-
You are absolutely correct. It all depends on how many and what type of countries to block...– ZedAug 18, 2009 at 8:31
Check the IP and determine which country hosts it, and then block it. Of course it's not accurate, but it's something. Generally I'm not a fan of doing this though; but maybe it's required for some legal reason.
You can filter the country ISP's ip adresses. There are a lot of geolocation database, to help you to identify the users country by ip.
I have came across this site, which claims to ban country,
IMO, the best way it to block using the .htaccess file
You can use services like this:
http://www.maxmind.com/app/geolitecountry
to extract info which IP ranges belong to which countries and block them. Keep in mind if you block too many ranges on a high traffic web site you may see some heavy utilisation on your firewalls.