[zorp-hu] Url szures es regularis kifejezesek

Balazs Scheidler bazsi@balabit.hu
Thu, 13 Dec 2001 22:19:33 +0100


On Thu, Dec 13, 2001 at 10:04:54AM +0100, KUN Arpad wrote:

> Fut a zorp, az alap funkciok mukodnek is.
> Vegigolvastam a share/zorp/pylib/Zorp/Http.py -t, hogy milyen funkciokra
> kepes, talaltam peldakat is. Igaz ezek elteroek voltak azoktol, amiket a
> zorp reference guide -ban olvastam. Gondolom azota valtozott nehany
> dolog.
> Nehany webserver elott transzparens szuresre szeretnem hasznalni a
> zorpot, es egy ket dologgal nem boldogultam eddig.
> 
> Ami a problemam, hogy a megadott uj peldak nem nagyon akartak mukodni
> (konkretan az url szures). A kerdesem, hogy mitol lehet ez? (alul a
> reszletek)
> 
> A masik, ami erdekelne, hogy lehetseges-e reguralis kifejezesek alapjan
> szurni? Pl http get-ekre szeretnek nehany rule-t felvinni, de a pyhton
> egyelore eleg elvarazsolt nekem. Tudnal egy-ket peldat mondani, hogy
> egymas ala hogy lehetne ezeket definialni?
> Valahogy igy kepzelem el: (persze lehet, hogy hibasan, de talan ertheto
> :) )
> 
>                 if (url == "^.*\/etc\/passwd.*$")
>                   return HTTP_REQ_ACCEPT
>                 self.error_info = 'Content denied by policy.'
>                 return HTTP_REQ_REJECT
> 
>                 if (url == "http://www.ungabunga.hu")
>                   return HTTP_REQ_ACCEPT
>                 self.error_info = 'Content denied by policy2.'
>                 return HTTP_REQ_REJECT

a python az re modullal tamogatja a regularis kifejezesek hasznalatat. ezt
egyresz megirhatod te magad, de hasznalhatod a Matcher.py altal kinalt
funkciokat is. pl:

class MyHttp(HttpProxyURIFilter):
	matcher=RegexpFileMatcher('/etc/zorp/http.deny', '/etc/zorp/http.ignore')

ennyi. ha megnezed a HttpProxyURIFilter kodjat, akkor valami olyasmit latsz,
amit te is akartal csinalni. A Matcher ket file-t hasznal:

* minden ami a http.deny-be fel van sorolva, azt a proxy nem fogja engedni
  (regexp)
* minden ami a http.ignore -ban van, az kivetel, tehat ha veletlenul a
  http.deny illeszkedik, akkor ezzel kiszurhetjuk
	

> 
> -----
> 
> Itt van a pillanatnyi config, amire a syslogba ezt a hibauzenetet
> szorja:
> 
> ---------- log ----------
> zorp-http[25450]: zorp version 1.4.0rc13 going down. 
> zorp-http[25452]: (zorp/nosession):   File
> "/usr/local/zorp/etc/zorp/policy.py", line 83 
> zorp-http[25452]: (zorp/nosession):     if (url ==
> "http://www.balabit.hu") 
> zorp-http[25452]:
> (zorp/nosession):                                       ^ 
> zorp-http[25452]: (zorp/nosession): SyntaxError: invalid syntax 
> ----------

biztosan kevered a space-ket es a tabokat, illetve nem egyforman hasznalod
oket.

> class IntraHttp(HttpProxy):
> 
>         def config(self):
>         	HttpProxy.config(self)
>                 self.transparent_mode = TRUE
> 		# self.request_header["User-Agent"] = (HTTP_HDR_CHANGE_VALUE, "Lynx/2.8.3rel.1")
>                 self.request["GET"] = (HTTP_REQ_POLICY, self.filterURL)
>                 
> 	def filterURL(self, method, url, version):
>                 if (url == "http://www.balabit.hu")
>                   return HTTP_REQ_ACCEPT
>                 self.error_info = 'Content denied by policy.'
>                 return HTTP_REQ_REJECT
> 	        # return Z_REJECT here to reject this request
> 	        # change self.request_url to redirect to another url
> 	        # change connection_mode to HTTP_CONNECTION_CLOSE to force kept-alive connections to close
> 	        log("http.info", 3, "%s: GET: %s" % (self.session.session_id, url))
> 		return HTTP_REQ_ACCEPT
> 

figyelj arra, hogy a tab a 8 space-nek szamit, es egy adott indent levelen
ugyanannyi whitespace-nek kell lennie. (probald esetleg expand-dal
kicserelni a tabokat space-re, es nezd meg, hogy az egy szinten levo dolgok
ugyanott vannak-e)

-- 
Bazsi
PGP info: KeyID 9AF8D0A9 Fingerprint CD27 CFB0 802C 0944 9CFD 804E C82C 8EB1