Internet Atzipen Kontrola

Era askotan egin daiteke internet atzipen kontrol bat. Normalena, suhesian ebaki kanporako atzipena. Soluzio honek, arazo bat dauka. Edonork ezin dezake suhesia kontrolatu. Beste metodo bat behar dugu. Edozein irakaslek erabil dezakeena. Horrela, irakasle batek, gela bati ezar diezaioke interneterako atzipena edo ukatu. Gainera, era erraz batean behar du egin. Normalena, web orri baten bitartez. Hau egiten saiatuko gara.

Ikus dezagun ikastetxe baten adibidea.

Eskolako Azpisareak

Azpisareak

IP Taldeak

Irakasleak

172.16.0.0/24

Ikasleak

172.16.1.0/24

Zuzendaritza

172.16.2.0/24

Zerbitzariak

172.16.3.0/24

Ikasgelen Helbideak

Ikasgelak

IP Taldeak

Gela-01

172.16.1.17 -> 172.16.1.32

Gela-02

172.16.1.33 -> 172.16.1.48

Gela-03

172.16.1.49 -> 172.16.1.64

Gela-04

172.16.1.65 -> 172.16.1.80

Gela-05

172.16.1.81 -> 172.16.1.96

Gela-06

172.16.1.97 -> 172.16.1.112

Gela-07

172.16.1.113 -> 172.16.1.128

Gela-08

172.16.1.129 -> 172.16.1.144

Baharrezko softwarea

Atzipen kontrola squid3 programarekin  egingo dugu. Lehendik ez baditugu instalatu, instalatu beharreko paketeak squid3, apache2, php5 eta sudo dira.


    aptitude install squid3 apache2
libapache2-mod-php5 php5 php5-cli sudo

Instalazio script-ak, /var/spool/squid3 direktorioan sortuko digu katxe-aren direktorio hierarkia, eta martxan jartzen du. Badaukagu ba, squid martxan. Edozein arrazoirengatik, ez baditu direktorioak sortzen, sortzera behar dezakegu squid3 -z agintearekin.

Squid3 konfiguratzen

Konfigurazio fitxategia /etc/squid3/squid.conf da. Probak egin nahi baditugu, hona hemen aldatu daitezkeen parametro batzuk:


# ---------- Cache Parameters ----------
cache_mem 100 MB

maximum_object_size 32768 KB
maximum_object_size_in_memory 8192 KB
ipcache_size 8192
fqdncache_size 8192

Ez dira egin probak, aldaketa hauen eragina ebaluatzeko, baina RAM memoria nahikoa badugu, ez dute arazorik sortu behar. Jarrai dezagun konfiguratzen.


# ---------- Cache Refresh Patterns ----------
icp_port 0

refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern .           0       20% 4320
refresh_pattern \.gif$      10080   100%  43200
refresh_pattern \.jpg$      10080   100%  43200
refresh_pattern .           960     90%   43200   reload-into-ims

Komenigarria da hurrengoa aldatzea. Jarri komeni zaizkizuen izenak edo esaldiak.


# ---------- Administrative Data ----------
ftp-user anonymous@NIRE-ESKOLA.NET
cache_mgr sare-admin@NIRE-ESKOLA.NET

Euskaraz jarriko ditugu errore mezuak. Hortarako, egokitu ditugun mezuak kopiatuko ditugu, eta Squid-en konfigurazioa aldatu. Lehenengo lehendik dauden gaztelerazko mezuei segurtasun kopia egingo diegu. Gero, /var/www/lhiak/squid-basque eta /var/www/lhiak/squid-spanish direktorioak kopiatuko ditugu bere kokalekura.
    mv -p R /usr/share/squid-langpack/es /usr/share/squid-langpack/es.orig
    cp -p R /var/www/lhiak/squid-basque /usr/share/squid-langpack/eu
    cp -p R /var/www/lhiak/squid-spanish /usr/share/squid-langpack/es
    ln -s eu /usr/share/squid-langpack/Basque

Orain, squid3 konfigurazio fitxategian, Euskara aukeratuko dugu errore mezuen hizkuntzarako. Hurrengo lerroa horrela geratuko da /etc/squid3/squid.conf fitxategian:


error_directory /usr/share/squid3/errors/Basque

Erregistro sistema jarriko dugu. Zer erregistratu, eta zein neurritan.
# ---------- LOG System ----------

cache_log /var/log/squid/cache.log
access_log /var/log/squid/access.log squid
# debug_options ALL,1

Zein portutan egon behar den zain esango diogu. Sare txartelaren helbidea ere esango diogu,. Honela, bat baiono gehiago baditugu, zeini kasu egin behar dion erabaki dezakegu.


# ---------- SQUID Listening Address:Ports ----------
http_port 172.16.0.4:3128

http_port 172.16.1.4:3128
http_port 172.16.2.4:3128
http_port 127.0.0.1:3128

ACL-ak

Nork egin dezaken zer gauza, eta nor ez zehazteko, acl-ak erabiltzan dira. Sistema hau erabiliko dugu Interneteko atzipena kontrolatzeko. Squid3 proxy-ak, adierazita dauden ordenan aztertuko ditu acl-ak.

Zein portu diren seguruak eta beste gauza batzuk adieraziko dizkiogu:

