7. Az Interenet-használat korlátozása
 
    7.1. Az RPMforge tároló telepítése
 
A Squidguard program telepítése előtt az alapértelmezett tárolókhoz (repository) adjuk az RPMforge tárolót. Indítsuk el a Terminál-t és kérjünk root jogosultságot. Adjuk ki a következő parancsot:
 
[root@centos5 ~]# yum install yumex yum-fastestmirror yum-priorities
 
Módosítsuk az /etc/yum.repos.d/CentOS-Base.repo állományt:
 
[root@centos5 ~]# mcedit /etc/yum.repos.d/CentOS-Base.repo
 
A [base], [updates], [addons] és a [extras] részekhez írjuk a priority=1 sort. A [centosplus] részhez pedig a priority=2 sort (7.1. ábra).
 
pr
7.1. ábra
 
Telepítsük a tárolót:

 
[root@centos5 ~]# rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
 
Amennyiben a parancsban hivatkozott állomány nem elérhető, a http://dag.wieers.com/rpm/FAQ.php címen keressük meg a „How to configure to use RPMforge?” részt. Azt a parancsot másoljuk a Terminál-ablakba, amelyik a Red Hat Enterprise Linux 5 operációs rendszerre és i386 architektúrára vonatkozik (7.2. ábra).
 
dag
7.2. ábra
 
Módosítsuk az /etc/yum.repos.d/rpmforge.repo állományt:

 
[root@centos5 ~]# mcedit /etc/yum.repos.d/rpmforge.repo
 
Az állomány végére írjuk be a priority=11 sort, az enabled értékét pedig módosítsuk 0-ra (7.3. ábra)
 
rpm
7.3. ábra
 
    7.2. A SquidGuard telepítése

 
A SquidGuard egy átirányító és elérést szabályozó kiegészítés a Squid-hez. Szabad szoftver, használata rugalmas és gyors szűrést tesz lehetővé. A Squid szabványos átirányítási felületét használja.
 
Telepítsük a SquidGuard programot
 

[root@centos5 ~]# yum --enablerepo=rpmforge install squidguard
 
A SquidGuard konfigurációs állománya az /etc/squid/squidguard.conf. Készítsünk róla másolatot a /root/conf.orig könyvtárba:
 
[root@centos5 ~]# mkdir /root/conf.orig
[root@centos5 ~]# cp /etc/squid/squidguard.conf /root/conf.orig
   
 
    7.3. Feketelisták

 
