For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

dennypayne's avatar
dennypayne
Icon for Employee rankEmployee
Jun 22, 2006

TCP::collect question

In the whitepaper regarding Siebel deployments referenced at http://www.f5.com/solutions/deployment/siebel77_bigip9_dg.html there is the following rule:


when CLIENT_ACCEPTED { 
TCP::collect 1 } 
when CLIENT_DATA { 
if { [findstr [TCP::payload] "/siebel" 0 " "] == "/siebel/sccobjmgr_enu" } { 
 log local0. "Using pool SCCObjMgr_enuConnPool" 
pool SCCObjMgr_enuConnPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] == "/siebel/eserviceobjmgr_enu" } { 
 log local0. "Using pool eServiceObjMgr_enuConnPool" 
pool eServiceObjMgr_enuConnPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] == "/siebel/sccobjmgr_enu/rr" } { 
 log local0. "Using pool SCCObjMgr_enuRRPool" 
pool SCCObjMgr_enuRRPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] == "/siebel/eserviceobjmgr_enu/rr" } { 
 log local0. "Using pool eServiceObjMgr_enuRRPool" 
pool eServiceObjMgr_enuRRPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] contains "/!3." } { 
 log local0. "Using pool siebelapp2ServerPool" 
pool siebelapp2ServerPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] contains "/!1." } { 
 log local0. "Using pool siebeldbServerPool" 
pool siebeldbServerPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] contains "/!2." } { 
 log local0. "Using pool siebelapp1ServerPool" 
pool siebelapp1ServerPool 
} 
else { 
log local0. "Rejected request for [findstr [TCP::payload] "/siebel" 0 " "]" 
discard } 
} ' } 

I'm not sure what the units are for on TCP::collect argument but I would assume it to be bytes. With that assumption, how can this rule work if you only collect 1 byte of data when the strings to be compared further down in the rule are larger than this?

Denny

3 Replies

  • I think the length value there is for the number of packets, not number of bytes (afaik getting, say, 1 byte vs 1 packet doesn't really take any extra resources).
  • Ah this would make more sense. I will see about updating the wiki to document this...

     

     

    Denny
  • unRuleY_95363's avatar
    unRuleY_95363
    Historic F5 Account
    No, the length is in bytes. But, here's the thing - think of it more as a "minimum length" to wait for. So, yes, indicating that you would minimally like 1 byte is sort of like saying you want to wait until the first packet with at least 1 byte. It doesn't mean that you won't get more - in all likelihood you will get more, that is unless you are using telnet in character mode...