# ---------- Secure Ports and ... ----------
acl SSL_ports port 443      # https
acl SSL_ports port 563      # snews
acl SSL_ports port 873      # rsync
acl Safe_ports port 80      # http
acl Safe_ports port 81      # http mail
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl Safe_ports port 631     # cups
acl Safe_ports port 873     # rsync
acl Safe_ports port 901     # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

Orain, beharrezkoak diren baimenak emango dizkiegu adierazitako ACL-ei.

# ---------- Standard Access Permissions ----------
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost

Orain, proxyari berari atzitzea baimentzen dugu, errore orrien eta antibirusaren irudiak jasotzeko.


# ---------- Allow Proxy Addresses ----------
acl ProxyAddresses dst 172.16.0.4
acl ProxyAddresses dst 172.16.1.4
acl ProxyAddresses dst 172.16.2.4

http_access allow ProxyAddresses

Zein orri ez dituen katxeatu behar esango diogu. Normalean, cgi-ak izango dira, berrien orriak, eta aguraldiarena, noski. Geinera, esan diezaikegu, ez ditzala katxeatu abestiak, bideoak, etab. Administratzailearen esku utziko dugu erabakia.


# ---------- No Caching Addresses ----------
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
include /etc/squid/iak.noca.conf

Ez katxeatzeko helbideen zerrenda, /etc/squid3/iak.noca.conf fitxategian jarriko dugu. Hau izan daiteke bere edukia:


# ---------- No Caching Addresses ----------
acl NoCache1 dst 127.0.0.1
acl NoCache2 dstdomain .weather.com
acl NoCache2 dstdomain .berria.info
acl NoCache2 dstdomain .gara.net
acl NoCache2 dstdomain .elpais.es
acl NoCache2 dstdomain .elcorreodigital.com
 
no_cache deny NoCache1
no_cache deny NoCache2

Atzipen kontrola

Denok dakigu, nabigatzaileetan sortzen diren arazoak, gehigarriak direla eta. Batez ere Internet Explorer nabigatzailean. Gainera, gehigarri edo plugin hauen, erabiltzaileak jakin gabe instalatzen dira. Horrez gain, batzuetan nahi dugu ikasleek ordenagailuek erabil ditzaten, baina ez Internerako atzipena. Hau dela eta, sei acl sortuko ditugu.
     1- Irakasleen eta zuzendaritzaren sareak. Sare hauek ez dure iragazkirik izango.
     2- Web-orri instituzionalak, windows sistemaren eguneratze eta aktibazioak, java, etab. Orri hauek edozein nabigatzailerekin eta beti ikusteko aukera izango dugu.
     3- Eduki ez egokia edo banda zabalera alferrik jaten dizkigutelako debekatuta ditugun domeinuak.
     4- Momentu batean seguruak ez diren edo ahuleziak dituzten nabigatzaileei ukatu egingo diegu interneterako atzipena..
     5- Baimendu egingo diegu atzipena etengabeki, bilera gelei edo hobetuzeko ikastaroen gelen IP multzoei.
     6- Baimendu egingo diegu atzipena etengabeki, MAC helbide konkretuei. Adibidez, maiz datozen bisita ordenagaluei, edo Windows sare bateko ordenagailu batzuei.
     7- Baimendu edo ukatu egingo diegu atzipena ikasgelei, modu kontrolatu batean. BAi IP hezbidez, eta baita MAC helbidez.

Hona hemen irudi bat:

iak-control

Kontutan izan, zerrenda hauek, jarrita dauden moduan ebaluatuko direla. Hau da, lehenengo agertzen denak erabakiko du ukatu ala ez atzipena. IP zerrendak dst acl mota  bidez jartzen baditugu, DNS konexioa behar da lehenengo ezxarri. Motelagoak izango dira konexio ebaluapen hauek. IP helbidearen bitartez jartzen baditugu, prozesua azkarragoa izango da. Horrela jarriko ditugu, adibide gisa. Hurrengoan beste erara jarriko ditugu. Ikus ditzagun orain, erabiliko ditugun acl-ak. Zerrendak komentatuak daude, eta beraz, ez dugu azalpen gehiagorik emango.

Lehenetsitako ezarpenetan, squid3-ek soilik onartzen ditu localhost konexioak. Gure sareetatik eginiko konexioak onar ditzan, horrela agindu behar diogu. Squid-en konfigurazio fitxategian, esango diogu, fitxatgegi batetik har ditzala beti baimendutako sareak. Sare horiek izan daitezke irakasleena, zuzendaritzarena, etab.

# ----------- Not Filtered Source Networks -------------
include /etc/squid3/iak.nfnets.conf

/etc/squid3/iak.nfnets.conf fitxategiaren edukia, holako zerbait izango da:


# ---------- Not Filtered Source Networks
# Irakasleak
acl allow NfNets src 172.16.0.0/24

# Zuzendaritza
acl allow NfNets src 172.16.0.0/24

# Gonbidatuak
acl allow NfNets src 172.16.0.0/24


http_access allow NfNets

Orain, edozien nabigatzailerekin beti baimendutako helbideekin goaz. Jaurlaritza, foru aldundien, edo beti interesgarriak diren orriak izan daitezke. Honela adieraziko diogu:


# All-Time Allowed Domains

include /etc/squid3/iak.okdoms.conf

/etc/squid3/iak.okdoms.conf fitxategiaren edukia hau izan daiteke:


# ---------- All-Time Allowed Domains ----------
acl AlWaysGO dst 212.55.8.132
acl AlWaysGO2 dstdomain .hezkuntza.net
# Eskolako helbide batzuk
acl AlWaysGO dst 82.194.66.176

