x-forwarded-for é um campo de cabeçalho HTTP, portanto, não tem nada a ver com a camada de transporte (TCP). Normalmente, os proxies da web inserem os dados de x-forwarded-for.
Se você quer ter o IP de origem ao balancear na camada de transporte, então você precisa compilar o haproxy com o suporte TPROXY. Vejo: link
Mas note que o kernel Linux atual tem suporte TPROXY por padrão (Fiz desde 2.6.28), então você pode pular a etapa do kernel descrita no post acima se seu versão do kernel > 2.6.28.