Filtriranje spletne vsebine z ugnezdenim Linuxom
Vsak ponudnik vsebine ima svoje odjemalce in vsak odrasli ima pravico do vsebine, ki jo želi. Internet mora ostati svobodni medij. Mlajše uporabnike interneta pa je vendarle treba zaščititi pred agresivnimi ali spornimi vsebinami, tako doma kot v šoli. Morda kdo tako, sicer z drugimi motivi, razmišlja tudi za svoje zaposlene.
Programske rešitve za spletno filtriranje (angleško govoreči jih imenujejo "web filter"), ki jih dodamo pred brskalnik v delovne postaje, so le delna rešitev, po drugi strani pa jih je v primeru večjega števila delovnih postaj nerodno upravljati. Boljša rešitev je filter, vgrajen v prehodni usmerjevalnik (gateway), ki preverja vsebino strani in uteleša politiko dostopa do omrežja, ki jo določi lastnik omrežja. Z uveljavitvijo širokopasovnega dostopa v slovenskih družinah (kabelski modemi, ADSL, wi-fi ...) je taka postavitev prava rešitev tudi za družinsko rabo, saj dva ali več računalnikov doma postaja prej pravilo kot izjema.
V aprilski številki Monitorja smo predstavili usmerjevalnik LEAF/Bering z ugnezdenim Linuxom. Konec prispevka je izzvenel v prepričanju, da bodo nadgradnje Beringa v letu dni omogočile številne nove zanimive postavitve. Ta prispevek opisuje eno izmed njih. Uporabili smo naslednjo razvojno različico LEAF/LRP, imenovano Lince, ki temelji na različici Bering, le da je distribuirana v posnetku za CD-ROM, uporablja druge programske knjižnice in ima dodana dva ključna namenska programa za izvedbo filtriranja prometa: squid in dansguardian.
Strojna oprema
Miniaturnih matičnih plošč arhitekture PC z vgrajenimi vmesniki je vedno več. Za Linuxovo distribucijo Lince je primerna ploščica Soekris net4801, ki je prikazana na slikah 1, 2 in 3. Poganja jo procesor v enem čipu, NSC SC1100, z delovnim taktom 233 MHz. Maksimalna poraba moči cele ploščice je manjša od 15 W, zato ne potrebuje hlajenja. Ploščica ima vgrajene tri omrežne vmesnike ethernet 10/100 s čipom National Semiconductors DP83816, zaporedni priključek, priključek USB, vmesnik za modul CompactFlash, eno razširitveno mesto PCI in eno mini PCI. To je vse. Nima priključkov za tipkovnico in monitor. Nima vmesnika za disketno enoto in nima vmesnika IDE. Flash kartico preslikuje v IDE napravo. Na ploščico se ne da priključiti diska ali CD pogona.
Mala matična ploščica net4801 nima priključka za tipkovnico in monitor, niti vmesnika za disketno enoto ali disk. Ima pa tri priključke za ethernet 10/100 in zaporedni priključek za terminal.
Edini trajni pomnilniški nosilec na ploščici je flash kartica. Vmesnik jo preslikuje v IDE napravo.
Kako pa je potem mogoče na ploščico naložiti operacijski sistem?
Neposredno nikakor. Možno je pognati ploščico prek omrežnega zaganjanja PXE Boot ali pa v drugem računalniškem sistemu napolniti flash kartico s posnetkom operacijskega sistema, nastavljenega z ustreznimi gonilniki za ciljno ploščico, in le-to nato pognati s flash kartice. Odločili smo se za slednji način.
Flash kartico smo priključili na delovno postajo prek univerzalnega čitalnika kartic z vmesnikom USB.
Na običajni delovni postaji z Linuxom lahko flash kartico priključimo prek univerzalnega čitalnika kartic z USB priključkom in flash kartico vidimo kot enega od diskovnih pogonov SCSI na napravi /dev/sda. Podobno je pod operacijskim sistemom Windows, ki flash kartico zazna kot izmenljivi disk. Kako je čitalnik flash kartice prek USB povezan z delovno postajo, je razvidno s slike 4.
Križna namestitev
Izraz "križna namestitev" je nastal po zgledu križnega prevajanja, "cross compile", kjer npr. v okolju A prevajamo izvorno kodo v predmetno kodo, ki bo delovala v drugačnem okolju B. Podobno pri križnem nameščanju v okolju A gradimo sliko operacijskega sistema, ki bo deloval v okolju B. Nerodno je, da v okolju A ne moremo preizkušati izdelka, ker v njem ne deluje - saj je narejen za okolje B.
Delovno okolje je bilo RedHat 9 na namiznem PCju. Distribucija Lince, ki smo jo želeli postaviti na flash kartico za ploščico net4801, pa je po poreklu Debian. Njena skrbnika, Juan Jesus Prieto in Jaime Nebrera Herrera, ki sta Lince razvila na osnovi dela Jacquesa Nila in Erica Wolzaka (distribucija Bering), sta menila, da je škoda omejevati distribucijo na eno disketo kot pri drugih projektih LEAF, če lahko z zamenjavo nosilca zgradita precej razkošnejšo rešitev z več funkcijami.
Distribucija Lince je za razliko od Beringa v obliki posnetka ISO-9660, torej gre v bistvu za CD-ROM. Sicer pa je vsebina podobna, le da je zaradi dodatnih priloženih paketov in gonilnikov precej obsežnejša, približno 15 MB. Za Lince sta si avtorja zamislila, da bi se avtomatsko namestil s CD pogona na izbrani disk ciljnega sistema.
V našem primeru tako ni šlo, ker net4801 nima IDE vmesnika in na njem ni mogoče uporabiti CD pogona. Ker namestitveno okolje Lince na CD-ROMu ni prepoznalo USB/flash kartice, tudi na namizni delovni postaji ni bilo mogoče opraviti samodejne namestitve v flash. Zato je bilo treba vse opraviti ročno s "križno namestitvijo".
Flash, geometrija in MBR
Flash kartica je elektronski pomnilniški nosilec, ne magnetni. Gonilniki operacijskega sistema pa jo preslikujejo v navidezni magnetni diskovni prostor, ki je določen s sektorji, glavami in cilindri. Informacije o geometriji tega navideznega sistema so zapisane na prvem sektorju s 512 zlogi, imenovanem MBR, Master Boot Record.
Flash kartica, ki jo kupimo v trgovini, je formatirana za datotečni sistem FAT-16 (MS-DOS), ni pa označena kot zagonski disk. Prepoznata jo sicer oba, Windows in Linux, vendar z nje ni mogoče zagnati računalnika.
V Linuxu upravljamo tabelo razdelkov (particijska tabela) s programom fdisk. Razdelek lahko aktiviramo z nastavitvijo zaznamka za zaganjanje ("active flag"). Če pa želimo začeti res iz nič, lahko najprej pobrišemo MBR, nato pa ustvarimo prazno tabelo razdelkov, vanjo zapišemo nov razdelek FAT-16 in ga označimo kot aktivnega, torej zagonskega. Napaka! In sicer Linuxova. Linux ne zna pravilno določiti navidezne geometrije flash kartice in posledica brisanja MBR je bila tragična: kartica ni bila več berljiva. Tudi Windows XP se ni odrezal nič bolje - kartica je bila na prvi pogled uničena.
V trgovini ni bilo težko s tovarniško nove flash kartice skozi USB čitalnik "postrgati" 512 zlogov s prvega sektorja:
dd if=/dev/sda of=flash_mbr.bin count=1
nato vstaviti v čitalnik pokvarjeno flash kartico in pokrpati prvi sektor s pravilno informacijo o navidezni geometriji:
dd if=flash_mbr.bin of=/dev/sda count=1
Po tej manjši nevrokirurški operaciji je bil flash zopet voljan sodelovati.
Navidezna geometrija flash kartice je pomembna. Oba, Windows XP in Linux Redhat 9, sta pri tem nagajala. Vendar se račun tudi pri tovarniško zapisani geometriji programu fdisk ne izteče pravilno ... deluje pa.
Prenos vsebine namestitvenega CD-ROMa v flash
Namestitveni CD Lince ima v podimeniku /src dve datoteki:
Lince_x.y-stable.tar.gz (slika bodočega zagonskega razdelka)
modules_2.4.xx.tgz (gonilniki za najrazličnejše naprave)
pri čemer x in y označujeta različici izdelkov.
Polnjenje flash kartice z vsebino je enostavno - flash in CD-ROM povežemo v datotečni sistem, razpnemo vsebino stisnjene datoteke in prenesemo vsebino v flash:
mount -t msdos /dev/sda1 /mnt/cf
mount -t iso9660 /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/src/Lince_*.tar.gz /tmp
gunzip /tmp/Lince_*.tar.gz
tar xf /tmp/Lince_*.tar -C /mnt/cf
umount /mnt/cf
umount /mnt/cdrom
Vsebina bodočega zagonskega flasha je s tem prenesena, vendar sistem še ni nastavljen, niti se ni sposoben zagnati. Slednje opravimo s programom syslinux. Najnovejšega lahko vedno potegnemo iz spleta. Flash kartico naredimo zagonsko takole:
syslinux -s /dev/sda1
Ta ukaz je v korenski imenik flash kartice zapisal datoteko ldlinux.sys in v prvi sektor razdelka FAT-16 ustrezno zagonsko kodo, ki požene ldlinux.sys, ta pa nato izvede, kar je zapisano v datoteki syslinux.cfg.
Nastavljanje zagona
Ker ciljna ploščica net4801 nima grafičnega vmesnika, lahko zagon spremljamo samo prek zaporednega terminala. Priključek DB-9 na net4801 s križnim zaporednim kablom povežemo na zaporedni priključek namizne delovne postaje in uporabimo program za posnemanje (emulacijo) terminala. Kdor uporabi pravilo RTFM ("pravi programerji" to kratico dobro poznajo) in prebere navodila LEAF/Bering, mu je ta del mačji kašelj. Brez natančnega branja navodil pa je bilo treba iti po trši poti odkrivanja skrivnosti.
Datoteka syslinux.cfg določa parametre za zagon Linuxovega jedra. V njej dodamo parameter
console=ttyS0,9600n8
in s tem preusmerimo izpise na zaporedno linijo. S tem bi morala vsebina flash kartice omogočiti zagon Linuxa, programi pa še ne bi delovali, ker niso bili nastavljeni. Vzeli smo flash kartico iz čitalnika, jo vstavili na ploščico net4801 in priključili napajanje. V terminalskem oknu so se pokazali testni izpisi BIOSa, Linux pa se ni zagnal. V BIOSovem monitorju ploščice net4801 lahko najdemo sumljivo vrstico:
boot partition=default
Če jo popravimo na
boot partition=1
in vnovič zaženemo ploščico, se Syslinux izstreli iz BIOSa, vendar se po nekaj izpisih veselje konča. Sredi zagona Linux nekako "izpuhti". Ugotovimo lahko, da se to dogaja pri vstopu na eno od delovnih ravni ("runlevel"). V spletu so napotki, da je treba za uporabo zaporedne linije za terminal v datoteki /etc/inittab omogočiti vrstico:
T1:23:respawn:/sbin/getty -L ttyS0 9600 vt100
Za vsak tak popravek je treba flash kartico vzeti iz ploščice, jo vstaviti v čitalnik na delovni postaji, popraviti namestitev in jo vrniti nazaj na ploščico. Pač muke križnega nameščanja.
Po teh popravkih se je Linux naložil z nekaj pričakovanimi opozorili o napakah: nenastavljeni gonilniki, namenski programi in podobno. Čakal je na prijavo z znanim "login:".
Distribucije LEAF/LRP za skrbnika sistema (root) nimajo nastavljenega gesla, zato da se lahko prvič prijavi brez gesla in si ga nato nastavi sam. Neprijetno je bilo presenečenje, ko login ni hotel sprejeti prijave uporabnika root. Stalno je zavračal prijavo. Odgovor je bil skrit v zagonskih skriptih in v spletu: v datoteko /etc/securetty je treba dodati vrstico:
ttyS0
sicer se skrbnik "root" (iz varnostnih razlogov zaradi morebitnega modemskega dostopa) ne more prijaviti prek zaporedne linije. To je bila tudi zadnja ovira do uspešnega zagona. Zaporedni terminal je sprejel prijavo uporabnika root v Linux na ploščici.
Dodajanje in prilagajanje paketov
Zdaj lahko izklopimo net4801 in flash kartico spet vstavimo v čitalnik na namizni delovni postaji. S flash kartice delujočo vsebino prepišemo na disk v imenik cf-image.
Dodajanje novih paketov je enostavno: datoteko formata .lrp, katere programje je prevedeno z isto različico knjižnic kot distribucija LEAF/LRP, je treba odložiti v korenski imenik flash kartice. To je vse. Za spremembe v paketih pa je treba prodreti v strukturo paketa.
Paketi distribucije s končnicami .lrp so zapisani v formatu tar.gz. Če želiš spremeniti vsebino paketa, jo najprej razpneš na podimenik, v razpetem stanju narediš potrebne spremembe vsebine, nato pa datoteke spet stisneš v paket .tar.gz. To naredimo približno takole:
mount -t msdos /dev/sda1 /mnt/cf
cp /mnt/cf /cf-image
cd /cf-image
mkdir etc_lrp
cd etc_lrp
tar xzvf ../etc.lrp
.... z urejevalnikom naredimo spremembe oz. dodamo datoteke, stisnemo vsebino
tar czvf ../etc.lrp *
in vrnemo spremenjeni paket nazaj na flash kartico
cp ../etc.lrp /mnt/cf
umount /mnt/cf
Take popravke lahko delamo seveda za vse pakete, ne samo za etc.lrp. Na ta način je bil preusmerjen tudi izpis na zaporedno linijo z nastavitvijo v datoteki /etc/inittab, kot je opisano zgoraj.
Prva očitna sprememba, ki jo je treba narediti takoj po uspešnem zagonu, je zamenjava gonilnikov. Standardna distribucija ni prilagojena ethernetnemu čipu National Semiconductors, ki je na ciljni ploščici in nima gonilnika zanj. Zato moramo uporabiti drugo datoteko na CD-ROMu, modules_2.4.xx.tgz. Ko jo razpnemo, v imeniku 2.4.xx/kernel/drivers/net najdemo gonilnik natsemi.o, ki je pravi za ethernetno čipovje na Net4801. Dodamo ga v razpeto sliko paketa modules.lrp v imenik /lib/modules, nazaj zapakiramo modules.lrp in ga prenesemo na flash kartico.
Zdaj imamo na flash kartici vse, kar potrebujemo. Spet jo iz čitalnika prestavimo v net4801 in ga poženemo. Po prijavi z uporabniškim imenom root se znajdemo v sistemu menujev, ki je bil opisan že v aprilski številki.
Z menuji nastavimo zagon gonilnika natsemi.o in umaknemo gonilnike, ki jih ne potrebujemo. Ker že zelo dolgo ni navada delati s terminalsko hitrostjo 9600 b/s in čeprav je bila ta hitrost v časih "pravih programerjev" visoka, je treba priznati, da se čas neskončno vleče, ko je utripalka prav počasi poskakuje po terminalskem oknu v zaslonskem urejevalniku. Zato si najprej uredimo dostop s priloženim paketom ssh.
Pred uporabo sshd moramo narediti ključe, s katerimi dela ssh. Paket sshkey potrebujemo samo enkrat za generiranje ključev:
lrpkg -i sshkey
makekey
Nato lahko sshkey zbrišemo. Za druge pakete ssh.lrp, libz.lrp in sshd.lrp pa moramo zagotoviti zagon v datoteki /lrpkg.cfg.
Distribucija Lince ima pomanjkljivost: manjka paket sftp.lrp (ki je predhodniku, Beringu, priložen), zato prenos datotek na ploščico ni mogoč prek omrežja - za vsako spremembo je treba vzeti flash kartico iz ploščice in s pomočjo čitalnika kartic nanjo naložiti datoteke na delovni postaji.
Težavo rešimo tako, da uporabimo paket sftp.lrp iz distribucije Bering. Deluje takoj, brez težav.
Zaganjanje paketov
Datoteka /lrpkg.cfg določa, katere pakete bo syslinux pognal ob dviganju sistema. V eni sami dolgi vrstici so našteti paketi, ki jih potrebujemo. Naša je videti takole:
root,etc,local,modules,extralib,iptables,ulogd,daemontl,pump,shorwall,dnscache,weblet,libz,ssh,sshd,sftp,squid,dansgrdn,blacklst,perl
Večina zgornjih paketov je standardnih v distribucijah LEAF/LRP, izpostavili pa bomo tiste, ki so posebni za Lince:
extralib.lrp - podpora za dodane programske pakete
squid.lrp - posredniški predpomnilnik (proxy cache) za HTTP
dansgrdn.lrp - HTTP filter Dansguardian
blacklst.lrp - seznam prepovedanih internetnih naslovov za Dansguardian
perl.lrp - programski jezik za podporo dinamičnih izpisov v Dansguardianu
Križni del nameščanja je s tem končan. Flash kartica je zdaj avtonomna in s tem tudi ploščica, v katero jo vstavimo. Toda s paketi v korenskem imeniku flash kartice in z navodili za zagon v datoteki /lrpkg.cfg delo še ni končano.
Ko flash kartico poženemo na ciljni ploščici, lahko dobimo vrsto izpisov o napakah. Paketi še niso nastavljeni. Nastavitve delamo v sistemu menujev, ki se pokaže po prijavi uporabnika "root".
Nastavitev standardnih paketov smo opisali že v aprilski številki. Ko jih v flashu nastavimo, Lince na net4801 opravlja vse standardne funkcije distribucije LEAF/LRP, pripravljen pa je tudi že za nastavitev spletnega filtriranja.
Ta del nameščanja zahteva več dela kot drugi paketi. Ker bo spletni filter aktivno posegal v delo uporabnikov spleta, je primerno prevesti njegov uporabniški vmesnik v slovenščino. Prav tako samo angleške ključne besede (in nekaterih drugih evropskih jezikov, ki so priloženi) za delovanje filtra ne zadoščajo, saj bi uporabnike slovenskih strani z enako neprimerno vsebino, kot jo izločijo angleške ključne besede, mirno spustil skozi.
Ameriške programerske družbe so za svoje državljane, ki so v povprečju (vsaj deklarativno) bolj občutljivi za nekatere vsebine kot Evropejci, že ponudile tržno rešitev filtriranja spletnih naslovov. Izdelki, kot so Net Nanny, Cyber Patrol in podobni, v delovnih postajah preverjajo, na kateri spletni naslov uporabnik naslovi zahtevek. Če je naslov na črnem seznamu, dostop preprečijo. V ta namen morajo ponudniki in uporabniki črne sezname stalno osveževati, saj se spletne vsebine vsak dan pojavljajo in izginjajo. Taka rešitev je okorna in naporna.
Boljša rešitev je programsko preleteti vsebino želene strani in jo ovrednotiti s pravili. Če stran preseže prag primernosti, jo program zadrži, če ne, pa jo spusti skozi. Ta pristop se imenuje filtriranje spletne vsebine.
Odprtokodna rešitev dansguardian (DG) britanskega avtorja Daniela Barrona, ki je nameščena na ploščici, je kombinacija filtriranja spletnih naslovov in algoritemskega filtriranja spletne vsebine.
Kako deluje DG
DG za delovanje potrebuje posredniški predpomnilnlik (proxy cache), ki je v našem primeru squid. S preusmerjanjem TCP/IP vrat pri namestitvi ustvarimo zaporedje procesov, ki je prikazano na sliki 6. Uporabnik pošlje zahtevek za spletno stran (1). Brskalnik je nastavljen za pošiljanje zahtevkov na vrata 8080. Na prehodnem usmerjevalniku so vrata 80 zaprta, tako da uporabnik ne more zaobiti predpisane poti. DG, ki posluša na vratih 8080, zahtevek posreduje na vratih 3128 procesu squid (2). Le-ta zahtevek posreduje ciljnemu spletnemu strežniku (3) in od njega prejme odgovor (4). Squid posreduje procesu DG glavo strani (5). DG preveri, ali sta MIME tip oz. končnica datoteke dovoljena (6), sicer pošlje uporabniku obvestilo o zavrnitvi zahtevka. Squid pošlje procesu DG telo spletne strani (7). DG preveri oceno PICS, če je zapisana na tej strani, in celotno besedilo strani, če ne vsebuje prepovedanih besed, izrazov, oziroma če utežene besede na tej strani ne presegajo dovoljene meje (8). Če je vse v redu, pošlje vsebino uporabniku, sicer mu posreduje obvestilo o zavrnitvi zahtevka (in obrazložitev, zakaj, če je DG tako nastavljen).
Z dvema preusmeritvama toka paketov (8080 za dansguardian in 3128 za squid) dosežemo, da squid najprej potegne vsebino iz spleta, nato jo dansguardian preveri in šele potem posreduje uporabniku (ali pa tudi ne).
Postopek preverjanja spletnega dokumenta pa (poenostavljeno) v DG poteka po naslednjih kriterijih.
Če je IP naslov odjemalca na seznamu "exceptioniplist", ga ima DG za izjemo in ga ne obravnava. Zgled je IP naslov sistemskega skrbnika (npr. 192.168.1.1).
Če je naslov spletnega strežnika na seznamu "exceptionsitelist", ga ima DG za izjemo in dokumentov z njega ne filtrira (npr. dovoljen.com ).
Če je URL v zahtevku del spletnega strežnika, ki je sicer prepovedan, potem so vse strani, ki so zapisane na seznamu "exceptionurllist", kljub temu dovoljene (npr. www.prepovedan.com/dovoljena_vsebina.html).
IP naslovi uporabnikov krajevnega omrežja v "bannediplist" ne smejo brskati po Internetu (npr. 192.168.1.16).
Spletne strani, ki imajo v naslovu URL regularni izraz, naveden na seznamu "bannedregexpurllist", so prepovedane.
Spletne strani, katerih URL naslov je vsebovan na seznamu "bannedurllist", so prepovedane (npr. members.home.net/porn).
Spletni strežniki, katerih naslov je na seznamu "bannedsitelist", so prepovedani (npr. badboys.com). Z uporabo blokovne prepovedi je mogoče prepovedati vse strežnike ("blanket site block" - npr. ** ) razen tistih, ki so navedeni v seznamu "exceptionsitelist" oziroma vse strežnike, naslovljene samo z IP naslovom ("blanket ip block" - npr. *ip ).
Spletne strani z oznako tipa MIME, ki je na seznamu "bannedmimetypelist", so prepovedane (npr. video/mpeg).
Prenos datotek, katerih podaljšek je na seznamu "bannedextensionlist", je prepovedan (npr. .mpeg za video posnetke).
Spletne strani, znotraj katerih DG najde izraz ali kombinacijo izrazov, ki so na seznamu "exceptionphraselist", so dovoljene (npr. <breast>,<cancer>).
Spletne strani, ki vsebujejo enega ali več izrazov ali kombinacij izrazov s seznama "bannedphraselist", so prepovedane (npr. kombinacija izrazov <google>,<safesearch is off>).
Spletne strani, pri katerih vsota uteži, pripisanih izrazom v datoteki "weightedphraselist", presega vrednost parametra NaughtinessLimit, so prepovedane. Negativne in pozitivne uteži se medsebojno izničujejo (seštevajo). (zgledi uteženih izrazov in kombinacij izrazov: < porn><10>; < porn>,<teen><30> ; <no porn policy><-30> )
Slednji dve pravili predstavljata največjo moč DG.
PICS in ICRA
PICS (Platform for Internet Content Selection) je standard za označevanje vsebine spletnih strani z zaznamki (metapodatki), ki omogočajo oceniti primernost strani za določeno občinstvo. Več organizacij uporablja ta standard za klasifikacijo poljubne vsebine na področja, ki jih pokrivajo. Ena od njih je ICRA (Internet Content Rating Organization), neprofitna organizacija, katere poslanstvo je "zaščititi otroke pred potencialno škodljivimi vsebinami".
Vsebine klasificirajo na razrede, ki med drugim pokrivajo:
nasilje
goloto in seks
grob, neprimeren jezik
orožje
alkohol
mamila
igre na srečo
diskriminacija
slab zgled za otroke
moteče vsebine za otroke
internetni klepet (chat)
Nekatere slovenske pornografske strani so pravilno označene z ICRA zaznamki. Zgled ICRA oznake v datoteki HTML je:
<meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://www.najstnice.com/" r (na 1 nb 1 nc 1 nd 1 ne 1 nf 1 ng 1 nh 1 ni 1 vz 1 la 1 lb 1 oz 1 ca 1)
ICRA je na strani http://www.icra.org/label/tester/ objavila testni program, s katerim lahko vsakdo preveri, ali spletna stran vsebuje klasifikacijo ICRA. Na sliki 7 je razvidno, da je stran z zgoraj omenjeno oznako pravilno označena po ICRA klasifikaciji, odkodirana pa je tudi vsebina metapodatkov.
Odkodirana vsebina oznake ICRA. Izraza "zelena luč" seveda ne kaže razumeti narobe: ne pomeni, da stran ne vsebuje otrokom neprimerne vsebine, temveč pravi, da je neprimerna vsebina pravilno kodirana po klasifikaciji ICRA.
Namestitev in nastavitve paketov squid in dansguardian
Paket dansgrdn.lrp smo namestili v korenski imenik flash kartice. Prepričamo se, da je zagon DG zagotovljen z vnosom niza dansgrdn.lrp v datoteki /lrpkg.cfg. Isto naredimo za paket squid.lrp.
V paketu squid.lrp je izvirna nastavitev prirejena za uporabo na virtualnem RAM disku, kjer se razpoložljivi prostor ne more primerjati s prostorom sodobnih diskov, na katerih squid sicer shranjuje vsebino strani v predpomnilniku. Nastavitvene datoteke /etc/squid/squid.conf ni treba spreminjati, razen če se želite igrati z jezikovnim vmesnikom, kot se igramo v tem prispevku. Izvirni Squid namreč ne zna govoriti slovensko. S prevodom sporočil in zamenjavo nastavitve v squid.conf ga preoblečemo v slovenščino. Dostop je z nastavitvijo omejen, tako da squid sprejema samo zahtevke s procesov, ki tečejo na prehodnem usmerjevalniku. Squid je za pospešitev odziva nastavljen za delo brez predpomnjenja, tako da izvaja samo posredniško funkcijo (proxy). Zaradi hitrosti je izklopljeno tudi beleženje sistemskih sporočil. Vrstice, ki utelešajo zgornjo politiko v datoteki squid.conf, so:
# samo prehodni usmerjevalnik lahko dosega squid
http_port 127.0.0.1:3128
# uporabimo poslovenjen uporabniski vmesnik
error_directory /usr/lib/squid/errors/Slovenian
# predpomnilnik je izklopljen
cache_dir null /var/spool/squid
#sistemske zabelezke mecemo stran, da pridobimo na hitrosti
cache_access_log /dev/null
cache_log /dev/null
cache_store_log none
Squid se pogovarja z uporabnikom s pomočjo jezikovnih datotek, ki so shranjene v imeniku /var/lib/squid/errors. Vsak jezik ima svoj imenik. Trideset squidovh sporočilnih datotek lahko prevedemo v slovenščino in jih shranimo v imenik /usr/lib/squid/errors/Slovenian.
Vsako spremembo .lrp paketa je treba shraniti nazaj na flash kartico. Če spremenimo nastavitveno datoteko (za slovenščino) in dodamo slovenske datoteke, moramo s pomočjo menuja lrcfg shraniti osveženo vsebino v squid.lrp.
Squid je s tem pripravljen za delo v slovenščini. Sledi nastavljanje paketa Dansguardian.
Nastavljanje dansguardian.conf
Filter DG ima precej nastavitvenih možnosti. Deluje sicer tudi brez nastavljanja, po privzetih vrednostih, vendar za namene tega prispevka želimo spremeniti precej stvari. Opišimo nekaj parametrov, ki se zdijo pomembnejši.
reportinglevel =
Nastavimo ga lahko od pritajenega (stealth) načina dela do poglobljenega poročanja. V pritajenem načinu postane DG vohun, ki v svoje sistemske zabeležke zapisuje vse prepovedane obiskane strani in kaj je bilo na njih nedovoljenega. V nepritajenem načinu delovanja namesto želene prepovedane vsebine uporabniku pokaže "Dostop prepovedan". Lahko mu pove vzrok prepovedi, a ne navede sporne vsebine, lahko pa naredi oboje. Uporabniku lahko pošlje statično HTML stran z zavrnitvijo dostopa ali pa dinamično generira zavrnitev z obrazložitvijo in s polnim poročilom.
htmltemplate =
Ta parameter omogoča zamenjavo privzete zavrnitvene strani /etc/dansguardian/template.html s stranjo, ki si jo oblikujemo v svojem jeziku in po svojem okusu.
logexceptionhits =
V sistemske zabeležke zapiše podatke o tistih straneh, ki so bile spoznane za prepovedane, vendar jih je DG spustil skozi, ker so zadostile kriterijem za izjeme.
filterip =
Določa IP naslov, na katerem posluša DG. Tu bi zapisali IP naslov notranjega vmesnika prehodnega usmerjevalnika, če požarni zid ne bi onemogočal HTTP prometa na zunanjem (drugih) vmesniku. Ker uporabljamo požarni zid, je ta parameter nepomemben.
proxyip =
Določa naslov, na katerem posluša posredniški predpomnilnik (proxy cache), to je squid. V našem primeru squid teče kar na požarnem zidu, zato je vrednost tega parametra v našem primeru 127.0.0.1. Squid pa bi lahko bil tudi kje drugje ...
filterport = in proxyport =
Določata vrata, na katerih posluša DG in na katera pošilja zahtevke posredniškemu predpomnilniku. Obdržimo kar privzeti vrednosti 8080 in 3128.
accessdeniedaddress =
Določa URL, na katerem je skript za dinamično poročanje uporabniku. Potreben je samo, če je parameter reportinglevel = nastavljen na dinamično poročanje. Ker je za to funkcionalnost potreben programski jezik perl, moramo na ploščico namestiti še perl.lrp. Ker želimo sporočila uporabniku posredovati v slovenščini, moramo sporočila v skriptu posloveniti.
Niz parametrov določa, katera pravila bo uporabil DG ob odločanju, ali je HTML stran primerna ali neprimerna. Večino smo jih našteli že v opisu delovanja DG zgoraj.
weightedphrasemode =
Določa, ali šteje vsak pojav "slabega" izraza na HTML strani ali pa vsak najdeni izraz šteje samo enkrat, brez ponovitev.
naughtynesslimit =
Določa mejo, pri kateri se stran smatra za neprimerno. Za majhne otroke je priporočena vrednost 50, za mladino 100, za odraščajoče pa 160. Med preizkušanjem za ta prispevek je bila meja nastavljena na 200, vendar se je le redko katera "poredna" stran izmuznila skozi filter. Prenizka meja pomeni tudi lažna opozorila.
showweightedfound =
Opredeljuje, ali bo DG v obvestilu o prepovedi pokazal besede, zaradi katerih je stran označil kot prepovedano.
Več parametrov je namenjenih omejevanju prenosa: lahko preprečimo pošiljanje (upload), omejimo velikost strani (privzeto 2 MB) in podobno.
Prilagajanje DG delu s spletnimi stranmi v slovenščini
Zgoraj omenjeni prevodi so zadoščali, da je DG v slovenščini sporočil, zakaj mu kakšna stran v angleščini ni všeč. Zdaj pa moramo nastavitve DG prilagoditi še tako, da se bo sposoben odločati tudi o straneh v slovenščini.
Osredotočimo se na analizo z uteženimi izrazi. Ne gre za programersko delo: izbrati in utežiti moramo nabor izrazov, s katerimi želimo filtrirati slovenske strani. Ker DG vrednoti "obremenilno" in "olajševalno", moramo "slabim" izrazom pripisati pozitivne uteži - obremenilne, "dobrim" pa negativne - olajševalne.
V imeniku /etc/dansguardian/phraselists DG hrani sezname izrazov, s katerimi filtrira vsebino spletnih strani. Seznami so razdeljeni po vsebinskih sklopih, predstavljajo pa bodisi prepovedane besede, pozitivno ali negativno utežene izraze in izjeme - slednje kljub temu da je stran po drugih kriterijih nedopustna, omogočijo strani pot skozi filter.
Po vzoru datoteke uteženih izrazov, imenovane "weighted", naredimo novo datoteko uteženih izrazov v slovenščini in jo shranimo pod imenom "weighted-si". Vsak zapis v datoteki ima obliko
<izraz>[,<izraz2>]....[,<izrazN>]<utež>
kjer je utež pozitivno ali negativno celo število, izraz pa je lahko del besede, beseda ali več besed. Zgled:
<18 let>,<polnolet>,<vstop><100>
<mladolet>,<spoln><80>
Zgornja dva filtrirna izraza bi npr. vstopno stran do enega od slovenskih pornografskih strežnikov utežila s 180 točkami, kar bi pri pragu 160 točk uporabniku preprečilo dostop. Omogočen pa bi bil dostop do strani, ki bi pisala npr., da "...polnoletni državljani nad 18 let in mladoletni nad 16 let lahko kupijo vstopnice za dirkanje z gokarti ...". Za filtriranje slovenskih besedil uporabimo korene besed - da bi se izognili težavam s spreganjem.
Filtriranje spornih spletnih strani je v praksi zelo učinkovito. Pisci spletnih strani so se že davno naučili, da je treba na straneh navesti čim večje število izrazov, ki jih ciljno občinstvo išče prek spletnih iskalnikov, zato se take strani filtru dobesedno "dajejo v zobe".
Datoteko izrazov vključimo v proces filtriranja tako, da pot do nje zapišemo v datoteko /etc/dansguardian/weightedphraselist, med poti do drugih filtrirnih seznamov.
In nato lahko preizkusimo delovanje filtra: na delovni postaji brskalnik nastavimo tako, da za povezave uporablja storitve posrednika (proxy) in oddeskamo po omrežju. Rezultati so pričakovani in so prikazani na slikah 8, 9 in 10 . Zakaj je filter ustavil dostop do teh strani, lahko preverite sami na navedenih naslovih; kateri izrazi so sprožili filter, pa je razvidno iz sistemskih zabeležk prehodnega usmerjevalnika na sliki 11.
DG je ustavil dostop do strani, katere naslov je na seznamu prepovedanih
Stran, na katero smo hoteli priti, ima oznako ICRA/PICS, ki presega nastavljeni prag.
Uteženi izrazi na tej strani so presegli še dovoljeno mejo.
Sistemske zabeležke razkrivajo, kateri izrazi so sprožili zapiranje filtra.
Nastavljanje pravil na požarnem zidu
Filter je test prestal dobro. Zalomi pa se takoj, ko hočemo plačati nekaj računov skozi elektronsko banko. Squid pošlje prijazno sporočilo, da ne more priti do banke (slika 12). Napaka je trivialna.
Squid z usmerjevalnika ni mogel do banke.
Požarni zid je po privzetih nastavitvah odprt za promet, ki izvira v krajevnem omrežju in gre v internet. To pa ne velja za promet, ki izvira iz prehodnega usmerjevalnika. Squid teče na prehodnem usmerjevalniku. IP pakete HTTP, ki pridejo iz krajevnega omrežja, prepakira in jim vstavi izvorni naslov prehodnega usmerjevalnika. Z njega v internet so odprta samo nujno potrebna vrata. Konkretna banka uporablja vrata 443, ki so sicer privzeto zaprta. Zato moramo v datoteko pravil za požarni zid Shorewall, /etc/shorewall/rules, dodati pravilo, ki omogoča komuniciranje z banko.
# ACTION SOURCE DEST PROTO DEST PORT
# Vrata za e-banko - odpri vrata 443 z isengarda
ACCEPT fw net tcp 443
Po vnovičnem zagonu požarnega zidu lahko takoj začnemo zapravljati denar. Podobne nastavitve bi bilo treba narediti tudi za druge namenske programe na nestandardnih vratih.
Po odprtju vrat 443 z usmerjevalnika v internet gladko pridemo do elektronske banke.
Zapiranje stranskih izhodov
S slike 6 je razvidno potovanje spletne strani skozi TCP/IP vrata na prehodnem usmerjevalniku. Dansguardian posluša na vratih 8080, to so sicer standardna vrata za posredniški predpomnilnik. Če želimo uporabiti njegove storitve, moramo brskalnik prenastaviti s standardnih vrat 80 na vrata 8080. To bi morali narediti na vseh delovnih postajah. Če bi potem hoteli zapreti vrata 80 na prehodnem usmerjevalniku, da se uporabniki ne bi mogli izmuzniti mimo filtra skoznje v divjino spleta, bi morali spremeniti pravila še tam.
S precej manj truda in bolj zvito je mogoče isto doseči s preusmeritvijo med vrati na prehodnem usmerjevalniku. V nastavitev požarnega zidu dodamo vrstico:
# ACTION SOURCE DEST PROTO DEST PORT
# Preusmeri ves WWW promet z vrat 80 na vrata 8080
REDIRECT loc 8080 tcp www
Po tem popravku lahko brskalnik v krajevnem omrežju deluje na običajnih vratih 80, uporabniki pa nimajo nobenega stranskega izhoda mimo filtra, saj se ves spletni promet skozi preusmeritev odpelje naravnost v filter.
Ocena zmogljivosti filtra
Procesno zahtevnost filtriranja spletne vsebine ocenimo s primerjavo hitrosti prenosa vsebin s protokolom HTTP brez filtriranja in s filtriranjem. V prvem primeru uporabimo prehodni usmerjevalnik z osnovnimi funkcijami in požarnim zidom, pri čemer sta dansguardian in squid izklopljena. V drugem primeru vklopimo še DG in squid. Oba primera sta prikazana na sliki 14. Pri preizkusu moramo odstraniti čim več motilnih dejavnikov iz okolja. Zato povezavo v internet odklopimo z usmerjevalnika in na zunanji vmesnik s križnim ethernetnim kablom priključimo spletni strežnik Linux. Za to poročilo so bili uporabljeni Fedora Core I in Apache na 2,4 GHz procesorju z diskom UDMA 133.
Preizkus zmogljivosti filtra: najprej prenos vsebine brez spletnega filtra, potem z njim.
Na spletnem strežniku je bila datoteka velikosti 475 MB. Na prehodnem usmerjevalniku sta bila izklopljena squid in dansguardian. Brskalnik (Mozilla Firefox) na delovni postaji je povlekel datoteko iz strežnika v 169 sekundah. Nato smo vklopili dansguardian in squid, za vsak slučaj pobrisali predpomnilnik brskalnika ter ponovili postopek. Rezultati so spodaj, razmerji časov prenosa in hitrosti za delovanje s filtrom ali brez njega pa sta predstavljeni na sliki 15.
MB Sekund hitrost MB/s
S filftrom 475 346 1,37
Brez filtra 475 169 2,81
Primerjava časa in hitrosti prenosa s filtriranjem ali brez njega v idealnem laboratorijskem okolju
Preizkus je pokazal, da filtriranje za približno 50 % upočasni prenos ob idealni prepustnosti omrežja. Vendar po kratkem premisleku takoj ugotovimo, da je to skoraj brezpredmetna meritev. Pri preizkusu je bilo uporabljeno idealno okolje: s križnima kabloma povezane tri sisteme, ki so stisnili iz sebe in iz HTTP strežnika 2,81 MB/s ali 22,5 Mb/s. V resničnem svetu (za hip pozabimo na akademike) tako hitrih internetnih povezav tako rekoč ni. Če bi hitrost prenosa znižali, bi se zakasnitev na filtru zmanjšala.
To razmišljanje smo takoj potrdimo v praksi, ko se znova priključimo v internet. Iz Mozillinega strežnika smo za ta preizkus potegnili datoteko Firefox za javo, ki je dolga 10 MB. Nalaganje skozi filter je trajalo 61 sekund, brez filtra pa 60. Dosežena internetna hitrost je bila pri tem približno 1,33 Mb/s. Pri tem podatku sama hitrost ni pomembna, temveč razmerje hitrosti: filtriranje pri realnih hitrostih prenosa je vzelo le 2 % časa (slika 16).
Primerjava zmogljivosti s filtrom ali brez njega na živem internetnem priključku s hitrostjo 2 Mb/s.
Uporabo filtra je s stališča upada zmogljivosti komaj zaznati, pa še to zaradi velikega obsega podatkov (10 MB). Pri deskanju po spletu pa je zakasnitev povsem nezaznavna.
Za konec
Kot vidimo, je gnezdeni Linux, ki programsko pokriva prehodni usmerjevalnik, požarni zid, spletni filter in posredniški predpomnilnik, izvrstna rešitev nadzora pri prenosu kočljivih spletnih vsebin. Dovolj je zmogljiv, da je njegovo delovanje neopazno, prilagodljiv pa je toliko, da nastavitev delovnih postaj ni treba spreminjati, ko ga neopaznega vgradimo v omrežje. Na zmerno zmogljivi strojni opremi je sposoben poganjati internetno povezavo z največ 200 delovnimi postajami.
Viri
http://leaf.sourceforge.net/ , domača stran projekta LEAF/LRP
http://www.soekris.com/net4801.htm , integrirana PC ploščica, ki smo jo uporabili
http://syslinux.zytor.com/ , zaganjalnik operacijskega sistema, Syslinux
http://dansguardian.org/ , spletni filter Dansguardian
http://www.squid-cache.org/ , proxy strežnik Squid
http://www.w3.org/PICS/ , Platform for Internet Content Selection, standard za označevanje vsebine spletnih strani
http://www.icra.org/ , Internet Content Rating Association, klasifikacija internetnih vsebin