squid Reverse Proxy: Ip der Nutzer anzeigen

Serverdienste ohne eigene Kategorie
inchez
Posts: 65
Joined: 2007-10-01 20:17

squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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ß

User avatar
daemotron
Administrator
Administrator
Posts: 2636
Joined: 2004-01-21 17:44

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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?
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

inchez
Posts: 65
Joined: 2007-10-01 20:17

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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ß

User avatar
daemotron
Administrator
Administrator
Posts: 2636
Joined: 2004-01-21 17:44

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

inchez
Posts: 65
Joined: 2007-10-01 20:17

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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ß

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
daemotron
Administrator
Administrator
Posts: 2636
Joined: 2004-01-21 17:44

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

inchez
Posts: 65
Joined: 2007-10-01 20:17

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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ß

User avatar
daemotron
Administrator
Administrator
Posts: 2636
Joined: 2004-01-21 17:44

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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!)
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

inchez
Posts: 65
Joined: 2007-10-01 20:17

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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ß

User avatar
daemotron
Administrator
Administrator
Posts: 2636
Joined: 2004-01-21 17:44

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post by daemotron »

Bitte Log-relevante Teile der httpd.conf (und ggf. der vhost-Konfiguration) posten.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

User avatar
daemotron
Administrator
Administrator
Posts: 2636
Joined: 2004-01-21 17:44

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

inchez
Posts: 65
Joined: 2007-10-01 20:17

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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.

User avatar
daemotron
Administrator
Administrator
Posts: 2636
Joined: 2004-01-21 17:44

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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...
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

inchez
Posts: 65
Joined: 2007-10-01 20:17

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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ß

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

inchez
Posts: 65
Joined: 2007-10-01 20:17

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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ß

User avatar
rudelgurke
Posts: 405
Joined: 2008-03-12 05:36

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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.

dotme
Posts: 150
Joined: 2004-12-15 16:48

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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.

inchez
Posts: 65
Joined: 2007-10-01 20:17

Re: squid Reverse Proxy: Ip der Nutzer anzeigen

Post 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.