A SquidGuard használatához szükség van egy kategóriákba rendezett Internetes címadatbázisra azokról az oldalakról, amelyek látogatását megtiltjuk a felhasználóknak. A SquidGuard weboldalán (http://www.squidguard.org) több javasolt forrást is találunk a Blacklists menüpont alatt (7.4. ábra).
 
bl
7.4. ábra
 
Ezek között vannak ingyenesek és olyanok is, amelyek használatáért fizetni kell. Az http://urlblacklist.com/?sec=download címről letölthető adatbázis közel kétmillió címet tartalmaz kategóriákba rendezve. Nem ingyenes, de szabadon kipróbálható. Töltsük le a bigblacklist.tar.gz tömörített állományt az oldalról (7.5. ábra).

 
ub
7.5. ábra
 
A Midnight Commander segítségével másoljuk a tar.gz állományból a /var/lib/squidguard könyvtárba (7.6. ábra) a következő könyvtárakat:

 
ads adult aggressive 
drugs filehosting  filesharing
gambling  games hacking
malware porn proxy
warez
  
mcbl
7.6. ábra
 
Az átmásolt könyvtárak mindegyike tartalmaz egy domains és urls szöveges állományt. A porn könyvtár egy expressions (kifejezések) állományt is, amelyik olyan szavakat tartalmaz, ami az adott kategóriába tartozó weboldalak címeire jellemző. A szöveges állományokhoz hozzáírhatunk, vagy törölhetünk belőlük sorokat. A porn/domains állomány például tartalmazza a tar.hu portált is.

Az állományok felhasználásával szabályozhatjuk hozzáférést az Internethez felhasználók, felhasználói csoportok, IP címek és időintervallumok alapján. Azt viszont ne gondoljuk, hogy ezzel megoldottuk a tanulók számára nem ajánlott oldalak tiltását. Az Internet naponta változó világában ez nem lehetséges, és nem is lehet cél. Az iskola vezetésével egyeztetve ki kell dolgozni egy szabályzatot erre vonatkozólag, és azt ismertetni a felhasználókkal.
 
A következő parancsokkal hozzunk létre a hirdetes nevű könyvtárat, benne két állományt és ezeket adjuk a squid felhasználó tulajdonába.

 
[root@centos5 ~]# mkdir /var/lib/squidguard/hirdetes
[root@centos5 ~]# touch /var/lib/squidguard/hirdetes/domains
[root@centos5 ~]# touch /var/lib/squidguard/hirdetes/urls
[root@centos5 ~]# chown -R squid:squid /var/lib/squidguard
   
Hozzuk létre a /var/www/html/images könyvtárat:
 

[root@centos5 ~]# mkdir /var/www/html/images
   

Másoljuk a server5.zip csomagban (http://kmf.uz.ua/centos/gui/server5.zip) található következő állományokat a megadott helyre:

 
Az állomány neve Könyvtár
squidguard.conf /etc/squid
nulbanner.png /var/www/html/images
blocked.gif /var/www/html/images
squidGuard.cgi /var/www/cgi-bin
rebuild.scp /root

 
A squidGuard.cgi tulajdonságait módosítsuk:
 
[root@centos5 ~]# chmod 755 /var/www/cgi-bin/squidGuard.cgi
 
Keressük meg az /etc/squid.conf állományban a következő sort és töröljük a sor eleji # karaktert:
 
redirect_program /usr/bin/squidguard -c /etc/squid/squidguard.conf
 
A squidGuard működésének ellenőrzéséhez indítsuk el a webszervert és állítsuk be az automatikus indulást:
 
[root@centos5 ~]# service httpd start
[root@centos5 ~]# chkconfig --levels 235 httpd on
 
A SquidGuard a gyorsabb működés érdekében nem a szöveges állományokkal dolgozik, hanem átalakítja Berkeley DB formátumba. A server5.zip csomagban találjuk a rebuild.scp állományt. Másoljuk a /root könyvtárba. Adjunk futási jogot neki és indítsuk el:
 
[root@centos5 ~]# chmod u+x /root/rebuild.scp
[root@centos5 ~]# ./rebuild.scp
 
A program elindítása után várjuk meg, amíg az felépíti a db adatbázisokat a szöveges állományok alapján (7.7. ábra) és újrakonfigurálja Squid-et.
 
rd
7.7. ábra
 
A rebuild.scp állomány tartalma:
 

#!/bin/bash
/usr/bin/squidguard -C all
#/usr/bin/squidguard -C /var/lib/squidguard/porn/domains
#/usr/bin/squidguard -C /var/lib/squidguard/porn/urls
chown -R squid:squid /var/lib/squidguard
squid -k reconfigure
 
(A második sor minden adatbázist újraépít és ez több percig is eltarthat. A harmadik és a negyedik sorban példát látunk arra, hogy csak az egyik kategória (porn) adatbázisait építjük újra. Természetesen, ehhez a második sor elé írjuk a # jelet, és a harmadik és a negyedik sorban töröljük.)
 
    7.4. A SquidGuard működésének ellenőrzése

 
Az általunk beállított korlátozások működését ellenőrizzük le két kliens számítógép segítségével. Az egyik IP címét tartalmazza az /etc/squid/nojelszo.txt állomány, például 192.168.55.101. A másik munkaállomás legyen a szaktanterem egyik gépe, 192.168.55.20 IP címmel. Már tárgyaltuk, hogy az állományban felsorolt munkaállomásokról felhasználói név és jelszó megadása nélkül elérhető az Internet. A SquidGuard ezen nem változtatott, de most már erre a csoportra is érvényes a tartalomszűrés. A squidguard.conf-ban ezt a következő részlet határozza meg:
 
nojelszo  {
pass !ads !adult !hirdetes !aggressive !drugs !gambling !games !hacking !malware !porn !proxy !warez all
}
 
A felkiáltójel tagadást jelez, vagyis az ads, adult, … warez csoport tiltott, minden más (all) szabad. Próbáljuk ki a működését. A /var/lib/squidguard/ads/games állományban szerepel a 123-games.net cím. Próbáljuk megnyitni az oldalt:
  
g101
7.8. ábra

A SquidGuard nem engedi a hozzáférést, átirányít az általunk felmásolt SquidGuard.cgi állományra (ezért volt szükség a webszerver elindítására). Ennek segítségével láthatjuk a saját  IP címünk, milyen csoportba tartozunk mi vagy a munkaállomás, milyen internetes címet próbáltunk megnyitni, a pontos időt és dátumot a szerveren és azt is, hogy mi az oka a tiltásnak.
 
Nyissuk meg ugyanezt az oldalt a szaktanterem gépéről, tanar csoportba tartozó felhasználói névvel és jelszóval (7.9. ábra).
 
g20
7.9. ábra

Látjuk, hogy az IP címen kívül csak a Client group sor változott. A tanar csoportnak sem engedi a hozzáférést.
 
Azokra a címekre, amelyek az ads csoportba tartoznak, és azokra, amelyeket később a hirdetes csoportba beírunk, más szabályok vonatkoznak. A kiszolgáló helyettesíti ezeket a tartalmakat a nulbanner.png képpel, amit a /var/www/html könyvtárba másoltunk. Ezt a következő squidguard.conf részlet határozza meg:
 
dest ads {
    domainlist ads/domains
    urllist ads/urls
    redirect http://localhost/images/nulbanner.png
}
 
Ellenőrizzük a helyettesítés működését a bo.com címet beírva, amit tartalmaz a /var/lib/squidguard/ads/domains állomány.
 
nb
7.10. ábra
 
Az átirányítás megtörtént, a 3 pixel méretű piros-fehér-zöld képet látjuk a beírt oldal helyett. Ez a megoldás esetünkben azért jobb mint az előző, mert weboldalak részeiként megjelenő reklámtartalmakat szinte észrevétlenül cserélhetjük le, gyorsítva ezzel az oldal megjelenését.

 
A tanulói csoportba tartozó felhasználói nevet és jelszót írva a böngészőbe, a kért weboldal csak akkor jelenik meg, ha a squidguard.conf állományban megadott időben történik a kérés. Ezt a következő kódrészlet határozza meg:
 
time tanulok-time {
        weekly m 11:15-11:35 12:15-16:59
        weekly t 11:15-11:35 12:15-16:59
        weekly w 11:15-11:35 11:46-16:59
        weekly h 11:15-11:35 11:46-16:59
        weekly f 11:15-11:35 11:46-16:59
        weekly a 11:15-11:35 11:46-16:59
        weekly s 09:01-12:00
}
 
to
7.11. ábra
 
A tanulói azonosítóval – hozzáférés megtagadva. A Target class = none (Cél osztály = nincs) sor mutatja, hogy most nem tartalomszűrésről van szó, hanem ebben az időpontban a tanulók csoportnak nincs hozzáférése az Internethez.
A tanulók Internet-hozzáférésének napi időszakjait módosíthatjuk, a squidguard.conf konfigurációs állományban megváltoztatva a tanulok-time részt. Új időintervallumokat is adhatunk a jelenlegiekhez a megadott formátumban.
 
Módosítsuk a hozzáférést, úgy hogy a tanulóknak működjön az Internet. A 7.11. ábrán látjuk az aktuális dátumot és időt, tehát most a hétfői sort kell módosítani. Engedélyezzük 21:00-tól 23:59-ig a hozzáférést:

 
weekly m 11:15-11:35 12:15-16:59 21:00-23:59

A módosítás érvényre jutásához ki kell adni a következő parancsot:
 
[root@centos5 ~]# squid -k reconfigure
   
A squid újrakonfigurálása (squid -k reconfigure) után, az aktuális oldal újratöltését kérve a böngészőprogramban megjelenik a tartalom (7.12. ábra).
  
go
7.12. ábra
 
Már tárgyaltuk, hogy a tartalomszűrés működésének módosításához a megfelelő szöveges állomány módosítása után le kell futtatni a /root/rebuild.scp szkriptet.
Próbáljuk ki ezt a gyakorlatban. Az urlblacklist.com adatbázisa sok esetben túl szigorú a magyar tárhelyekhez, többek között a tar.hu is tiltva van. Engedélyezzük a hozzáférést ehhez a portálhoz. Megnyitásakor (7.13. ábra) a Target class=adult sor mutatja, hogy melyik szöveges állomány tartalmazza ezt a címet: a /var/lib/squidguard/adult/domains. Nyissuk meg szerkesztésre az mcedit program segítségével:

 
[root@centos5 ~]# mcedit /var/lib/squidguard/adult/domains
 
(vagy F4 billentyű az állományon az mc programban)
Az F7 funkcióbillentyű segítségével keressünk rá a tar.hu sorra és töröljük azt. Mentsük az állományt (F2).
 
tar1
7.13. ábra
 
Mivel a tar.hu sort a porn cél osztály is tartalmazza, töröljük abból is:
 
[root@centos5 ~]# mcedit /var/lib/squidguard/porn/domains
 
Mentsük ez az állományt is építsük újra az adatbázis fájlokat:
 
[root@centos5 ~]# /root/rebuild.scp
 
Ellenőrizzük az oldal elérhetőségét (7.14. ábra):
 
tar2
7.14. ábra

A SquidGuard megtagadja a hozzáférést azokhoz a weboldalakhoz, amelyek címében szerepel olyan szó, amit a /var/lib/squidguard/porn/experssions szöveges állomány tartalmaz. Ez azt is jelenti, hogy a keresőoldalak találati listájához is megtíltja a hozzáférést, ha ezen szavak valamelyikét írjuk be keresettként. Az experssions  állományhoz hozzáírhatunk szavakat, hiszen az csak angolokat tartalmaz. A lista érvényre jutásához újra kell konfigurálni a Squid-et a squid -k reconfigure paranccsal.

Jó ha tudjuk, hogy azzal a felhasználói névvel, amelyiket telepítésénél adtunk meg (itt: pferi) nem fog működni az Internet. A root felhasználói névvel sem. Ezeket a felhasználói neveket ugyanis nem tartalmazza az /etc/squid/csoportok/tanarok.txt állomány. Ne változtassunk ezen, biztonsági szempontból jobb így. Azokat az azonosítókat, amelyekkel be lehet jelentkezni magára a kiszolgálóra, ne használjuk a munkaállomásokon. Hozzunk létre saját magunk részére egy új felhasználót, ez a felhasználó legyen a tanar csoport tagja, és ezzel használjuk az Internetet a kliens gépeken.

Itt jegyzem meg, hogy a tanárok és tanulók listáját az /etc/squid/csoportok könyvtárból induláskor olvassa a Squid. Ezért a felhasználók létrehozására és törlésére használt két szkript utolsó sorai megvizsgálják, hogy fut-e Squid, és működő szolgáltatás esetén újrakonfigurálják azt. Így a létrehozott felhasználói névvel és jelszóval azonnal működik az Internet.
 
    7.5. A squidguard.conf állomány
 
A teljes /etc/squid/squidguard.conf állomány:
 

#----------------------------------------------------------------
#   SquidGuard CONFIGURATION FILE
#----------------------------------------------------------------
# CONFIGURATION DIRECTORIES
dbhome /var/lib/squidguard
logdir /var/log/squid
# TIME RULES:
# abbrev for weekdays:
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat
# s = vasarnap, m = hetfo, t =kedd, w = szerda, h = csutortok, f = pentek, a = szombat

time tanulok-time {
        weekly m 11:15-11:35 12:15-16:59 21:00-23:59
        weekly t 11:15-11:35 12:15-16:59
        weekly w 11:15-11:35 11:46-16:59
        weekly h 11:15-11:35 11:46-16:59
        weekly f 11:15-11:35 11:46-16:59
        weekly a 11:15-11:35 11:46-16:59
        weekly s 09:01-12:00
}
time tanar-time {
        weekly * 00:00-24:00    # tanaroknak mindig
}
# SOURCE ADDRESSES:
#
src nojelszo {
    iplist /etc/squid/nojelszo.txt
    }
#
src tanulok {
userlist /etc/squid/csoportok/tanulok.txt
}
#
src tanar {
userlist /etc/squid/csoportok/tanar.txt
}
# DESTINATION CLASSES:
dest ads {
    domainlist ads/domains
    urllist ads/urls
    redirect http://localhost/images/nulbanner.png
}
dest adult {
    domainlist adult/domains
    urllist adult/urls
}
dest aggressive {
    domainlist aggressive/domains
    urllist aggressive/urls
}
dest drugs {
    domainlist drugs/domains
    urllist drugs/urls
}
dest filehosting {
    domainlist filehosting/domains
    urllist filehosting/urls
}
dest filesharing {
    domainlist filesharing/domains
    urllist filesharing/urls
}
dest gambling {
    domainlist gambling/domains
    urllist gambling/urls
}
dest games {
    domainlist games/domains
    urllist games/urls
}
dest hacking {
    domainlist hacking/domains
    urllist hacking/urls
}
dest malware {
    domainlist malware/domains
    urllist malware/urls
}
dest porn {
    domainlist porn/domains
    urllist porn/urls
    expressionlist  porn/expressions
}
dest proxy {
    domainlist proxy/domains
    urllist proxy/urls
}
dest warez {
    domainlist warez/domains
    urllist warez/urls
}
dest hirdetes {
        domainlist      hirdetes/domains
        urllist         hirdetes/urls
        redirect        http://localhost/images/nulbanner.png
#       log             /var/log/squid/hirdetes.log
}
# ACLs
acl {
# A nojelszo src-nek:
     nojelszo  {
     pass !ads !adult !hirdetes !aggressive !drugs !gambling !games !malware !porn !proxy !warez all
    }
# A TANULOK szabalyai
     tanulok within tanulok-time {
     pass !ads !adult !hirdetes !aggressive !drugs !filehosting !filesharing !gambling !games !hacking !malware !porn !proxy !warez all
     redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
    }
# TANAROK szabalyai
     tanar within tanar-time {
     pass !ads !adult !hirdetes !aggressive !drugs !gambling !games !malware !porn !proxy !warez all
     redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
    }
# Alapertelmezes
     default {
     pass none
     redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
    }
}

 

Figyeljük meg az /etc/squid/squidguard.conf eddig nem tárgyalt részeit.
A „TIME RULES” részben meghatározunk időszakokat, amikor a tanulók használhatják az Internetet. Természetesen módosíthatjuk az intervallumokat, vagy újakat adhatunk hozzá. A tanároknak is beállíthatunk időkorlátot, de a fenti állomány korlátlan hozzáférést biztosít (* 00:00-24:00)
 
A „SOURCE ADDRESSES” részben a tanulók és a tanárok csoportját határozzuk meg a fentebb tárgyalt, az /etc/squid/csoportok könyvtárban lévő állományokkal. Az iplist részben azt az állományt adjuk meg, amelyikben azoknak a gépeknek az IP címei vannak, amelyekről felhasználói név megadása nélkül használható az Internet.
 
A „DESTINATION CLASSES” részben meghatározzuk azokat az Internet-cím osztályokat, amelyek alapján a szűrést végezzük.
 
Az „ACLs” (Access Control List) részben maguk a korlátozó szabályok vannak. Vizsgáljuk meg a tanulók szabályait részletesebben:
 
 1.  # A TANULOK szabalyai
 2.  tanulok within tanulok-time {
 3.  pass !ads !adult !hirdetes …
 4.  redirect http://127.0.0.1/cgi-bin/squidGuard.cgi...
 
Az első sor csak megjegyzés. A második sor meghatározza, hogy a tanulok csoportra a tanulok-time időszakokban a 3. sorban meghatározott szabály érvényes: engedélyez mindent kivéve ads, adult, stb. Tiltott oldal estén átirányít a squidGuard.cgi állományra (4. sor), olyan paraméterekkel, ami megjeleníti a kliens számítógép IP címét, csoportot, a tiltott oldal címét, a tiltás okát és a kiszolgáló lokális idejét. A tanulok-time időszakon kívül szintén átirányít a squidGuard.cgi állományra, de a tiltás osztálya sorba (Target class:) none jelenik meg.
 
    7.6. Reklám-animációk kikapcsolása
 
Az hirdetes nevű osztályt mi hoztuk létre, az állományok üresek. Ha a /var/lib/squidguard/hirdetes/domain állományba beírunk domain címeket, akkor az azokról érkező tartalmakat a böngészőprogram nem jeleníti meg, hanem a Squid az általunk felmásolt nulbanner.png képpel helyettesíti. Sok reklámképet és reklám-animációt tartalmazó portálok esetén, érdemes megvizsgálni, hogy ezeket a számunkra fölösleges tartalmakat melyik domain-ről, vagy url-ről szolgáltatják. Azt beírva az hirdetes könyvtár megfelelő állományba, ezek a fölösleges tartalmak nem töltődnek le, helyettük az előbb említett képet látjuk. Ezzel a módszerrel sokkal  gyorsabban jelennek meg az ilyen portálok, hiszen előfordul, hogy a reklám tartalmak kilobájtban kifejezve nagyobbak mint a hasznos tartalom. A portál üzemeltető szemszögéből nézve ez aggályos megoldás, de kis sávszélesség esetén számunkra mindenképp hasznos.
A következő parancs:
 
[root@centos5 ~]# tail -f /var/log/squid/access.log | grep '\.swf'
 
a munkaállomásokon megnyitott weboldalak közül kilistázza azokat, amelyekben a letöltött tartalom kiterjesztése swf, vagyis flash animáció. Azokat a címeket, amelyek jellemzően reklám-animációkat szolgáltatnak, írjuk be a /hirdetes/domains állományba. A parancsot a Ctrl+c billentyűkombinációval állíthatjuk le.

    7.7. A sávszélesség-korlátozása
 
Gyakran felvetődik a kérdés, hogy hogyan lehetne leginkább igazságosan elosztani a meglévő sávszélességet. Különösen letöltés vezérlő programok használatakor egy munkaállomás elfoglalhatja szinte az egész sávot, a többi gépen pedig a böngészés is majd használhatatlanná lassul. Erre jelenthet megoldást, ha a Squid segítségével korlátozzuk az egy gépre jutó maximális sávszélességet.
Nagyobb állomány letöltésekor figyeljük meg a maximális sávszélességet:
 
d1
7.15. ábra
 
Esetünkben ez 30 kilobájt/másodperc (7.15. ábra), vagyis 256 kilobit másodpercenként.

 
A squid.conf állomány tartalmazza az egy gépre jutó sávszélesség korlátozást, csak a # jeleket kell törölni a megfelelő sorok esetén:

 
# ----- A nopass IP-knek nagyobb sav
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 19800/19800
delay_access 1 allow nopass
delay_access 1 deny all
# ----- Mindenki masnak
delay_class 2 2
delay_parameters 2 -1/-1 12000/12000
delay_access 2 deny nopass
delay_access 2 allow mynetwork
delay_access 2 deny all
 
A módosítások a squid újrakonfigurálásával jutnak érvényre:
 
[root@centos5 ~]# squid -k reconfigure
 
A fenti példában két korlátozást használunk. Az első a nopass src-ben meghatározott IP címeknek 19,8 kilobájt másodpercenkénti adatmennyiséget. A második pedig mindenki másnak 12 kilobájtot. Figyeljük meg a 192.168.55.101 IP című gépről az első rész érvényre jutását (7.16. ábra):
 
d2
7.16. ábra
 
A hálózat többi gépének, amelyek nincsenek felsorolva az /etc/squid/nopass.txt állományban, csak 12 kilobájt jut (7.17. ábra):

 
d3
7.17. ábra
 
A szolgáltató által biztosított sávszélesség függvényében módosíthatjuk az értékeket. Meg kell említeni, hogy ha a korlátozás érvénybe lép, akkor az nem csak az adott folyamatot, hanem a gép teljes forgalmát érinti. Tehát ha a felhasználó elindít még egy leöltést, a két folyamat osztozik a korlátozott sávszélességen.