acl AlWaysGO dst 10.22.3.8
acl AlWaysGO dst 172.31.249.2
acl AlWaysGO dst 172.31.249.3
acl AlWaysGO dst 172.31.249.1
# www.euskadi.net : Euskadi.Net, hezkuntza, Zenbait hiztegi (morris, 3000, Elhuyar...)
acl AlWaysGO dst 194.30.48.1
acl AlWaysGO dst 212.55.29.1
acl AlWaysGO dst 194.30.48.2
acl AlWaysGO dst 212.55.29.2
# parlamento.euskadi.net : Eusko legebiltzarreko administrazioko hiztegia
acl AlWaysGO dst 212.55.31.252
# www.bizkaia.net : Bizkaierazko hiztegia eta diputazioaren web orri nagusia
acl AlWaysGO dst 80.245.0.26
# www.gipuzkoa.net : Gipuzkoako diputazioaren web orri nagusia
acl AlWaysGO dst 82.116.160.2
# www.araba.net, www.alava.net : Arabako diputazioaren web orri nagusia
acl AlWaysGO dst 194.30.32.126
acl AlWaysGO dst 206.251.184.30
# www.hiztegia.net : Zerrenda orokorra
acl AlWaysGO dst 82.194.66.80
acl AlWaysGO2 dstdomain .euskaltzaindia.net
acl AlWaysGO2 dstdomain .hiru.com
acl AlWaysGO2 dstdomain .hizkuntza.tk
acl AlWaysGO2 dstdomain .ehu.es
acl AlWaysGO2 dstdomain .infor.es
acl AlWaysGO2 dstdomain .euskadi.net
acl AlWaysGO2 dstdomain .gestionet.info
acl AlWaysGO2 dstdomain .kaspersky.com
acl AlWaysGO2 dstdomain .microsoft.com

http_access allow AlWaysGO
http_access allow AlWaysGO2

Orain esan diezaiokegu, ez dezala sekula utzi konektatzera ez-egokiak diren tokietara. Pornoak, deskarga guneak, etab. Esango diegu, /etc/squid3/iak.nodoms.conf fitxategiaren edukia har dezala.


# ---------- Internet Access Control ----------

# All-Time Banned Addresses
acl banned url_regex "/etc/squid3/iak.nodoms.conf"
http_access deny banned

/etc/squid3/iak.nodoms.conf fitxategiaren edukia hau izan daiteke:


megaupload.com

rapidshare.com
gigasize.com
bluehost.to
x7.to
uploaded.to
filefactory.com
freakshare.net
megashares.com
meinupload.com
megarotic.com
macizorras.com
badongo.com
depositfiles.com
easy-share.com
filehostme.com
filer.net
netload.com
minijuegos.com

Orain nabigatzaileen txanda da. Irazi ditzan esango diogu squid-i.:

# ---------- Browser Definitions and Access Control ----------
include /etc/squid3/iak.brow.conf

/etc/squid3/iak.brow.conf edukia honelakoa izan daiteke:

acl OKBrowser browser Firefox
acl OKBrowser browser Opera
acl OKBrowser browser Safari
acl OKBrowser browser Konqueror
acl OKBrowser browser Galeon
acl OKBrowser browser Camino
acl OKBrowser browser Gecko
acl OKBrowser browser Chrome
acl OKBrowser browser Java

http_acces deby !OKBrowser

Ez badugu nabigatzailerik filtratu nahi, hutsirik utziko dugu fitxategia, baina fitxategia egon behar da.

Hemen, atzipen beti baimenduta daukaten ikasgelen edo IP multzoen zerrenda jarriko dugu. Hurrengo hau jarriko dugu squid3 proxyaren konfigurazio fitxategian:

# ---------- All_Time Allowed Source IP Ranges ----------
include /etc/squid3/iak.wipr.conf

/etc/squid3/iak.wipr.conf fitxategiaren edukia hinako zerbait izango da:

# ---------- All_Time Allowed Source IP Ranges ----------
# --- Gela Bakarrak ---
acl whiteiprange-01 src 10.22.1.244-10.22.1.239
http_access allow whiteiprange-01

# --- VIP Gelak ---

acl whiteiprange-02 src 10.22.3.16-10.22.3.31
http_access allow whiteiprange-02

Orain, edozein saretan egon daitezken ordenagailuei emango diegu atzipena euren MAC helbidearen bidez. Erabilgarria izan daiteke baita Windows DHCP zerbitzaria daukaten sareetan, non helbideak dinamin¡koak izaten dira.

INPORTANTEA: MAC helbidean oinarritutako acl-ak funtziona dezan, ordenagailu bezeroak proxyari zuzenean konektaturiko sare batean egon behar dute. Proxya DMZ-n badago, ez du funtzionatuko.

Hurrengo hau jarriko dugu /etc/squid3/squid.conf proxyaren konfigurazio fitxategian.

# All Time Allowed MAC Addresses
include /etc/squid3/iak.wmacs.conf

/etc/squid3/iak.wmacs.conf fitxategiaren edukia holako zerbait izango da:

# ---------- All Time Allowed MAC Addresses ----------
# --- ZUGU-PC01 ---
acl whitemacs arp AA:AA:AA:AA:AA:AA
# --- ZUGU-PC02 ---
acl whitemacs arp BB:BB:BB:BB:BB:BB
# --- ZUGU-PC03 ---
acl whitemacs arp CC:CC:CC:CC:CC:CC
http_access allow whitemacs

Orain ikasgelen kontrola jarriko dugu.

# ---------- Controlled Classrooms ----------
include /etc/squid3/iak.room.conf

/etc/squid3/iak.room.conf fitxategiaren edukia, holakoa zerbait izango da hasieran:

# ---------- List of Classrooms ----------
# ---------- IP Controlled Classrooms ----------
# --- NA106 ---
acl room-01 src 10.22.0.16-10.22.0.47
http_access deny room-01
# --- NA103 ---
acl room-02 src 10.22.0.48-10.22.0.79
http_access deny room-02
# --- EG001 ---
acl room-03 src 10.22.1.144-10.22.1.159
http_access deny room-03
# --- EG002 ---
acl room-04 src 10.22.1.160-10.22.1.175
http_access deny room-04
# --- EG101 ---
acl room-05 src 10.22.0.144-10.22.0.159
http_access deny room-05
# --- EG102 ---
acl room-06 src 10.22.0.160-10.22.0.191
http_access deny room-06
# --- EG104 ---
acl room-07 src 10.22.0.192-10.22.0.207
http_access deny room-07
# --- EG109 ---
acl room-08 src 10.22.0.208-10.22.0.239
http_access deny room-08
# --- NA109 ---
acl room-09 src 10.22.1.16-10.22.1.31
http_access deny room-09
# --- NA110 ---
acl room-10 src 10.22.1.32-10.22.1.47
http_access deny room-10
# --- NA111 ---
acl room-11 src 10.22.1.48-10.22.1.63
http_access deny room-11
# --- NA112 ---
acl room-12 src 10.22.1.64-10.22.1.79
http_access deny room-12
# --- FS013 ---
acl room-13 src 10.22.1.80-10.22.1.95
http_access deny room-13
# --- FS014 ---
acl room-14 src 10.22.1.224-10.22.1.239
http_access deny room-14
# --- FM003 ---
acl room-15 src 10.22.1.208-10.22.1.223
http_access deny room-15
# --- FM104 ---
acl room-16 src 10.22.1.176-10.22.1.191
http_access deny room-16
# --- FM105 ---
acl room-17 src 10.22.1.192-10.22.1.207
http_access deny room-17
# ---------- MAC Controlled Classrooms ----------
# --- NA903 ---
acl room-18 arp AA:AA:AA:AA:AA:AA
acl room-18 arp BB:BB:BB:BB:BB:BB
acl room-18 arp CC:CC:CC:CC:CC:CC
acl room-18 arp DD:DD:DD:DD:DD:DD
acl room-18 arp EE:EE:EE:EE:EE:EE
acl room-18 arp FF:FF:FF:FF:FF:FF
http_access deny room-18
# --- NA1021 ---
acl room-19 arp FF:FF:FF:FF:FF:FF
acl room-19 arp EE:EE:EE:EE:EE:EE
acl room-19 arp DD:DD:DD:DD:DD:DD
acl room-19 arp CC:CC:CC:CC:CC:CC
acl room-19 arp BB:BB:BB:BB:BB:BB
acl room-19 arp 33:33:33:33:33:33
acl room-19 arp AA:AA:AA:AA:AA:AA
http_access deny room-19

http_access deny all

Behar ditugun beste parametro batzuk:


# ---------- Other Parameters ----------

http_reply_access allow all
forwarded_for off
icp_access allow all
half_closed_clients off

Errorerik egin dugun proba dezagun. Hortarako, konfigurazio fitxategia aztertzeko agintea erabiliko dugu:

    squid3 -k parse

Dena ongi badago, konfigurazio berria har dezan esango diogu:


    service squid3 reload
 

Proxy-a probatu aurretik, DMZn baldin badago, atzipena baimendu behar dugu suhesian. Honela geratuko litzateke erregla:

Source

Destination

Service

Action

Irakasleak

Zuzendaritza

Zerbitzariak

Internet Atzipen Kontrola

http (80) Accept

Irakasleak

Ikasleak

Zuzendaritza

Zerbitzariak

Internet Atzipen Kontrola

squid (3128)

Accept

Proxy-a probatzeko, nabigatzailearen hobespenak aldatu, eta esan proxy-a duela Internet Atzipen Kontrolaren IP-an, eta 3128 portuan. Hurrengo atala den "Nabigatzaileak konfiguratzen" ikus dezakezu. Sorte on!

Proba dezagun funtzionamendua. Jar diezaiogu ordenagailu bati 172.16.1.18/24 helbidea. Helbide hau, gela-01 gelako bigarren ordenagailuaren helbidea da. Hurrengo aginte hau egikarituko dugu, eta Internetera atzipena duen egiaztatuko dugu. Ez probatu MSIE nabigatzailearekin ;-) Erabili Suzko Azeria. 


    sed -i s/http_access\ deny\ room-01/http_access\ allow\ room-01/ /etc/squid3/iak.rooms.conf
    service squid3 reload

Dena ongi? Aurrera!

Arazoak sortzen direnean

ACLekin lan egiten dugunean, sarritan sortzen dira arazoak, eta erregistroak ez digu informazio gehiegirik ematen. Hurrengo parametroak jarri /etc/squid3/squid.conf fitxategian, eta berrabiarazi squid. Sorte on!


debug_options ALL,1 33,2

debug_options ALL,1 33,2 28,9

Atzipen Kontrolaren script-a

Interneterako gelen atzipena zabaldu eta ixteko ez dugu /etc/squid3/iak.rooms.conf fitxategia zuzenean aldatuko, baizik eta web zerbitzariak egikaritzen duen script exekutagarri baten bitartez. Script honek, erregistro fitxategi bat sortzen du. Fitxategi honetan, nork, noiz, nondik, eta zein nabigatzailekin eman duen aldatze agintea agertuko dira. Fitxategi hau /var/log/iak direktorioan sortuko dugu. Beraz, Apache agikaritzen duen prozesuak idazteko baimenak izan behar ditu direktorio hontan. Hotarako:


    mkdir /var/log/iak
    chown www-data:root /var/log/iak

Orain script-a sortuko dugu. Script-a, atzipen kontrolaren /var/www/iak direktorioan kokatuta dago. Hona hemen iakmanager.php scriptaren kodea:


<?php

/*================================================================================================
Script to Open / Close classrooms
--------------------------------------------------------------------------------------------------
LHIAK 6.0
    2014-05-11: SQUID 2 capability droped. Only SQUID3
                Max classroom number incresed to 32
LHIAK 5.2
    2014-01-11: LOG user username and host address
    2014-05-07: Support for DEMO mode (iakdemo) capability added
LHIAK 5.1
    2013-04-23: SQUID3 capability added
================================================================================================*/
require_once("/var/www/lhiak/lhiak_version.inc");


header ("Location: {$_SERVER['HTTP_REFERER']}");

if ($LHIAK_ISADEMO == "N")

    $CONF_FILE = "/etc/squid3/iak.rooms.conf";

else

    $CONF_FILE = "/var/www/lhiak/iakdemo/sq.conf";


$PROG = "sudo /bin/sed";

$COMMAND3 = "sudo /etc/init.d/squid3 reload";
$LOGFILE = "/var/log/iak/iak.log";

$ADDR = $_SERVER ['REMOTE_ADDR'];
$nowdate = date('Y.m.d-H:i');

if (isset($_POST['room']) && isset($_POST['action'])) {

    $room = $_POST['room'];
    $action = $_POST['action'];
    $host = gethostbyaddr($ADDR);
    $user = getenv('REMOTE_USER');

    exec("sudo /bin/echo  $nowdate - $user - $host - $ADDR - $room - $action >> $LOGFILE");

    if ($action == "close") {
        exec("$PROG -i s/http_access\ allow\ $room/http_access\ deny\ $room/ $CONF_FILE");
    }
    else {
        exec("$PROG -i s/http_access\ deny\ $room/http_access\ allow\ $room/ $CONF_FILE");
    }

    exec("$COMMAND3");
}
else {

    exec("sudo /bin/echo  $nowdate - TO_DEFAULT >> $LOGFILE");

# Gela 1 (no closed automagically)
#    exec("$PROG -i s/http_access\ allow\ room-01/http_access\ deny\ room-01/ $CONF_FILE");

# 2. classroom (automagically closed)
    exec("$PROG -i s/http_access\ allow\ room-02/http_access\ deny\ room-02/ $CONF_FILE");

# 3. classroom (automagically closed)
    exec("$PROG -i s/http_access\ allow\ room-03/http_access\ deny\ room-03/ $CONF_FILE");

# No closed room
#    exec("$PROG -i s/http_access\ allow\ room-04/http_access\ deny\ room-04/ $CONF_FILE");

# No closed room
#    exec("$PROG -i s/http_access\ allow\ room-05/http_access\ deny\ room-05/ $CONF_FILE");

# Closed room
    exec("$PROG -i s/http_access\ allow\ room-06/http_access\ deny\ room-06/ $CONF_FILE");

#
    exec("$PROG -i s/http_access\ allow\ room-07/http_access\ deny\ room-07/ $CONF_FILE");

#
    exec("$PROG -i s/http_access\ allow\ room-08/http_access\ deny\ room-08/ $CONF_FILE");

#
    exec("$PROG -i s/http_access\ allow\ room-09/http_access\ deny\ room-09/ $CONF_FILE");

# room10
#R10    exec("$PROG -i s/http_access\ allow\ room-10/http_access\ deny\ room-10/ $CONF_FILE");

# room11
#R11    exec("$PROG -i s/http_access\ allow\ room-11/http_access\ deny\ room-11/ $CONF_FILE");

# room12
#R12    exec("$PROG -i s/http_access\ allow\ room-12/http_access\ deny\ room-12/ $CONF_FILE");

# room13
#R13    exec("$PROG -i s/http_access\ allow\ room-13/http_access\ deny\ room-13/ $CONF_FILE");

# room14
#R14    exec("$PROG -i s/http_access\ allow\ room-14/http_access\ deny\ room-14/ $CONF_FILE");

# room15
#R15    exec("$PROG -i s/http_access\ allow\ room-15/http_access\ deny\ room-15/ $CONF_FILE");

# room16
#R16    exec("$PROG -i s/http_access\ allow\ room-16/http_access\ deny\ room-16/ $CONF_FILE");


    exec("$COMMAND3");
}
?>

On egin!

Web orria

Orain, web orri bat egingo dugu. Web zerbitzariaren iak direktorioan jarriko dugu. Debian banaketan /var/www/iak/. Sor dezagun direktorio hau.


    
mkdir /var/www/iak

Web orriaren izena iak.php izango da. Hemen duzu adibide bat 8 gelarekin:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
//
// LHIAK 6.0.0
//
-->
<head>
  <title>nire-eskola.net :: Internet Atzipen Kontrola</title>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
