lima-city: Webhosting, Domains und Cloud
2 Pluspunkte 0 Minuspunkte
Ich habe einen Postfix Ubuntu Server hinter einem HAProxy. Ich möchte, dass die ursprüngliche Client IP im Backend ankommt, nicht nur die vom Proxy. Wie mache ich das am besten?
von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

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 
von (15 Punkte)  
0 Pluspunkte 0 Minuspunkte

Am einfachsten ist es das proxy-protocol zu aktivieren. Am Postfix musst du dazu in deiner main.cf folgendes eintragen damit postscreen die Originale Client IP aus dem Header extrahieren kann.

smtpd_upstream_proxy_protocol = haproxy
smtpd_upstream_proxy_timeout = 5s
postscreen_upstream_proxy_protocol = haproxy
postscreen_upstream_proxy_timeout = 5s

Und in deiner master.cf dem smtpd Socket die nötigen Parameter mitgeben.

smtp      inet  n       -       y       -       -       smtpd
  -o smtpd_upstream_proxy_protocol=haproxy

und einen lokalen Socket auf Port 2525 für das Proxy-Protocol anlegen.

127.0.0.1:2525 inet n  -  n  -  -  smtpd
  -o smtpd_upstream_proxy_protocol=
von (744 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.4k Fragen

2.9k Antworten

278 Kommentare

13 Nutzer