original in en Atif Ghaffar
en to nl Tom Uijldert
Op het werk had ik een probleem wat er op leek met een gelijkend netwerk en een firewall.
Iedere keer als iemand toegang wilde hebben tot een ontwikkel-webserver vanuit het Internet
voor demonstratiedoeleinden, moesten de regels op de firewall worden gewijzigd en de
betreffende machine worden uitgerust met een bestaand extern IP-adres, waarmee dus de
beveiliging werd omzeild.
ProxyPass
Syntax: ProxyPass <path> <url>
Default: None
Context: server config, virtual host
Override: Not applicable
Status: Base
Module: mod_proxy
Compatibility: ProxyPass is only available in Apache 1.1 and later.
Dit commando beeldt adressen van externe servers af op de lokale adresruimte; de lokale server treedt niet op als gevolmachtigde (proxy) in de gebruikelijke zin maar lijkt op een afspiegeling van de externe server. <path> is de naam van het lokale, virtuele, pad; <url> is een stuk URL voor de externe server.
Laten we even aannemen dat de lokale server het adres http://wibble.org/ heeft; dan zal
ProxyPass /mirror/foo/ http://foo.com/een lokale referentie naar <http://wibble.org/mirror/foo/bar> intern omzetten in een proxy referentie naar <http://foo.com/bar>.
De (interne) video server zit op machine cam.hometranet.home te bereiken
voor videobeelden via http://cam.hometranet.home:5555/cams/sony/stream en
stilstaande beelden via http://cam.hometranet.home:5555/cams/sony/image.
Deze beelden wilde ik extern kunnen bekijken via de URL's
http://mozilla.developer.ch/stream en
http://mozilla.developer.ch/image.
Dit is eenvoudig te doen met het gebruik van het ProxyPass commando van Apache
door de volgende regels toe te voegen aan het bestand httpd.conf of
sm.conf
ProxyPass /video http://cam.hometranet.home:5555/cams/sony/stream
ProxyPass /video http://cam.hometranet.home:5555/cams/sony/stream
Wanneer nu de webserver wordt herstart (als mod_proxy is geladen), zal
http://mozilla.developer.ch/image een reactie opleveren van de cam webserver.
De bezoekende gebruiker ziet het verschil niet en er is bijna* geen verzwakte beveiliging
met deze methode.
* Ik gebruik hier met opzet het woord bijna omdat er niet zoiets is als volledige
beveiliging op het Internet :)
NameVirtualHost 193.192.254.50
<VirtualHost 193.192.254.50>
ServerName sun.docs.developer.ch
ProxyPass / http://solsparc.hometranet.home/
TransferLog /net/www/logs/sun.docs.access
ErrorLog /net/www/logs/sun.docs.errror
</VirtualServer>
je kan ook verkeer doorsturen naar machines via hun IP-adres
<VirtualHost 193.192.254.50>
ServerName sun.docs.developer.ch
ProxyPass / http://192.168.1.7/
TransferLog /net/www/logs/sun.docs.access
ErrorLog /net/www/logs/sun.docs.errror
</VirtualServer>
197.0.22.3 - - [05/Nov/1999:22:09:04 +0100] "GET /index.html HTTP/1.0" 304 - 187.0.45.67 - - [05/Nov/1999:22:09:04 +0100] "GET /navi.html HTTP/1.0" 304 - 177.0.5.45 - - [05/Nov/1999:22:09:04 +0100] "GET /entrees.html HTTP/1.0" 304 - 227.0.9.67 - - [05/Nov/1999:22:09:15 +0100] "GET /complets.html HTTP/1.0" 304 - 137.0.7.23 - - [05/Nov/1999:22:09:19 +0100] "GET /menu_poisson.html HTTP/1.0" 200 841 193.192.245.73 - - [05/Nov/1999:22:09:25 +0100] "GET /volailles.html HTTP/1.0" 304 - 192.167.0.1 - - [05/Nov/1999:22:09:44 +0100] "GET /agneau.html HTTP/1.0" 304 -Logging uitvoer op solsparc.hometranet.home
192.168.1.1 - - [05/Nov/1999:22:09:04 +0100] "GET /index.html HTTP/1.0" 304 - 192.168.1.1 - - [05/Nov/1999:22:09:04 +0100] "GET /navi.html HTTP/1.0" 304 - 192.168.1.1 - - [05/Nov/1999:22:09:04 +0100] "GET /entrees.html HTTP/1.0" 304 - 192.168.1.1 - - [05/Nov/1999:22:09:15 +0100] "GET /complets.html HTTP/1.0" 304 - 192.168.1.1 - - [05/Nov/1999:22:09:19 +0100] "GET /menu_poisson.html HTTP/1.0" 200 841 192.168.1.1 - - [05/Nov/1999:22:09:25 +0100] "GET /volailles.html HTTP/1.0" 304 - 192.168.1.1 - - [05/Nov/1999:22:09:44 +0100] "GET /agneau.html HTTP/1.0" 304 - 192.168.1.1 - - [05/Nov/1999:22:09:56 +0100] "GET /desserts_ind.html HTTP/1.0" 304 - 192.168.1.1 - - [05/Nov/1999:22:10:00 +0100] "GET /cocktails.html HTTP/1.0" 304 - 192.168.1.1 - - [05/Nov/1999:22:10:10 +0100] "GET /cgi-bin/commande.cgi HTTP/1.0" 200 2146Hetzelfde geldt voor ACL's (Access Control Lists) die gebaseerd zijn op namen of IP-adressen.
<VirtualHost 193.192.254.50>
ServerName sun.docs.developer.ch
#this rule only allows users from good.host.com domain
<Location /private>
order deny,allow
deny from all
allow from good.host.com
</Location>
#This rule deny's the uncool Microsoft's monopoly helper browser.
BrowserMatch MSIE uncool_browser
<Location /coolpages>
order allow,deny
allow from all
deny from env=uncool_browser
</Location>
#This rule only allows users that are in your passwd.httpd file
<Location /coolpages>
AuthName "only for registered users"
AuthType Basic
AuthUserFile "/etc/httpd/passwd.httpd"
<Limit GET>
require valid-user
</Limit>
</Location>
ProxyPass / http://192.168.1.7/
TransferLog /net/www/logs/sun.docs.access
ErrorLog /net/www/logs/sun.docs.errror
</VirtualServer>