Dazu kannst du TProxy verwenden. In deinem HAProxy Backend nutzt du usesrc und clientip.
frontend smtp_in
bind 0.0.0.0:25 transparent
mode tcp
default_backend postfix_backend
backend postfix_backend
mode tcp
server mail1 127.0.0.1:25 usesrc clientip
- transparent erlaubt das spoofen der IP
- usesrc clientip sorgt dafür das die Client IP verwendet wird
Dann legst du folgende IPTables Regeln an.
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp --dport 25 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 25
Ausserdem musst du Policy Routing aktivieren.
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
Zum Schluss musst du noch net.ipv4.ip_nonlocal_bind=1 in /etc/sysctl.conf setzen und aktivieren.
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind