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?

link|improve this question

7  
There is nothing more anoying than access denytion becaus you live in a specific country. – WTP Aug 18 '09 at 8:01
I also do not recommend it, but it is a requirement of the client – haim evgi Aug 18 '09 at 8:04
Except for getting sued because of sharing content with people not eligible for it :). – Zed Aug 18 '09 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. – Jacco Aug 18 '09 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. – rytis Feb 1 '10 at 20:03
show 8 more comments
feedback

migrated from stackoverflow.com Aug 18 '09 at 10:50

This question came from our site for professional and enthusiast programmers.

7 Answers

up vote 10 down vote accepted

Use mod_geoip module. http://www.maxmind.com/app/mod%5Fgeoip

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
link|improve this answer
feedback

For IIS, you can install the ISAPI product to perform filter by country.

http://www.ip2location.com/ip2location-isapi-filter.aspx

You can use the database subscription from IP2Locationlcom for Apache as wel..

link|improve this answer
feedback

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.

link|improve this answer
+1 for referencing a source, though I don't think using rewrite rules is the way to go, the list might be quite large! – Paul Dixon Aug 18 '09 at 7:58
You are absolutely correct. It all depends on how many and what type of countries to block... – Zed Aug 18 '09 at 8:31
feedback

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.

link|improve this answer
feedback

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.

link|improve this answer
feedback

I have came across this site, which claims to ban country,

IMO, the best way it to block using the .htaccess file

link|improve this answer
feedback

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.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.