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.
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
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
#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
Świetnie napisane. Pozdrawiam serdecznie.
OdpowiedzUsuń