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:

pátek 28. listopadu 2008

Timebased ACL

Pokud si dobře pamatuji, tak jsem snad nikdy nepotřeboval časově závislé access listy. Dokonce jsem si i lámal hlavu s tím, k čemu můžou být vlastně dobré. Dneska to už vím, například k tomu, aby nám děti nesurfovali po nocích :).

!
ip access-list extended ACL_LAN-HOME
permit ip host 192.168.211.212 any time-range DAYSBEFORESCHOOL
deny ip host 192.168.211.212 any log
!
time-range DAYSBEFORESCHOOL
periodic Monday Tuesday Wednesday Thursday Sunday 5:00 to 22:30
periodic Friday 5:00 to 23:59
periodic Saturday 0:00 to 23:59
!

Jen si je třeba ohlídat, aby zvídavému raubířovi nepomohla změna IP adresy...
Share:

čtvrtek 27. listopadu 2008

WCCP - Transparent Squid na Cisco PIX/ASA

V uplynulém týdnu jsem mimo jiné řešil i zprovoznéní transparnentní WWW proxy na síti, která je k internetu připojená pomocí Cisco PIX verze 8.0(3). Jako proxy byl použitý Squid+Dansguardian na Debianu. V podstatě jedinou rozumnou možností jak navěsit transparentní proxy na Cisco PIX/ASA či IOS je použití WCCP (Web Cache Control Protocol).



Squid + Dansguardian


V konfiguračním soubouru squid.conf je třeba přidat následující řádky:

http_port 192.168.1.25:3128 transparent
wccp2_router IP_FIREWALLU

V konfiguraci Dansguardian není třeba měnit nic. Dansguardian poslouchá na portu tcp/8080 a sám se pak dotazuje na tcp/3128 kde poslouchá Squid.

Debian


Konfigurace hostitelského Linuxu obsahuje konfiguraci GRE tunelu a přesměrování portu pro Dansguardian. Následuje ukázka z /etc/network/interfaces:

# The primary network interface
auto eth0
iface eth0 inet static
address IP_PROXY
netmask 255.255.255.0
gateway X.X.X.X

pre-up ( \
/sbin/modprobe ip_conntrack ; \
/sbin/modprobe iptable_nat ; \
)
post-up ( \
/sbin/ip link set eth0 mtu 1476 ; \
/sbin/ip tunnel add wccp0 mode gre remote IP_FIREWALLU \
local IP_PROXY dev eth0 ; \
/sbin/ip addr add IP_PROXY/32 dev wccp0 ; \
/sbin/ip link set wccp0 up ; \
/sbin/sysctl -w net.ipv4.conf.wccp0.rp_filter=0 ; \
/sbin/sysctl -w net.ipv4.conf.eth0.rp_filter=0 ; \
/sbin/iptables -t nat -A PREROUTING -i wccp0 -p tcp -m tcp \
--dport 80 -j REDIRECT --to-ports 8080 ; \
)
pre-down ( \
/sbin/ip link set wccp0 down ; \
/sbin/ip tunnel del wccp0 ; \
)


Cisco PIX/ASA


Konfigurace firewallu je velmi jednoduchá:

access-list WCCP_WEB extended permit tcp X.X.X.X 255.255.255.0 any eq www
wccp web-cache redirect-list WCCP_WEB
wccp interface LAN web-cache redirect in

Share: