Page 1 of 1

squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 15:10
by inchez
Guten Tag,

ich benutze Squid als Reverse Proxy vor meinen Apache 2 Servern.

Nun wollte ich wissenw as ich in squid oder wahlweise pound in der config eintragen muss damit er die IP des Users mitliefert.

Wenn man nur eine IP hat mit denen meine Scirpts arbeiten können ist das sehr doof da einige Funktionen dann völlig durchdrehen.

Gruß

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 15:46
by daemotron
Was verstehst Du unter "mitliefern"? Soll die IP des originären Client als X-Forwareded-For im HTTP-Header erscheinen, oder geht es um den Host-Header - oder meinst Du noch etwas ganz anderes?

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 17:20
by inchez
Ich wieß nicht genau auf welche Art der Übertragung da zurückgegriffen wird, aber ich möchte das z.b. in den Apache2 Logs oder in den vBulletin logs etc. die tatsächliche IP ersichtlich ist und nicht die IP des Servers auf dem Squid läuft.

Auf der anderen Seite hätte ich gerne das die Clients möglichst wenig von Squid sehen, also das im Header zum Client hin nichts von Squid oder der eigl. Server IP sehen.

Gruß

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 17:41
by daemotron
IncheZ wrote:Ich wieß nicht genau auf welche Art der Übertragung da zurückgegriffen wird, aber ich möchte das z.b. in den Apache2 Logs oder in den vBulletin logs etc. die tatsächliche IP ersichtlich ist und nicht die IP des Servers auf dem Squid läuft.
Das erreichst Du, indem Du das Logging auf dem Applikations-Apachen anpasst (und nur so, dass es eben die Natur eines Proxy ist, anstelle des tatsächlichen Client die Anfrage an den Webserver zu stellen):

Code: Select all

LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
IncheZ wrote:Auf der anderen Seite hätte ich gerne das die Clients möglichst wenig von Squid sehen, also das im Header zum Client hin nichts von Squid oder der eigl. Server IP sehen.
Welche Spuren hinterlässt Squid denn, die Dich stören? Ich bin mit Squid nicht so furchtbar fit, aber die Manipulationsmöglichkeiten, die ein auf Apache basierender Reverse Proxy mit mod_proxy, mod_proxy_http und mod_headers bietet, sollte sich doch mit Squid auch umsetzen lassen.

Stichworte hierfür: Content Adaption, reply_header_access

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 17:50
by inchez
jfreund wrote:
IncheZ wrote:Ich wieß nicht genau auf welche Art der Übertragung da zurückgegriffen wird, aber ich möchte das z.b. in den Apache2 Logs oder in den vBulletin logs etc. die tatsächliche IP ersichtlich ist und nicht die IP des Servers auf dem Squid läuft.
Das erreichst Du, indem Du das Logging auf dem Applikations-Apachen anpasst (und nur so, dass es eben die Natur eines Proxy ist, anstelle des tatsächlichen Client die Anfrage an den Webserver zu stellen):

Code: Select all

LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
IncheZ wrote:Auf der anderen Seite hätte ich gerne das die Clients möglichst wenig von Squid sehen, also das im Header zum Client hin nichts von Squid oder der eigl. Server IP sehen.
Welche Spuren hinterlässt Squid denn, die Dich stören? Ich bin mit Squid nicht so furchtbar fit, aber die Manipulationsmöglichkeiten, die ein auf Apache basierender Reverse Proxy mit mod_proxy, mod_proxy_http und mod_headers bietet, sollte sich doch mit Squid auch umsetzen lassen.

Stichworte hierfür: Content Adaption, reply_header_access
Also muss ich diese ändertungen von LogFormat in der apache conf oder in der vonsquird vornehmen?

Und sehe Webapps wie vBulletin dann auch wieder die User IP. Denn ohne die UserIP hat man arge Probleme mit IP Bans, Spam Schutz etc.

Gruß

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 17:56
by Joe User
IncheZ wrote:Also muss ich diese ändertungen von LogFormat in der apache conf oder in der vonsquird vornehmen?
httpd.conf
IncheZ wrote:Und sehe Webapps wie vBulletin dann auch wieder die User IP. Denn ohne die UserIP hat man arge Probleme mit IP Bans, Spam Schutz etc.
Das muss die jeweilige Applikation selbst unterstützen und diese dann entsprechend konfiguriert werden.

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 18:07
by daemotron
IncheZ wrote:Und sehe Webapps wie vBulletin dann auch wieder die User IP. Denn ohne die UserIP hat man arge Probleme mit IP Bans, Spam Schutz etc.
Die IP können die Applikationen prinzipbedingt nicht sehen. Als Möglichkeit bleibt nur, entweder auf den Host-Header zurückzugreifen oder auf X-Forwarded-For. Die meisten Webapplikationen können letzteres nicht, wohl aber ersteres. Damit der Host-Header auf dem Proxy so gesetzt wird, dass er dem anfragenden Client entspricht, braucht's aber ein bisschen Konfiguration auf dem Proxy. Wie das Squid-Pendant zu ProxyPreserveHost (Apache) aussieht, darfst Du Dir gerne selber aus der Doku fischen.

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 18:45
by inchez
Okay, Vielen Dank an euch.

Könnt ihr mir zu guter letzt vielleicht noch sagen ob ich was konkret an vBulletin umstellen muss damit es mit Host Header klarkommt.

Gruß

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 19:12
by daemotron
Durchsuche den Quellcode noch $_SERVER['REMOTE_ADDR'] und $_SERVER['REMOTE_HOST'] - an den Stellen müsste auf $_SERVER['HTTP_HOST'] bzw. dessen Reverse DNS-Auflösung zurückgegriffen werden. Wenn Du auf die IP aus X-Forwarded-For zurückgreifen willst, bleibt nur apache_request_headers() (funktioniert nur mit mod_php, nicht mit (Fast)CGI!)

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 19:34
by inchez
So, also ich habe auf dem Server auf dem vBulletin läuft die änderung in der apache2.conf gemacht und habe mir jetzt mal die loggs angeschaut.

Ich hab immernoch nur die IP vom Squid System drinne...

Es läuft fcgi.

Kann mir jemand sagen woran es vielleicht liegen könnte.

Bzw empfehlt ihr mir eher apache als Reverse Proxy bzw ist mein Vorhaben damit einfacher zu vollziehen?

Ich hatte vorher eigl. sehr zu meiner zufriedenheit pound laufen, allerdings habe ich dort überhaupt keine Option gefunden um die IPs der User bis zum vB zu kriegen, pound lief meines erachtens aber wesendlich stabiler als squid.

Gruß

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 20:06
by daemotron
Bitte Log-relevante Teile der httpd.conf (und ggf. der vhost-Konfiguration) posten.

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 20:19
by daemotron
Transparent macht bei Reverse Proxies keinen Sinn - der Client hält ja aufgrund der DNS-Einträge den Proxy für den tatsächlichen Ziel-Host.

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 20:47
by inchez
Also der Server läuft mit ISPCP.

Dementsprechend poste ich euch mal die ispcp.conf aus /etc/apache2/sites-enabled

Code: Select all

# httpd Data BEGIN.

#
# wget-hack prevention
#

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} ^LWP::Simple
    RewriteRule ^/.* http://%{REMOTE_ADDR}/ [L,E=nolog:1]
</IfModule>

#
# Log processing.
#
LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%B" traff
LogFormat "%v %b %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" ispcplog

CustomLog "| /var/www/ispcp/engine/ispcp-apache-logger" ispcplog
ErrorLog "| /var/www/ispcp/engine/ispcp-apache-logger -e"

#
# mod_cband configuration
#

<IfModule mod_cband.c>
    CBandScoreFlushPeriod 10
    CBandRandomPulse On
</IfModule>

#
# let the customer decide what charset he likes to use
#

AddDefaultCharset Off

#
# Header End
#


Code: Select all

# httpd [board.xxx.de] sub entry BEGIN.
<VirtualHost 212.123.123.123:80>

    #
    #User vu2002
    #Group vu2002
    #

    <IfModule suexec_module>
           SuexecUserGroup vu2002 vu2002
    </IfModule>

    ServerAdmin     webmaster@xxx.de
    DocumentRoot    /var/www/virtual/xxx.de/board/htdocs

    ServerName      board.xxx.de
    ServerAlias     www.boardxxx.de board.xxx.de *board.xxx.de

    Alias /errors /var/www/virtual/xxx.de/errors/

    ErrorDocument 401 /errors/401.html
    ErrorDocument 403 /errors/403.html
    ErrorDocument 404 /errors/404.html
    ErrorDocument 500 /errors/500.html
    ErrorDocument 503 /errors/503.html

    <IfModule mod_cband.c>
        CBandUser xxx.de
    </IfModule>

    # httpd sub entry cgi support BEGIN.
    ScriptAlias /cgi-bin/ /var/www/virtual/xxx.de/board/cgi-bin/
    <Directory /var/www/virtual/xxx.de/board/cgi-bin>
        AllowOverride AuthConfig
        #Options ExecCGI
        Order allow,deny
        Allow from all
    </Directory>
    # httpd sub entry cgi support END.

    <Directory /var/www/virtual/xxx.de/board/htdocs>
        # httpd sub entry PHP support BEGIN.
        # httpd sub entry PHP support END.
        Options -Indexes Includes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    # httpd sub entry PHP2 support BEGIN.
    <IfModule mod_php5.c>
        php_admin_value open_basedir "/var/www/virtual/xxx.de/:/var/www/virtual/xxx.de/phptmp/:/usr/share/php/"
        php_admin_value upload_tmp_dir "/var/www/virtual/xxx.de/phptmp/"
        php_admin_value session.save_path "/var/www/virtual/xxx.de/phptmp/"
        php_admin_value sendmail_path '/usr/sbin/sendmail -f vu2002 -t -i'
    </IfModule>
    <IfModule mod_fastcgi.c>
        ScriptAlias /php5/ /var/www/fcgi/xxx.de/
        <Directory "/var/www/fcgi/xxx.de">
            AllowOverride None
            Options +ExecCGI -MultiViews -Indexes
            Order allow,deny
            Allow from all
        </Directory>
    </IfModule>
    <IfModule mod_fcgid.c>
        <Directory /var/www/virtual/xxx.de/board/htdocs>
            FCGIWrapper /var/www/fcgi/xxx.de/php5-fcgi-starter .php
            Options +ExecCGI
        </Directory>
        <Directory "/var/www/fcgi/xxx.de">
            AllowOverride None
            Options +ExecCGI MultiViews -Indexes
            Order allow,deny
            Allow from all
        </Directory>
    </IfModule>
    # httpd sub entry PHP2 support END.

    Include /etc/apache2/ispcp/board.xxx.de.conf

</VirtualHost>
# httpd [board.xxx.de] sub entry END.


Oben habt ihr die log Settings, das andere vom entsprechenden vhost.

Gruß

P.S: Wie gesagt, kennt jemand eine Alternative, oder gibt es im zweifelsfall sogar eine Möglichkeit pound so zu konfigurieren.

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-24 22:59
by daemotron
OK, das erklärt dein Logging-"Problem": Du hast zwar für das combined-Format definiert, dass X-Forwarded-For verwendet werden soll, verwendst aber das ispcplog-Format:

Code: Select all

CustomLog "| /var/www/ispcp/engine/ispcp-apache-logger" ispcplog
Also musst Du eben das ispcplog-Format anpassen:

Code: Select all

LogFormat "%v %b %{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" ispcplog
Wenn ich keine Tomaten auf den Augen habe (nicht auszuschließen um diese Uhrzeit :wink: ), dann ist für den VHost kein individuelles Logging konfiguriert. Dazu könntest Du noch sowas in den virtuellen Host einbauen:

Code: Select all

ErrorLog /var/www/virtual/xxx.de/log/error.log
CustomLog /var/www/virtual/xxx.de/log/access.log combined
Das combined-Format hast Du ja bereits an zentraler Stelle umdefiniert...

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-25 00:25
by inchez
Okay, vielen Dank, das hat schonmal das Problem gelößt.

Jetzt die andere Frage, wie oft und in welchen Datein taucht $_SERVER['HTTP_HOST'] auf.

Bzw gäbe es nicht noch eine simplere Lösung um das ganze auf vB oder sogar auf allen Script lauffähig zu machen.

Gruß

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-25 00:47
by Joe User
IncheZ wrote:Bzw gäbe es nicht noch eine simplere Lösung um das ganze auf vB oder sogar auf allen Script lauffähig zu machen.
Nein.

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-25 00:56
by inchez
Okay, Schade, naja, dann muss ich wohl in dne sauren Apfel beißen.

Kann mir jemand sagen in welchen Datein von vBulletin sich diese Anweisungen befinden.

Danke.

Gruß

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-25 20:45
by rudelgurke
Zu vBulletin - dazu muss eine PHP Datei modifiziert werden - class_core.php

Dort in der Funktion fetch_ip - am Ende sollte dass so aussehen:

Code: Select all

function fetch_ip() {
 return $_SERVER ['HTTP_X_FORWARDED_FOR'];
}
Selbiges gilt für andere PHP Scripte, normalerweise wird irgendwo ein HOST / REMOTE_ADDR oder ähnliches ausgelesen und verarbeitet, da die FORWARD Variable auslesen lassen.

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-26 13:36
by dotme
Um die IP-Adresse eines Clients, der über einen Proxy reinkommt, sichtbar zu machen gibt es diverse Apache-Module:
- mod_rpaf
- mod_extract_forwarded
- mod_remoteip
(Gerade erst im Trunk => http://www.mail-archive.com/dev@httpd.a ... 43561.html)

Mit mod_rpaf habe ich (gute) Erfahrungen gemacht.

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Posted: 2009-04-26 14:31
by inchez
Danke für eure überaus ausführliche Hilfe.

Ich habe es jetzt soweit perfekt hinbekommen.

Ich freue mich das es doch so hilfsbereite Menschen gibt :)

Gruß

Edit:

Sind die mod die du beschrieben hats nur für die apache log oder beziehen sie sich auf alle Scripte etc die dort laufen.