label {
display: block;
min-height: 100%; /* NO IE */
height: auto !important; /* IE8 ... */
height: 100%; /* IE6 */
}
</style>
</head>
<body leftmargin="0" topmargin="0" style="background-color: #e0f0fb;">

<?php
require_once("/var/www/lhiak/lhiak_version.inc");
if ($LHIAK_ISADEMO == "N")
    $iakroomsconffile = file("/etc/squid3/iak.rooms.conf");
else
    $iakroomsconffile = file("/var/www/lhiak/iakdemo/sq.conf");

$room = 0;
 
$iakroomsconffile = file("/etc/squid/iak.rooms.conf");
foreach ($iakroomsconffile as $line => $text){
    $pos1 = strpos($text, 'http_access');
    $pos2 = strpos($text, 'room');
    if ($pos1 === 0 and $pos2 > 0){
        $access = split(" ", $text);
        if (trim($access[1]) === "allow"){
            $state[$room++] = "1";
        }
        else{
            $state[$room++] = "0";
        }
    }
    else {
    }
}
?>

<div style="text-align: center;"><img alt="" src="goikoikurra-web.png"><br>
</div>
<div style="text-align: center;"><big style="text-decoration: underline; font-weight: bold;"><big><big>
Internet Atzipen Kontrola</big></big></big><br>
</div>
<br>
<form style="margin-top: 22px; height: 222px;" method="post" action="iakmanager.php" name="aukerak">
  <table style="text-align: left; margin-left: auto; margin-right: auto; width: 533px; height: 198px; background-color: rgb(255, 255, 255);" align="center" border="0">
    <tbody>
      <tr>
        <td style="color: rgb(0, 0, 0); background-color: <?php if (isset($state[0]) && ($state[0] == "1")) { echo 'rgb(102, 255, 102)';} else {echo 'rgb(255, 102, 102)';} ?>; text-align: left;">
        <label for="room-01>&nbsp;&nbsp;<input name="room" value="room-01" id="room-01" type="radio">&nbsp;Gela-01</label>
        </td>
        <td style="color: rgb(0, 0, 0); background-color: <?php if (
isset($state[1]) && ($state[1] == "1")) { echo 'rgb(102, 255, 102)';} else {echo 'rgb(255, 102, 102)';} ?>; text-align: left;">
       
<label for="room-02>&nbsp;&nbsp;<input name="room" value="room-02" id="room-02" type="radio">&nbsp;Gela-02</label>
        </td>
        <td style="color: rgb(0, 0, 0); background-color: <?php if (
isset($state[2]) && ($state[2] == "1")) { echo 'rgb(102, 255, 102)';} else {echo 'rgb(255, 102, 102)';} ?>; text-align: left;">
       
<label for="room-03>&nbsp;&nbsp;<input name="room" value="room-03" id="room-03" type="radio">&nbsp;Gela-03</label>
        </td>
        <td style="color: rgb(0, 0, 0); background-color: <?php if (
isset($state[3]) && ($state[3] == "1")) { echo 'rgb(102, 255, 102)';} else {echo 'rgb(255, 102, 102)';} ?>; text-align: left;">
       
<label for="room-04>&nbsp;&nbsp;<input name="room" value="room-04" id="room-04" type="radio">&nbsp;Gela-04</label>
        </td>
      </tr>
      <tr>
        <td style="color: rgb(0, 0, 0); background-color: <?php if (
isset($state[4]) && ($state[4] == "1")) { echo 'rgb(102, 255, 102)';} else {echo 'rgb(255, 102, 102)';} ?>; text-align: left;">
       
<label for="room-05>&nbsp;&nbsp;<input name="room" value="room-05" id="room-05" type="radio">&nbsp;Gela-05</label>
        </td>
        <td style="color: rgb(0, 0, 0); background-color: <?php if (
isset($state[5]) && ($state[5] == "1")) { echo 'rgb(102, 255, 102)';} else {echo 'rgb(255, 102, 102)';} ?>; text-align: left;">
       
<label for="room-06>&nbsp;&nbsp;<input name="room" value="room-06" id="room-06" type="radio">&nbsp;Gela-06</label>
        </td>
        <td style="color: rgb(0, 0, 0); background-color: <?php if (
isset($state[6]) && ($state[6] == "1")) { echo 'rgb(102, 255, 102)';} else {echo 'rgb(255, 102, 102)';} ?>; text-align: left;">
       
<label for="room-07>&nbsp;&nbsp;<input name="room" value="room-07" id="room-07" type="radio">&nbsp;Gela-07<b/labelr>
        </td>
        <td style="color: rgb(0, 0, 0); background-color: <?php if (
isset($state[7]) && ($state[7] == "1")) { echo 'rgb(102, 255, 102)';} else {echo 'rgb(255, 102, 102)';} ?>; text-align: left;">
       
<label for="room-08>&nbsp;&nbsp;<input name="room" value="room-08" id="room-08" type="radio">&nbsp;Gela-08</label>
        </td>
      </tr>
      <tr>
        <td style="color: rgb(255, 255, 255); background-color: rgb(255, 102, 102);">
