joi, 3 noiembrie 2011

Tribul Apache este atacat ! Cum il ajutam ?

Am vorbit articolul trecut despre cum folosim blocarea anumitor tari la nivelul unor porturi sau pentru toate porturile. Sa luam in discutie situatia in care chiar daca blocam accesul pe portul 80 a unor tari gen China, Ukraina, Rusia, etc. totusi trebuie sa admitem ca Google trebuie sa ajunga pe site-ul nostru. Asadar, cel putin  tari precum SUA, Canada si bineinteles Romania vor trebui sa aiba acces la portul 80. Se pune problema insa daca dorim sau nu ca vizitatorii din toate tarile carora le permitem accesul pe portul 80 sa pot sa posteze/inregistreze pe site-ul nostru. Daca nu avem aceasta intentie ori daca vom dori sa blocam accesul la anumite pagini sau sa redirectam cererile venite din alte tari putem folosi modulul mod_geoip.
Cateva exemple pe care le puteti folosi in .htaccess:

Intr-un forum phpBB3 nu permitem utilizatorilor din alte tari sa se inregistreze/autentifice/vizualizeze useri
SetEnvIf GEOIP_COUNTRY_CODE RO AllowCountry
<FilesMatch "^ucp.php|posting.php|memberlist.php">
    Order Deny,Allow
        Deny from all
Allow from env=AllowCountry
Allow from localhost
ErrorDocument 403 /errors/500.php
</FilesMatch>



Puteti trece in lista mai multe tari (Romania, SUA, Canada) ca mai jos:

SetEnvIf GEOIP_COUNTRY_CODE RO AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE CA AllowCountry



Permitem tuturor tarilor neblocate in iptables sa se conecteze pe portul 80 cu exceptia tarilor din lista BlockCountry

SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
Deny from env=BlockCountry>


Redirectam cererile venite pe portul 80 din China catre http://www.google.ro
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CN$
RewriteRule ^(.*)$ http://www.google.ro$1 [L]


Redirectam cererile venite pe portul 80 din China, Ukraina si Rusia catre
http://www.google.ro

RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CN|UK|RU)$
RewriteRule ^(.*)$ http://www.google.ro$


Acum sa instalam.
Copiati continutul scriptului de mai jos intr-un fisier numit mod_geoip ( sau descarcati-l de <<< AICI >>>), il puneti pe server/desktop intr-un folder (de exemplu /home) , il faceti executabil cu comanda
sudo chmod +x /home/mod_geoip
si il lansati in executie cu comanda
sudo /home/mod_geoip
Instalarea dureaza aproximativ 2 minute si va crea un fisier de actualizare a bazei de date cu IP-urile tarilor in mod automat (cu cron) in fiecare luna.

Acesta este scriptul:

if [ $LOGNAME != "root" ] ; then
echo -e "${yellow}Trebuie sa fiti logat ca ${Red}root${yellow} sau sa folositi ${Red}[sudo]${yellow} pentru a executa acest script. Scriptul nu a fost executat...${reset}"
exit 1
fi
sudo apt-get -y install libapache2-mod-geoip
wget -O /usr/share/GeoIP/GeoIP.dat.gz http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
cd /usr/share/GeoIP
gunzip -f GeoIP.dat.gz
sudo apt-get -y install bind9-host
# -f (force) previne intrebarea pentru suprascrierea fisierului existent
/etc/init.d/apache2 restart

echo -e "#!/bin/bash
wget -O /usr/share/GeoIP/GeoIP.dat.gz http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
cd /usr/share/GeoIP
gunzip -f GeoIP.dat.gz" > /etc/cron.monthly/geoip_apache

sudo chown -R root:root /etc/cron.monthly/geoip_apache
chmod +x "/etc/cron.monthly/geoip_apache"
chmod 755 /etc/cron.monthly/geoip_apache 


Acum apasii va sunt prieteni ...

Niciun comentariu: