Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Çevrildiği diller: Castellano  Deutsch  English  Français  Italiano  Nederlands  Türkce  
[Yazarın Fotoğrafı]
Atif Ghaffar tarafından

Yazar hakkında:

İsviçre'de web sorumlusu ve unix yöneticisi olarak çalışıyorum . Tutkularım arasında Linux, unix, Perl, Apache ve GPL yazılımları var. Benim hakkımda daha çok bilgibu anasayfada

İçerik:

Apache ProxyPass Kullanarak Masquarading host'tun Arkasındaki Sunuculara Giriş

Çeviri : Zuhal Gül

[Resim]

Özet:

Ben, evde ip maskelemesini ve firewall'unu kullanarak Linux'le yüklenen küçük LAN(yerel network alanı) kullanıyorum. Network'ümdeki bütün makinelerin internet üzerindeki bütün bilgileri kabul etmesine rağmen,sadece bu makine internetten ip maskelemesini uygun görüyor. En son Apache makalemde, ip adreslerinin nasıl dönüştürüleceğini gösterdim.Bu makalemde firewall'deki veya güvenlik anlaşmalarındaki kuralları değiştirmeden internet üzerinde firewall'un arkasında web sunucusunun nasıl oluşturulacağını göstereceğim. Ayrıca, bu makalede bu hedefi başarabilmek için Apache's ProxyPass bildiriminin nasıl kullanılacağını göreceğiz. Bu makalenin hedef kitlesi Sistem Yöneticileri veya evde ,iş yerinde orta büyüklükte LAN için küçüğünü üreten kişilerdir.



 

İp maskelemesi ile ilgili problem

Benim LAN'ımda uzun bir süredir,router(maskeleme ve firewall'ü yapan makine) web sunucusu,mail sunucusu,ftp sunucusu,dns sunucusu olarak da görev alıyordu.
Bir gün,firewall'ün arkasındaki makineden web içeriğini sunma ihtiyacı duydum.
Ayrıca bazı dökümanları (video sunucusu,görüntü akışı(streaming images) sunucuları) network'un arkasındaki SGI IRIX kutusundan sunmak istedim. Bu makinenin internete tüm girişleri vardı,fakat internet kullanıcıları makineye bağlanamıyorlardı. IRIX makinesini network üzerine koymaya hiç niyetim yoktu ,ama insanların web sunucusuna bağlanabilmeleri için bu gerekiyordu.

Aynı probleme, işte benzer network ve Firewall'le karşı koyuyordum.
Her seferinde birileri internetten gösteri amaçlı uygun web sunucusu gelişmelerini istedi,firewall'deki kuralların değişmeye ihtiyacı vardı ve siz makineye network'ün güvenlik anlaşmasını ve dış ip adreslerini vermek zorundaydınız.

 

Apache'den kurtulmak için : ProxyPass

Birçok çözümü düşündükten sonra, Apache ve onun ProxyPass bildirimiyle bir tane denedim.
ProxyPass, Apache sunucunuzla modül olarak derlenmek ve yüklenmek için mod_proxy'ye ihtiyaç duyar.
Şimdi ProxyPass'in Apache manuellerinden alınmış ifadeleri

ProxyPass

Söz dizimi: ProxyPass <path> <url>
Ön görülen değer: Yok
Genel durum: config sunucusu, sanal host
Daha önemlisi: Uygulanamaz
Durum: Taban
Modül: mod_proxy
Uygunluğu: ProxyPass sadece Apache 1.1 ve sonrasında geçerlidir.

Bu bildirim uzak sunucuların yerel sunucunun alanına girmesine izin verir; yerel sunucu göreneksel anlamda proxy olarak görev almaz;fakat uzak sunucuların aynası gibi gözükür. <path> yerel asıl path'in ismi; url> uzak sunucular için bölümsel URL .

Farzedin ki yerel sunucunun adresi var http://wibble.org/; ve

   ProxyPass /mirror/foo/ http://foo.com/
yerel isteğe sebep olacak <http://wibble.org/mirror/foo/bar>için <http://foo.com/bar> de proxy isteğine dönüşüm.

 

