31-01-2008, 10:04 PM
در این مقاله می خواهیم یک پروکسی سرور توسط آپاچی وب سرور پیکربندی و راه اندازی کنیم. شاید تا به حال نمی دانستید می شود به کمک آپاچی یک پروکسی سرور راه انداخت . ( البته نه به قدرت ( squid
پروکسی سرور به شما این قابلیت را می دهد که فقط توسط یک آدرس شبکه به اینترنت دسترسی و بتوانید کنترل لازم را روی تبادلات بین اینترنت و شبکه محلی خود داشته باشید .
مزایای استفاده از یک پروکسی سرور
- بالا بردن performance : به خاطر کش (cache) کردن اطلاعات
- افزایش امنیت
- کاهش پهنای باند مورد استفاده : به خاطر کش کردن اطلاعات نیاز به برقرار کردن ارتباط مجدد با یک سایت و گرفتن محتویات آن کم می شود
- و ...
انواع پیکربندی پروکسی سرور
یک پروکسی سرور می تواند به 2 صورت عمل می کند :
A Forwarding Proxy Server -
A Reverse Proxy Server -
Forwarding Proxy Server
همان طور که از اسمش پیداست ، شما میتوانید به کمک این روش درخواست های یک client را از یک شبکه ی داخلی (Internal Network) به یک وب سرور در اینترنت forward کنید . این روش شاید رایج ترین نوع پیکربندی یک پروکسی سرور باشد .
شکل زیر چگونه کار کردن یک Forwarding Proxy Server را نشان می دهد :
از سمت راست به چپ در شکل داریم :
- یکBrowser Internal Client که قسمتی از شبکه ی داخلی ما است یک درخواست ( HTTP Request ) می فرستد .
- این درخواست به پروکسی سرور فرستاده می شود .
- پروکسی سرور درخواست را دریافت می کند و IP و ... را چک می کند .
- پروکسی سرور به درخواست پاسخ می دهد .
مهمترین هدف از Forwarding Proxy Server عمل کش کردن است . برای اولین بار که پروکسی سرور یک سند ( Document ) را دریافت کند ، آن را نگهداری می کند تا expire شود در این مدت هر درخواستی برای دریافت این فایل بدون فرستادن درخواست به اینترنت پاسخ داده می شود . به فایل های کش شده در پروکسی سرور shared cache می گویند و قابل دسترس تمام client ها در شبکه ی محلی می باشد.
Reverse Proxy Server
برخلاف Forwarding Proxy Server ، Reverse Proxy Server در خارج از شبکه ی داخلی ما قرار می گیرد . هدف اصلی در این مدل فیلتر کردن درخواست های مختلف به وب سروری است که در شبکه ی داخلی ما قرار دارد .
شکل زیر چگونه کار کردن یک Reverse Proxy Server را نشان میدهد :
از سمت راست به چپ در شکل داریم :
- یک Remote Client Browser یک در خواست (HTTP Request ) می فرستد .
- درخواست توسط پروکسی سرور دریافت میشود و forward می شود به router تنظیم شده در فایروال .
- Router درخواست را به وب سرور می فرستد. ( Internal Web Server )
هدف اصلی استفاده از Reverse Proxy Server بالاتر امنیت شبکه ی محلی است و هدف دوم کش کردن فایلها و سندها است .
تنظیم آپاچی وب سرور به عنوان یک پروکسی سرور
برای تنظیم آپاچی وب سرور به عنوان یک پروکسی سرور از دایرکتیو های (Directive ) گوناگونی استفاده می شود که در اینجا به تعداده کمی از آنها اشاره می کنیم . تمام این دایرکتیو ها از ماژولی به نام mod_proxy استفاده می کنند
قبل از تنظیم آپاچی به عنوان پروکسی سرور باید مطمئن شوید که این ماژول نصب شده است . اگر شما آپاچی را از سورس کامپایل کرده باشید و option زیر را در زمان اجرای اسکریپت configure به کار برده باشید به طور پیش فرض این ماژول نصب می شود
–enable-shared=max
بعد از اینکه مطمئن شدید که این ماژول نصب شده است شما می توانید این ماژول را با نام libproxy.so در فایل پیکربندی آپاچی که httpd.conf است پیدا کنید . در این فایل باید دو خط زیر وجود داشته باشد
در مثال زیر قسمتی از فایل پیکربندی آپاچی (httpd.conf ) که مربوط به تنظیمات پروکسی سرور است آمده است البته این ساده ترین نوع تنظیم است .
- <IfModule> : این دایرکتیو چک می کند که آیا ماژولی لود شده است یا خیر . در انتهای کار باید از </IfModule> استفاده کرد . در اینجا ما از این دایرکتیو برای اینکه چک کنیم آیا ماژول mod_proxy.c لود شده است یا خیر استفاده می کنیم ، اگر ماژول مورد نظر لود شده باشد تمام تنظیماتی که بین <IfModule> و </IfModule> است اعمال می شود در غیر این صورت نادیده گرفته می شوند .
- ProxyRequests : این دایرکتیو میتواند on یا Off باشد . اگر می خواهید آپاچی وب سرور شما به عنوان یک پروکسی سرور عمل کند باید این دایرکتیو on باشد .
- CacheEnable : برای کش کردن URL استفاده می شود و شکل کلی آن به شکل زیر است :
CacheEnable cache-type url-string
Cache-type میتواند مقادیر fd , disk , mem را داشته باشد بدین معنا که برای کش کردن URL ها از storage manager حافظه ، هارد دیسک و یا file descriptor استفاده شود .
به عنوان مثال داریم :
- CacheRoot : از این دایرکتیو برای تعیین محلی که فایل های کش شده در آن باید قرار گیرند استفاده می شود .
- NoCache : لیستی از دامنه ها ، IP ها و سایت هایی که سند ها و فایل های آن نباید کش شوند را دارد .
- ProxyBlock : برای اینکه نگذاریم client ها به بعضی از سایت ها در پروکسی سرور دسترسی داشته باشند استفاده می شود .
- <Proxy> : شما با دایرکتیو ProxyBlock نمی توانید دسترسی Client ها را به پروکسی سرور کنترل کنید ( مثلا اینکه پروکسی سرور به یک client خاص سرویس ندهد ) فقط میتوانید بگویید چه سایت هایی قابل دسترس نباشند . زمانی که در یک Client Browser پورت و IP پروکسی سرور تنظیم شده باشد url های فرستاده شده توسط این Client Browser به شکل proxy:// است نه http:// . به همین دلیل شما می توانید به کمک این دایرکتیو کنترل لازم را روی Client ها و url های دریافت شده داشته باشید . مثلا در مثال زیر به تمام در خواست ها به جز درخواست هایی که از آدرس 192.168.0.3 آمده باشد پاسخ داده می شود بدین ترتیب Client که آدرس آن 192.168.0.3 باشد نمی تواند عملا از پروکسی سرور استفاده کند . توجه دارید که در آخر باید از دایرکتیو </Proxy> استفاده کنید .
تنظیمات فایل پیکربندی شبیه مثال بالا است ولی 2 مرحله دارد که باید حتما انجام شوند
الف ) فعال کردن ProxyRequests
برای فعال کردن این دایرکتیو باید مقدار آن را برابر on قرار داد .
شما می توانید تمام تنظیمات مربوط به پروکسی سرور را در داخل یک Virtual Host قرار دهید مانند مثال زیر :
ب) ساختن Mirror
یکی از ویژگی های آپاچی که به عنوان پروکسی استفاده می شود قابلیت آن در map کردن منابع یک remote site در local URL است .
To map = to replicate a Web or FTP site
بعد از map کردن remote site آپاچی می تواند سندها و فایل ها را به صورت محلی Locally در اختیار در خواست شوندگان قرار دهد .
برای استفاده از این ویژگی ما از دایرکتید ProxyPass استفاده می کنیم مانند مثال زیر :
ProxyPass /document http://www.linuxdocs.org
در مثال بالا /document جایی است که قرار است سند ها و فایل های map شده در آن قرار گیرند و http://www.linuxdocs.org همان remote site ما است .
استفاده از این دایرکتیو باعث کاهش Download ها و پهنای باند مورد استفاده می شود .
پیکربندی آپاچی به عنوانReverse Proxy
برای این کار ابتدا باید تمام کارهایی که در Forward Proxy انجام دادیم را انجام می دهیم با این تفاوت که اگر از Virtual Host استفاده می کنید پورت آن را باید 80 بگذارید چون کاربرها خارج از شبکه ی محلی ما هستند و بطور پیش فرض به پورت 80 وصل می شوند .
زمانی که از Reverse Proxy استفاده می کنیم و یک remote client یک در خواست می فرستد ، این در خواست redirect می شود به Internal Web Server ما . برای اینکه همچین چیزی اتفاق بیفتد redirect request فرستاده می شود به client browser . در این request یک header به نام Location وجود دارد که شامل hostname وب سرور محلی ما است که قرار است پردازش ها در آن انجام شود . برای اینکه ما بتوانیم hostname در Location را با hostname سروری که به عنوان Reverse Proxy انتخاب شده جایگزین کنیم باید از دایرکتیو ProxyReverse استفاده کنیم . فرم کلی این دایرکتیو شبیه ProxyPass است با این تفاوت که کاربرد آن کاملا فرق می کند .
تنظیم client ها برای استفاده از پروکسی سرور
ما برای مثال از Internet Explorer استفاده می کنیم ولی تنظیمات مورد نیاز برای تمام مرورگرها شبیه هم است .
برای اینکه Internet Explorer بتواند از پروکسی سرور استفاده کند به ترتیب کار های زیر را انجام می دهیم :
- باز کردن Internet Explorer
- انتخاب منوی Tools و سپس انتخاب Internet Options برای باز شدن dialog مربوط به Internet Options مانند شکل زیر :
- انتخاب کردن connection tab مانند شکل زیر :
- بر روی کلید LAN Settings کلیک کنید تا Dialog مربوط به تنظیمات LAN باز شود
- در قسمت Proxy Server باید Use a proxy server را انتخاب کنید
- در فیلد Address ، آدرس یا IP پروکسی سرور خود را بگذارید مثلا 187.17.68.181
- در فیلد Port ، پورتی را وارد کنید که پروکسی سرور روی آن تنظیم شده است مثلا 8080 مانند شکل زیر :
تهیه و تنظیم: نوید یعقوبی سرای
ویرایش: بهروز عبادی
منبع : foss.ir
پروکسی سرور به شما این قابلیت را می دهد که فقط توسط یک آدرس شبکه به اینترنت دسترسی و بتوانید کنترل لازم را روی تبادلات بین اینترنت و شبکه محلی خود داشته باشید .
مزایای استفاده از یک پروکسی سرور
- بالا بردن performance : به خاطر کش (cache) کردن اطلاعات
- افزایش امنیت
- کاهش پهنای باند مورد استفاده : به خاطر کش کردن اطلاعات نیاز به برقرار کردن ارتباط مجدد با یک سایت و گرفتن محتویات آن کم می شود
- و ...
انواع پیکربندی پروکسی سرور
یک پروکسی سرور می تواند به 2 صورت عمل می کند :
A Forwarding Proxy Server -
A Reverse Proxy Server -
Forwarding Proxy Server
همان طور که از اسمش پیداست ، شما میتوانید به کمک این روش درخواست های یک client را از یک شبکه ی داخلی (Internal Network) به یک وب سرور در اینترنت forward کنید . این روش شاید رایج ترین نوع پیکربندی یک پروکسی سرور باشد .
شکل زیر چگونه کار کردن یک Forwarding Proxy Server را نشان می دهد :
![[تصویر: proxy-server1.gif]](http://foss.ir/modules/typetool/pnincludes/uploads/proxy-server1.gif)
از سمت راست به چپ در شکل داریم :
- یکBrowser Internal Client که قسمتی از شبکه ی داخلی ما است یک درخواست ( HTTP Request ) می فرستد .
- این درخواست به پروکسی سرور فرستاده می شود .
- پروکسی سرور درخواست را دریافت می کند و IP و ... را چک می کند .
- پروکسی سرور به درخواست پاسخ می دهد .
مهمترین هدف از Forwarding Proxy Server عمل کش کردن است . برای اولین بار که پروکسی سرور یک سند ( Document ) را دریافت کند ، آن را نگهداری می کند تا expire شود در این مدت هر درخواستی برای دریافت این فایل بدون فرستادن درخواست به اینترنت پاسخ داده می شود . به فایل های کش شده در پروکسی سرور shared cache می گویند و قابل دسترس تمام client ها در شبکه ی محلی می باشد.
Reverse Proxy Server
برخلاف Forwarding Proxy Server ، Reverse Proxy Server در خارج از شبکه ی داخلی ما قرار می گیرد . هدف اصلی در این مدل فیلتر کردن درخواست های مختلف به وب سروری است که در شبکه ی داخلی ما قرار دارد .
شکل زیر چگونه کار کردن یک Reverse Proxy Server را نشان میدهد :
![[تصویر: proxy-server2.gif]](http://foss.ir/modules/typetool/pnincludes/uploads/proxy-server2.gif)
از سمت راست به چپ در شکل داریم :
- یک Remote Client Browser یک در خواست (HTTP Request ) می فرستد .
- درخواست توسط پروکسی سرور دریافت میشود و forward می شود به router تنظیم شده در فایروال .
- Router درخواست را به وب سرور می فرستد. ( Internal Web Server )
هدف اصلی استفاده از Reverse Proxy Server بالاتر امنیت شبکه ی محلی است و هدف دوم کش کردن فایلها و سندها است .
تنظیم آپاچی وب سرور به عنوان یک پروکسی سرور
برای تنظیم آپاچی وب سرور به عنوان یک پروکسی سرور از دایرکتیو های (Directive ) گوناگونی استفاده می شود که در اینجا به تعداده کمی از آنها اشاره می کنیم . تمام این دایرکتیو ها از ماژولی به نام mod_proxy استفاده می کنند
قبل از تنظیم آپاچی به عنوان پروکسی سرور باید مطمئن شوید که این ماژول نصب شده است . اگر شما آپاچی را از سورس کامپایل کرده باشید و option زیر را در زمان اجرای اسکریپت configure به کار برده باشید به طور پیش فرض این ماژول نصب می شود
–enable-shared=max
بعد از اینکه مطمئن شدید که این ماژول نصب شده است شما می توانید این ماژول را با نام libproxy.so در فایل پیکربندی آپاچی که httpd.conf است پیدا کنید . در این فایل باید دو خط زیر وجود داشته باشد
LoadModule proxy_module libexec/libproxy.so
AddModule mod_proxy.c
پیکربندی آپاچی( httpd.conf ) به عنوان پروکسی سرورAddModule mod_proxy.c
در مثال زیر قسمتی از فایل پیکربندی آپاچی (httpd.conf ) که مربوط به تنظیمات پروکسی سرور است آمده است البته این ساده ترین نوع تنظیم است .
<IfModule mod_proxy.x="">
ProxyRequests on
<Proxy *="">
Order deny,allow
Allow from .your-domain.com
</Proxy>
ProxyVia on
<IfModule mod_disk_cache.c="">
CacheEnable disk /
CacheRoot “/usr/local/apache/proxy/”
NoCache some-domain.com
</IfModule>
ProxyBlock http://www.test.com</IfModule>
حال به بررسی بعضی از دایرکتیو های مثال بالا می پردازیم ProxyRequests on
<Proxy *="">
Order deny,allow
Allow from .your-domain.com
</Proxy>
ProxyVia on
<IfModule mod_disk_cache.c="">
CacheEnable disk /
CacheRoot “/usr/local/apache/proxy/”
NoCache some-domain.com
</IfModule>
ProxyBlock http://www.test.com</IfModule>
- <IfModule> : این دایرکتیو چک می کند که آیا ماژولی لود شده است یا خیر . در انتهای کار باید از </IfModule> استفاده کرد . در اینجا ما از این دایرکتیو برای اینکه چک کنیم آیا ماژول mod_proxy.c لود شده است یا خیر استفاده می کنیم ، اگر ماژول مورد نظر لود شده باشد تمام تنظیماتی که بین <IfModule> و </IfModule> است اعمال می شود در غیر این صورت نادیده گرفته می شوند .
- ProxyRequests : این دایرکتیو میتواند on یا Off باشد . اگر می خواهید آپاچی وب سرور شما به عنوان یک پروکسی سرور عمل کند باید این دایرکتیو on باشد .
- CacheEnable : برای کش کردن URL استفاده می شود و شکل کلی آن به شکل زیر است :
CacheEnable cache-type url-string
Cache-type میتواند مقادیر fd , disk , mem را داشته باشد بدین معنا که برای کش کردن URL ها از storage manager حافظه ، هارد دیسک و یا file descriptor استفاده شود .
به عنوان مثال داریم :
CacheEnable mem /manual
CacheEnable disk /images
CacheEnable fd /
url-string نشان می دهد که کدام url ها باید کش شوند مثلا در مثال بالا /manual بیان می کند که تمام url هایی که sub-url ، /manual هستند باید کش شوند مثل /manual/diff CacheEnable disk /images
CacheEnable fd /
- CacheRoot : از این دایرکتیو برای تعیین محلی که فایل های کش شده در آن باید قرار گیرند استفاده می شود .
- NoCache : لیستی از دامنه ها ، IP ها و سایت هایی که سند ها و فایل های آن نباید کش شوند را دارد .
- ProxyBlock : برای اینکه نگذاریم client ها به بعضی از سایت ها در پروکسی سرور دسترسی داشته باشند استفاده می شود .
- <Proxy> : شما با دایرکتیو ProxyBlock نمی توانید دسترسی Client ها را به پروکسی سرور کنترل کنید ( مثلا اینکه پروکسی سرور به یک client خاص سرویس ندهد ) فقط میتوانید بگویید چه سایت هایی قابل دسترس نباشند . زمانی که در یک Client Browser پورت و IP پروکسی سرور تنظیم شده باشد url های فرستاده شده توسط این Client Browser به شکل proxy:// است نه http:// . به همین دلیل شما می توانید به کمک این دایرکتیو کنترل لازم را روی Client ها و url های دریافت شده داشته باشید . مثلا در مثال زیر به تمام در خواست ها به جز درخواست هایی که از آدرس 192.168.0.3 آمده باشد پاسخ داده می شود بدین ترتیب Client که آدرس آن 192.168.0.3 باشد نمی تواند عملا از پروکسی سرور استفاده کند . توجه دارید که در آخر باید از دایرکتیو </Proxy> استفاده کنید .
<Proxy *="">
</Proxy>
<Proxy *="">Order allow,deny</Proxy>
<Proxy *="">Allow from all</Proxy>
<Proxy *="">Deny from 192.168.0.3</Proxy>
پیکربندی آپاچی به عنوان Forward Proxy</Proxy>
<Proxy *="">Order allow,deny</Proxy>
<Proxy *="">Allow from all</Proxy>
<Proxy *="">Deny from 192.168.0.3</Proxy>
تنظیمات فایل پیکربندی شبیه مثال بالا است ولی 2 مرحله دارد که باید حتما انجام شوند
الف ) فعال کردن ProxyRequests
برای فعال کردن این دایرکتیو باید مقدار آن را برابر on قرار داد .
شما می توانید تمام تنظیمات مربوط به پروکسی سرور را در داخل یک Virtual Host قرار دهید مانند مثال زیر :
<VirtualHost 192.168.0.1:8080="">
ProxyRequests on
……..
……..</VirtualHost>
در مثال بالا یک Virtual Host تعریف کرده ایم که به آدرس 192.168.0.1 و پورت 8080 گوش میدهد . در این حالت برای اینکه شما بتوانید از پروکسی سرور استفاده کنید باید در Browser خودتان در قسمت تنظیمات پروکسی ، آدرس و پورت VirtualHost را قرار دهید ، توجه داشته باشید که اگر از VirtualHost استفاده نکرده باشید باید آدرس آپاچی وب سرور و پورتی که گوش میدهد که معمولا 80 است را در Bowser خود قرار دهید . ProxyRequests on
……..
……..</VirtualHost>
ب) ساختن Mirror
یکی از ویژگی های آپاچی که به عنوان پروکسی استفاده می شود قابلیت آن در map کردن منابع یک remote site در local URL است .
To map = to replicate a Web or FTP site
بعد از map کردن remote site آپاچی می تواند سندها و فایل ها را به صورت محلی Locally در اختیار در خواست شوندگان قرار دهد .
برای استفاده از این ویژگی ما از دایرکتید ProxyPass استفاده می کنیم مانند مثال زیر :
ProxyPass /document http://www.linuxdocs.org
در مثال بالا /document جایی است که قرار است سند ها و فایل های map شده در آن قرار گیرند و http://www.linuxdocs.org همان remote site ما است .
استفاده از این دایرکتیو باعث کاهش Download ها و پهنای باند مورد استفاده می شود .
پیکربندی آپاچی به عنوانReverse Proxy
برای این کار ابتدا باید تمام کارهایی که در Forward Proxy انجام دادیم را انجام می دهیم با این تفاوت که اگر از Virtual Host استفاده می کنید پورت آن را باید 80 بگذارید چون کاربرها خارج از شبکه ی محلی ما هستند و بطور پیش فرض به پورت 80 وصل می شوند .
زمانی که از Reverse Proxy استفاده می کنیم و یک remote client یک در خواست می فرستد ، این در خواست redirect می شود به Internal Web Server ما . برای اینکه همچین چیزی اتفاق بیفتد redirect request فرستاده می شود به client browser . در این request یک header به نام Location وجود دارد که شامل hostname وب سرور محلی ما است که قرار است پردازش ها در آن انجام شود . برای اینکه ما بتوانیم hostname در Location را با hostname سروری که به عنوان Reverse Proxy انتخاب شده جایگزین کنیم باید از دایرکتیو ProxyReverse استفاده کنیم . فرم کلی این دایرکتیو شبیه ProxyPass است با این تفاوت که کاربرد آن کاملا فرق می کند .
ProxyReverse /images http://linda.developers.com/images
ProxyReverse /docs http://linda.developers.com/docs
ProxyReverse /fun http://funngames.com/fun
در مثال بالا تمام مقادیر Location Header ها شامل hostname پروکسی سرور خواهند بود به جای وب سرور محلی ما ، که سند ها و فایل ها در اصل از آنجا گرفته می شوند .ProxyReverse /docs http://linda.developers.com/docs
ProxyReverse /fun http://funngames.com/fun
تنظیم client ها برای استفاده از پروکسی سرور
ما برای مثال از Internet Explorer استفاده می کنیم ولی تنظیمات مورد نیاز برای تمام مرورگرها شبیه هم است .
برای اینکه Internet Explorer بتواند از پروکسی سرور استفاده کند به ترتیب کار های زیر را انجام می دهیم :
- باز کردن Internet Explorer
- انتخاب منوی Tools و سپس انتخاب Internet Options برای باز شدن dialog مربوط به Internet Options مانند شکل زیر :
![[تصویر: proxy-server3.gif]](http://foss.ir/modules/typetool/pnincludes/uploads/proxy-server3.gif)
- انتخاب کردن connection tab مانند شکل زیر :
![[تصویر: proxy-server4.gif]](http://foss.ir/modules/typetool/pnincludes/uploads/proxy-server4.gif)
- بر روی کلید LAN Settings کلیک کنید تا Dialog مربوط به تنظیمات LAN باز شود
- در قسمت Proxy Server باید Use a proxy server را انتخاب کنید
- در فیلد Address ، آدرس یا IP پروکسی سرور خود را بگذارید مثلا 187.17.68.181
- در فیلد Port ، پورتی را وارد کنید که پروکسی سرور روی آن تنظیم شده است مثلا 8080 مانند شکل زیر :
![[تصویر: proxy-server5.gif]](http://foss.ir/modules/typetool/pnincludes/uploads/proxy-server5.gif)
تهیه و تنظیم: نوید یعقوبی سرای
ویرایش: بهروز عبادی
منبع : foss.ir