&nbsp;
        </td>
        <td colspan="2" style="color: rgb(255, 255, 255); background-color: rgb(255, 102, 102);" align="center">
        <input name="action" value="open" type="radio">Ireki
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <input name="action" value="close" type="radio">Itxi
        </td>
        <td style="color: rgb(255, 255, 255); background-color: rgb(255, 102, 102);">
        </td>
      </tr>
      <tr>
        <td colspan="4" rowspan="1" style="color: rgb(255, 255, 255); background-color: rgb(255, 102, 102); text-align: center;">
        <input value=" Bidali " type="submit"></td>
      </tr>
    </tbody>
  </table>
</form>
<div style="text-align: center;"><img alt="" src="behekoikurra-web.png"><br>
</div>
</body>
</html>

Web zerbitzaria root bezala

Normalean, web zerbitzaria izango da, eta es root, script-a egikarituko duena. Bestalde, root baimenak behar dira squid prozesua kudeatzeko. Arazoa konpontzeko, root baimenak emango dizkiogu web zerbitzaria egikaritzen duen erabiltzaileari. Kasu honetan www-data. Soilik egikarituko behar ditu bi aginte.  Hortarako sudo agintea erabiliko dugu. sudo agintea /etc/sudoers fitxategian konfiguratzen da, eta baita /etc/sudoers.d/ direktorioan  jartzen diren fitxategietan. iak-sudoers fitxategia jarriko dugu direktorio honetan, eta horrela ez dugu ukitu behar /etc/sudoers fitxategia. Hona hemen bere edukia:


# User alias specification
User_Alias IAK = www-data

# Cmnd alias specification
Cmnd_Alias IAKCOMMANDS = service squid3 reload, /etc/init.d/squid3 reload, /bin/sed

# User privilege specification
IAK ALL = (root) NOPASSWD: IAKCOMMANDS

Como se puede ver, no va a pedir contraseña. Listo!

Autentifikazioa

Web orri hontan soilik sartu ahal izan behar da irakasle, zuzendaritza eta sareko azpisareetatik. Honez gain, soilik sartu behar dira irakasleak. Irakasleen autentifikazioa hiru eratara egin dezakegu. Lehenengoa, fitxategi baten aurka. Bigarrena, MS Active Directory-ren aurka eta hirugarrena OpenLDAP direktorio baten aurka.

Fitxategi baten aurka

Fitxategi baten aurka autentifikatzeko irakasleak, Apache konfiguratu behar dugu. /etc/apache2/conf.d/ direktorioan, iak.conf fitxategian, hurrengo hau jarriko dugu:


ServerAdmin webadmin@nire-eskola.net

<Directory /var/www/iak/>
    Order deny,allow
    Deny from all
    AllowOverride AuthConfig Limit
    Allow from 127.0.0.1 172.16.0 172.16.2 172.16.3
    AuthType Basic
    AuthName "Internet Atzipen Kontrola. Pasahitza behar duzu sartu"
    AuthUserFile "/var/lib/apache2/iak.pass"
    Require valid-user
</Directory>

Orain, erabiltzaileak eta pasahitzak sortu behar ditugu /var/lib/apache2/iak.pass fitxategian. 8 irakasle aukeratuko ditugu, eta baimendu egingo ditugu. Pasahitza eskatuko digu, eta lehenengo erabiltzailearekin -c parametroa jarri behar dugu, fitxategia sor dezan. Hurrengo aginteak egikaritu:


    htpasswd2 -c /var/lib/apache2/iak.pass irakasle1
    htpasswd2 /var/lib/apache2/iak.pass irakasle2
    htpasswd2 /var/lib/apache2/iak.pass irakasle3
    htpasswd2 /var/lib/apache2/iak.pass irakasle4
    htpasswd2 /var/lib/apache2/iak.pass irakasle5
    htpasswd2 /var/lib/apache2/iak.pass irakasle6
    htpasswd2 /var/lib/apache2/iak.pass irakasle7
    htpasswd2 /var/lib/apache2/iak.pass irakasle8

Erabiltzailea ezabatu nahi badugu ordea, -D parametroa emango diogu.

Orain, apache egikaritzen duen prozesuak irakur ahal dezan, ugazaba aldatuko diogu:


    chown www-data:root /var/lib/apache2/iak.pass

Azkenik, Apacheren konfigurazioa birkargatuko dugu.


    service apache2 reload

MS-en Active dIrectory-ren aurka

Gauza bera egin dezakegu Active Directory badaukagu. Kontutan izan beharko dugu, nola Active Directory-n, irakasleak gain, ikasleak ere eduki ditzakegu.

Lehenengo, Apache-ren modulu bi gaitu behar ditugu. Hona hemen nola:


    a2enmod ldap
    a2enmod authnz_ldap

Hona hemen /etc/apache2/conf.d/iak fitxategiaren edukia:


<Directory "/var/www/iak/">
    Options -Indexes
    AllowOverride AuthConfig Limit
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 172.16.0 172.16.2 172.16.3

    AuthName " INTERNET ATZIPEN KONTROLA "
    AuthType Basic
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative off

    AuthLDAPUrl "ldap://SERVER.nire-eskola.net:389/ou=irakasleak,dc=nire-eskola,dc=net?sAMAccountName?sub?(objectClass=*)"

    AuthLDAPBindDN "cn=IAKBind,cn=Users,dc=nire-eskola,dc=net"
    AuthLDAPBindPassword PASSWORD

    Require valid-user
</Directory>

Hona hemen LDAP-i dagozkion parametroen azalpen txiki bat:

Parametroa Azalpena
AuthBasicProvider Nork ematen duen autentifikazioa
AuthzLDAPAuthoritative Baimentzeko orduan, azkenengo hitza LDAP moduluak duen ala ez
AuthLDAPUrl Nondik bilatzen den irakasleen informazioa

ldap Erabiltzen den protokoloa
SERVER Zerbitzariaren DNS izena
nire-eskola.net Zerbitzariaren DNS domeinua
389 LDAP protokoloaren TCP portua
irakaslek "irakasleak" antolaketa unitatea
nire-eskola.net LDAP zuhaitzaren domeinu zatiak
sAMAccountName AD-n, erabiltzaile izena metatzeko erabiltzen del ezaugarriaren izena
sub Bilaketa sakonera: azpiko maila guztiak
objectClass=* Objetu moten iruzkina: Denak
AuthLDAPBindDN LDAP direktorioan bilaketa egiten duen erabiltzailea (Beharrezkoa AD-n)

cn Izen arrunta (Common Name)
IAKBind Bilaketa egiten duen erabiltzailearen izena
Users Lehenetsiz, AD-n erabiltzaile guztiak kontenedore honetan daude
AuthLDAPBindPassword Bilaketa egiten duen erabiltzailearen pasahitza

Arazotxo bat dago Linux-en LDAP eta AD-ren artean. Konpontzeko, hurrengo lerroa jarriko dugu /etc/ldap/ldap.conf fitxategian:

REFERRALS off

Orain, Apacheren  konfigurazioa birkargatuko dugu.

    service apache2 reload

OHARRA: Ahaztu gabe! Antibirusetik irakasleen erabiltzaile kontuak dituen zerbitzarira eginiko konexioentzat, ireki behar duzue suhesian 389 portua.

OpenLDAP-en aurka

Active Directory LDAP direktorioa bezala, OpenLDAP erabil dezakegu autentifikazioa egiteko.

Lehenengo, eta ADren kasuak bezala, Apache-ren modulu bi gaitu behar ditugu:


    a2enmod ldap
    a2enmod authnz_ldap

Hona hemen /etc/apache2/conf.d/iak fitxategiaren edukia:


<Directory "/var/www/iak/">
    Options -Indexes
    AllowOverride AuthConfig Limit
    Order deny,allow
    Deny from all
    Allow from from 127.0.0.1 172.16.0 172.16.2 172.16.3

    AuthName " INTERNET ATZIPEN KONTROLA "
    AuthType Basic
    AuthBasicProvider ldap

    AuthLDAPUrl "ldap://SERVER.nire-eskola.net:389/ou=irakasleak,dc=nire-eskola,dc=net

    AuthLDAPBindDN "cn=IAKBind,dc=nire-eskola,dc=net"
    AuthLDAPBindPassword nire-pasahitz-izkutua

    Require valid-user
</Directory>

Debian Squeeze banaketaren kasuan, hurrengo lerroa honela geratu behar da:

    Require ldap-valid-user

Hona hemen OpenLDAP-en LDAP-ari dagozkion parametroen azalpen txiki bat:

Par�metro Explicaci�n
AuthBasicProvider Nork ematen duen autentifikazioa
AuthzLDAPAuthoritative Baimentzeko orduan, azkenengo hitza LDAP moduluak duen ala ez
AuthLDAPUrl Nondik bilatzen den irakasleen informazioa

ldap Erabiltzen den protokoloa
SERVER Zerbitzariaren DNS izena
nire-eskola.net Zerbitzariaren DNS domeinua
389 LDAP protokoloaren TCP portua
irakaslek "irakasleak" antolaketa unitatea
nire-eskola.net LDAP zuhaitzaren domeinu zatiak
AuthLDAPBindDN LDAP direktorioan bilaketa egiten duen erabiltzailea

cn Izen arrunta (Common Name)
IAKBind Erabiltzailearen izena
AuthLDAPBindPassword Bilaketa egiten duen erabiltzailearen pasahitza

Orain, Apacheren  konfigurazioa birkargatuko dugu.

    service apache2 reload

OHARRA: Ahaztu gabe! Antibirusetik irakasleen erabiltzaile kontuak dituen zerbitzarira eginiko konexioentzat, ireki behar duzue suhesian 389 portua.

Log fitxategia

Lehen aipatu denez, erregistro fitxategia /var/log/iak/iak.log da. Gehiegi has ez dadin, biratu egingo dugu. Hortarako /etc/logrotate.d/iak sortuko dugu hurrengo edukiarekin:


/var/log/iak/iak.log {
    weekly
    missingok
    rotate 12
    compress
    delaycompress
    notifempty
    create 640 www-data www-data
    sharedscripts
}

Konfigurazio automatikoa

Goizean eta arratsaldean, klaseak bukatu ondoren, defektuzko konfigurazioa jarriko dugu atzipen kontrolean. Automatikoki egingodugu, cron bidez. Lan hau aginduko diogu egunero 15:30 eta 23:30 etan. Horretarako, iakmanager.php fitxategtia egikarituko du default parametroarekin. Gure adibidean, klase guztiak itxiko ditu. Hortarako, /etc/cron.d/iak fitxategi bat sortuko dugu eduki honekin:


30 15,23 * * * www-data php5 /var/www/iak/iakmanager.php default

Azkenik, cron prozesua berrabiaraziko dugu.

    service cron reload

Proba dezagun ba aplikazioa. Hurrengo helbidea sartu nabigatzailean eta probatu.


http://iak.nire-eskola.net/iak/iak.php

Sorte on!