Gerçek hayattan örnek

İç vidyo sunucusunu dış web sunucusuna dönüşrürme(mapping).
İç network: hometranet.home 192.168.1.0/255.255.255.0
( internet, intranet, extranet mevzularında ,ben ev network'ünde hometranet kullanıyorum.)
Dış network: developer.ch 193.192.254.50

Vidyo sunucuları (iç) cam.hometranet.home da çalışır
vidyo görüntülerinin url'den sunumuyla http://cam.hometranet.home:5555/cams/sony/stream
ve
hala burada http://cam.hometranet.home:5555/cams/sony/image kameradan görüntülenir
Burayı ziyaret ettiğim zaman
http://mozilla.developer.ch/stream urls'den bütün sonuçları görmek istedim
ve
http://mozilla.developer.ch/image
Bu, kolayca httpd.conf or srm.conf'a sıradakileri ekleyerek Apache'den ProxyPasskomutunu kulanarak yağılabilir.

ProxyPass /video http://cam.hometranet.home:5555/cams/sony/stream
ProxyPass /video http://cam.hometranet.home:5555/cams/sony/stream
Şimdi, web sunucusunu tekrar başlattıktan sonra (mod_proxy uygun olsaydı), http://mozilla.developer.ch/image ? web sunucusundan cevaplar.
Siteyi ziyaret eden kullanıcılar için onun şeffaflığı ve hemen hemen* güvenliksizliği, bu metodu kullanarak tatlıya bağlandı.
*hemen hemen 'i kulanmamın nedeni internette tam güvenlik diye birşey yoktur. :)

 

Sanal Sunuculara Dönüşüm

Proxypass asıl makineden farklı bir makineye dönüşüm için kullanılabilinir.
Örneğin:
docs.sun.developer.ch , solsparc.hometranet.home 'a dönşür

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>
Ana makinelere onların ip adreslerini kullanarak da gönderi yapabilirsin
<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>
 

İşlemlerin durdurulması

Ana web sunucunuz kullanıcılarınızın lehinde iç web sunucularına istek yapıyorsa,hiçbir esas makineye bağlanamazsın,onun yerine bütün istekleri kaynak makinede girmek zorundsın.
Yukarki olayda solsparc.hometranet.home 'a girmek yerine kayıtları esas makine olan sun.docs.developer.ch 'de girerim.
sun.docs.developer.ch 'de girmenin sonuçları(sahte sonuçlar)

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 -                                                            
solsparc.hometranet.home 'da girmenin sonuçları
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 2146        

Aynı başvurular ayrıca ip numaraları veya isimle belirtilen ACLs (access control list) için kullanılır.
Eğer bazı hosts/ip adreslerini bloke etmek veya belli ip adreslerinin özel alana girişini vermek istiyorsan ,bunu yerel sunucu yerine esas sunucuda yapmalısın.
Ayrıca Diroctory 'de belirlenen kullanıcıları kısıtlayamazsın.
Location , Files veya FilesMatch komutlarını kullanabilirsin.
Sıradaki örnek bunların bir kaçına değiniyor. Örnek:
<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>

 

Ek Kaynaklar

[Apache mod_proxy dökümanları]
http://www.apache.org/docs/mod/mod_proxy.html
[Apache tabanlı Virtual Host Desteği]
http://www.apache.org/docs/vhosts/name-based.html
[Apache Virtual Host dökümanları]
http://www.apache.org/docs/vhosts/index.html
 

Bu makale için görüşler:

Her makalenin kendi talkback sayfası vardır. Bu sayfada düşüncelerinizi sunabilir veya diğer okuyucuların görüşlerine bakabilirsiniz:
 talkback page 

Websayfaları LinuxFocus'un Editörleri tarafından sürdürülüyor
© Atif Ghaffar
LinuxFocus.org 2000

hataları veya Linuxfocus'a görüşlerinizi bildirmek için tıklayınız

2000-04-23, lfparser versiyon 1.5 'le oluşturulmuştur.