publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

TAGI: apache , .htaccess , geolokalizacja , ip

2009-06-03 15:48  |  Adam Golański

Jak zablokować dostęp do strony WWW dla poszczególnych krajów? [.htaccess]

Jak zablokować dostęp do strony WWW dla poszczególnych krajów? [.htaccess]

Czasem zdarza się, że chcemy, aby nasza strona internetowa była np. dostępna tylko dla internautów z Polski. Mogliśmy na przykład podpisać umowę z dostawcami treści, którzy zakazują nam udostępniania ich materiałów poza Rzeczpospolitą. Jak rozwiązać taki problem?

Dla osób korzystających z serwera Apache, pomocą okaże się odpowiednie przygotowanie pliku .htaccess. Ręcznie tego raczej jednak nie zrobimy: przygotowanie odpowiedniego ciągu zablokowanych adresów IP to niezwykle nużące zadanie. Dlatego możemy skorzystać z API geolokalizacji IP, dostarczanego przez serwis blogama.org oraz specjalnego skryptu, który wygeneruje nam plik dostępowy.

Wpierw jednak należy zrozumieć, jak działają reguły w pliku .htaccess. Jeśli ustawimy własność allow dla krajów "PL, DE" (Polska i Niemcy), dopuszczony będzie tylko ruch przychodzący z Polski i Niemiec. Jeśli ustawimy własność deny dla "US, CA", zablokowany będzie tylko ruch przychodzący ze Stanów Zjednoczonych i Kanady. Z pełną listą kodów ISO dla poszczególnych krajów można zapoznać się tutaj.

Wygenerowanie pliku .htaccess za pomocą API geolokalizacji IP jest bardzo proste – usługa dostępna jest pod adresem iplocationtools.com. Przykładowo wygenerowany plik .htaccess może wyglądać następująco:

iplocationtools.com/country_query.php?country=PL&output=htaccess_allow

gdzie parametr country określa listę kodów krajów, oddzielonych od siebie przecinkami, zaś output to typ blokowania.

W rezultacie otrzymamy plik wyglądający następująco:

#COUNTRY_BLOCK_START

<Limit GET HEAD POST>

order deny,allow
allow from 57.66.162.0/24
allow from 57.66.195.0/26
allow from 57.66.195.64/27
allow from 57.66.195.96/28

[…]

deny from all

</Limit>

#COUNTRY_BLOCK_END

Jednak bloki IP często przechodzą z rąk do rąk. Generowanie za każdym razem pliku .htaccess mogłoby się okazać niewygodne. Pomóc może nam skrypt, stworzony przez autorów mechanizmu geolokalizacji z blogama.org.

Zanim go uruchomimy, należy w katalogu roboczym z którego korzystamy stworzyć plik htaccessfile.txt, do którego wprowadzamy wszystkie ścieżki dostępowe do plików .htacces, które chcemy zmieniać. Na przykład:

/var/www/mojblog.pl/.htaccess
/var/www/mojafirma.pl/.htaccess

W samym skrypcie na początku można znaleźć parametry konfiguracyjne:

WORKDIR="/var/www/" – katalog z prawami zapisu, w którym umieszczony jest skrypt,
HTACCESSFILE="htaccessfile.txt" – plik ze ścieżkami dostępu do plików .htaccess,
HTACCESSBLOCK="htaccess-blocklist.txt" – plik roboczy,
TEMPFILE="htaccess.temp" – plik roboczy,
COUNTRIES="PL" – lista krajów,
TYPE="allow" – typ dostępu: ekskluzywny (allow) lub inkluzywny (deny).

Następnie należy nadać skryptowi prawa wykonawcze:

chmod +x nazwaskryptu.sh

i dodać go do crontabu

* * * * * /ścieżka/nazwaskryptu.sh >/dev/null 2>&1

Dzięki temu będziemy mogli regularnie aktualizować bazę zablokowanych (bądź dopuszczonych) adresów.

A oto wspomiany skrypt:

#!/bin/bash
###BLOGAMA.ORG###
###MODIFY THIS SECTION###
WORKDIR="/var/www/"
HTACCESSFILE="htaccessfile.txt"
HTACCESSBLOCK="htaccess-blocklist.txt"
TEMPFILE="htaccess.temp"
COUNTRIES="PL"
TYPE="allow"
#########################
#####DO NOT MAKE MODIFICATIONS BELOW#####
cd $WORKDIR
#Get the file from blogama.org API
wget -c --output-document=$HTACCESSBLOCK "http://blogama.org/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

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł