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.

FTP proxy v10 and up

Problem this snippet solves:

Summary: An FTP proxy that simulates FTP proxies found on Bluecoat and Cisco Ironport Proxies.

Contribution

Bhattman at gmail dot com

How to use this snippet:

NOTE: You need to apply the FTP Profile

Code :

when CLIENT_DATA {
set ftplogin [TCP::payload]
log local0. "login is $ftplogin"
if { $ftplogin starts_with "USER" } {
# You can set it up to use any DNS server you want.
set dnslookup "4.2.2.1"
set cuser [TCP::payload]
scan $cuser {%[^@]@%s} garbage sitename
scan $garbage %s%s cmd uid
set ips [RESOLV::lookup @$dnslookup -a $sitename]
if {$ips eq "" } {
# Input wasn't an IP address, take some default action?
reject
} else { 
TCP::payload replace 0 [TCP::payload length] ""
set ftp_serv "[lindex $ips 0]"
node [lindex $ips 0] [TCP::local_port]
}
}
TCP::release
}

when SERVER_CONNECTED {
    TCP::collect 20
}

when SERVER_DATA {
  set serv_data [TCP::payload]
if { $serv_data contains "220" } {
TCP::respond "USER $uid\r\n"
TCP::payload replace 0 [TCP::payload length] ""
}
TCP::release
}

Tested this on version:

10.0
Published Mar 17, 2015
Version 1.0

2 Comments

  • as a note - i've used the work behind this irule and modified it to handle a couple of exceptions and locally authenticate a user - code here - https://devcentral.f5.com/s/articles/unauthenticated-or-authenticated-ftp-proxy