{ Megoldva ] proftpd mod_sftp haproxy mögött

Fórumok

Haproxy-n keresztül szeretném elérhetővé tenni a proftpd sftp/scp szolgáltatásait úgy, hogy a kliens IP címe kerüljön a proftpd logjába.

Ehhez a proftpd szerverben engedélyeztem a mod_sftp és mod_proxy_protocol modulokat, ügyelve rá, hogy ez utolsó legyen az utolsó sor a modules.conf fájlban.

Azonban az sftp kapcsolat nem áll fel. A proftpd logjában a 

Bad protocol version 'PROXY TCP4 10.0.3.1 10.0.3.88 48062 22' from 10.0.3.88

vagy a 

Bad protocol version '' from 10.0.3.88

hibaüzenet jelenik meg, attól függően, hogy a haproxy konfigurációjában send-proxy vagy send-proxy-v2 van. Olyan, mintha a PROXY protokoll első sorát a mod_proxy_protocol nem nyelné le.

Ha a haproxy-ban nem adom meg, hogy send-proxy*, akkor rendben megy az sftp kapcsolat, csak a proxy szerver IP címe kerül a logba. Az ftp kapcsolatnál rendben működik a mod_proxy_protocol, ott a kliens ip címe kerül a logba.

Bárki csinált már ilyet, vagy van ötlete, mit ronthatok el? Bárhogy is nézem, ennek működnie kellene, és mégsem. :(

Megoldás:

Ha az sftp modul VirtualHost-ban van, akkor a proxy_protocol konfigurációjának is benne kell lennie ugyanabban a VirtualHost-ban.

Hozzászólások

Hogy néz ki a proftpd configod? Az expect-proxy-protocol class-ban fel van sorolva a haproxy IP-je (ha jól látom 10.0.3.88)?

A conf.d/proxy_protocol.conf fájl tartalma:

<IfModule mod_proxy_protocol.c>
    ProxyProtocolEngine on
    ProxyProtocolTimeout 3sec
    # ProxyProtocolVersion haproxyV2

    # Necessary to allow data transfers
    AllowForeignAddress on
</IfModule>


Nincs benne expect-proxy-protocol class egyáltalán. Nem is tudtam, hogy kellene, mivel rendes ftp-vel így is működött. Ezt a konfigurációt a github mod_proxy_protocol.html fájljából vettem, mint példakonfigurációt. Megpróbáltam kibővíteni a konfigurációt

<IfModule mod_proxy_protocol.c>
    ProxyProtocolEngine on
    ProxyProtocolTimeout 3sec
    # ProxyProtocolVersion haproxyV2

    # Necessary to allow data transfers
    AllowForeignAddress on

    <Class expect-proxy-protocol>
       From 10.0.3.88
    </Class>

</IfModule>

de ugyanaz a helyzet továbbra is.

Ha kiadom a proftpd -vv parancsot, akkor az első felsorolt modul a mod_proxy_protocol/0.4.

Nem is kötelező a Class, ezt jellemzően arra lehet használni, hogy adott helyről proxy header nélkül, máshonnan pedig azzal is menjen a feldolgozás, azt hittem, nálad is ez a helyzet. Itt a fenti configodban a class csak definiálva van, de használva sehol, azaz ez a config egyenértékű a korábbival. A fenti hibaüzenet alapján ő már az SSH protocol versiont várná, azaz a ProxyProtocolEngine valamiért mégsem triggerelődik. A module betöltési sorrend rendben van? A doksiban ez áll:

In order for mod_proxy_protocol to work its magic, it must the first module in line to handle the bytes coming in from the client. If some other module (such as mod_sftp or mod_tls) tries to handle the incoming bytes first, Bad Things will happen, since those modules will expect different protocols than the PROXY protocol.

Idézet a készítő leírásából ( https://github.com/Castaglia/proftpd-mod_proxy_protocol/blob/master/mod… )

By using shared modules, you can enforce the proper ordering using the LoadModule directive, like so:

  <IfModule mod_dso.c>
    ...
    LoadModule mod_ifsession.c
    LoadModule mod_proxy_protocol.c
  </IfModule>

The last module loaded will be the first module called.

Egyébként próbáltam előre is tenni, de ugyanez az eredmény.

Jogos. Itt nem látszik, de az sftp-t kezelő mod_sftp modul is LoadModule-lal van betöltve vagy az statikus? Valamilyen debug level emeléssel a logból ki kellene derülnie, hogy egyáltalán a mod_proxy_protocol szóhoz jut-e és ha nem, akkor miért nem.

Közben látom az update-edet a nyitóhoz. Ezek szerint akkor mégiscsak a mod_sftp volt az utoljára betöltött, azaz hívási sorrendben első modul és az okozta a gondot.