O prolínání práce v IT a osobního života

neděle 30. listopadu 2008

TCL scriptování v IOSu

Od přítelkyně jsem dostal šílené zadání. Požaduje aby její syn netrávil na internetu přes týden více než tři hodiny denně a o víkendu maximálně pět hodin denně. Na můj doplňující dotaz mě dorazila odpovědí, že kolik času denně jeho počítač běží nerozhoduje :).

Přiznávám, že jsem chtěl odpovědět "to nejde", ale děsně nerad se vzdávám. Chvíli jsem nad tím přemýšlel a kladl si otázku jak detekovat, že je z dané IP adresy používaný internet. Nakonec mě napadlo detekovat přítomnost NATových nebo INSPECtových pravidel. Nakonec jsem se rozhodl detekovat NAT pravidla, kvůli jejich delší platnosti. Vytvořil jsem dva scripty:


##
## patrik_test.tcl
##
set fileName "ftp://x.x.x.x/file"
set counter 0
set test1 0

##
## Kontrola zda pari
##
set output [ split [ exec "sh ip nat translations | inc x.x.x.x" ] "\n" ]
foreach line $output {
incr test1
}

##
## Zpracovani vysledku
##
if { $test1 > 0 } {
gets [ open $fileName ] counter
if { $counter == 1 } {
puts "patrik konec!!!"
ios_config "int fa1" "shutdown" "ip access-list extended ACL_LAN-HOME" "no 30"
} else {
incr counter -1
puts [ open $fileName w+ ] $counter
}
}




##
## patrik_set.tcl
##
set fileName "ftp://x.x.x.x/file"
set counter [lindex $argv 0]

##
## Odblokovat
##
ios_config "int fa1" "no shutdown" "ip access-list extended ACL_LAN-HOME" "30 permit ip host x.x.x.x any time-range DAYSBEFORESCHOOL"

##
## Ulozit counter
##
puts [ open $fileName w+ ] $counter



Tyto dva scripty jsou uloženy ve flash routeru a jsou periodicky spouštěny pomocí EEM:

event manager applet PATRIK_TEST
event timer cron name "10min" cron-entry "*/10 * * * *" maxrun 60
action 1.0 cli command "tclsh flash:/patrik_test.tcl"
event manager applet PATRIK_SET2
event timer cron cron-entry "1 0 * * 5-7"
action 1.0 cli command "tclsh flash:/patrik_set.tcl 60"
event manager applet PATRIK_SET1
event timer cron cron-entry "1 0 * * 1-4"
action 1.0 cli command "tclsh flash:/patrik_set.tcl 36"
!

U výše popsaného řešení jsem objevil jediný problém. A sice, že EEM spouští uvedené scripty ve stejné minutě dvakrát. Netuším zda se jedná o chybu IOSu, nebo mi něco zásadního uniklo v konfiguraci cronu, ale zatím tento problém řeším dvojnásobnou velikostí nastavovaných counterů. Pokud byste měl někdo nějaký nápad, kde hledat zakopanéh psa, tak mě neváhejte kontaktovat, děkuji.
Share:

2 komentáře:

  1. Myslím, že nebohého synátora přítelkyně obíráte o čas než NAT pravidlo vyexpiruje. Od každého NAT pravidla by se měl odečítat nějaký timeout. Teda minimálně u UDP.

    OdpovědětVymazat
  2. Děkuji za připomínku. Doufám, že tento nedostatek řeší samotné testování po deseti minutách. Zvážím prodloužení časového intervalu, respektive explicitní nastavení platnosti NATových pravidel.

    OdpovědětVymazat

Předem děkuji za Váš komentář.
Prosím o Váš podpis, anonymní komentáře nemají žádnou váhu a nikdo je nebere vážně. Děkuji.