I believe you're talking about this XFORWARD, right?
If your back-end SMTP server is Postfix, you can easily achieve the same via Proxy Protocol:
F5 can pass the Proxy Protocol info to Postfix via a simple iRule:
when CLIENT_ACCEPTED priority 100 {
set proxyheader "PROXY TCP[IP::version] [IP::remote_addr] [IP::local_addr] [TCP::remote_port] [TCP::local_port]\r\n"
}
when SERVER_CONNECTED priority 100 {
TCP::respond $proxyheader
}
and on Postfix side, you can edit master.cf as follows:
smtp inet n - n - - smtpd
10025 inet n - n - 1 postscreen
-o syslog_name=postfix/f5
-o postscreen_upstream_proxy_protocol=haproxy
-o postscreen_upstream_proxy_timeout=5s
smtpd pass - - n - - smtpd
Then, create a simple TCP VS on F5, listening on port 25/tcp and forwarding all your SMTP traffic to your back-end postfix server on port 10025/tcp.
With the above, you can either talk directly to your back-end server on port 25/tcp, or talk to F5 VS on port 25/tcp. In both cases, Postfix will see real client's IP.
---
I wish F5 had a native support for SMTP protocol the same way they have it for LDAP (see Client LDAP Profile), to allow STARTTLS Activation Mode. Plus a built in support for proxy protocol in all their profiles.