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.
- 182 megtekintés
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 hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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 asmod_sftp
ormod_tls
) tries to handle the incoming bytes first, Bad Things will happen, since those modules will expect different protocols than thePROXY
protocol.
- A hozzászóláshoz be kell jelentkezni
A sorrend is rendben. Az utolsó sorban töltöm be a modules.conf fájlban, és a proftpd -vv kimeneténben a mod_proxy_protocol az első modul, ami megjelenik. Ennél jobban nem tudom ellenőrizi a sorrendet, bár először én is a sorrendre tippeltem volna.
- A hozzászóláshoz be kell jelentkezni
Az én értelmezésem szerint a modules.conf-ban elöl kellene legyen, egy próbát megér.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni