تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آموزش نصب و راه اندازی Squid Proxy در اوبونتو 22.04


۵ اسفند ۱۴۰۳

پروکسی سرورها واسطه‌ای بین شما و مقصدتان هستند که داده‌ها را ارسال و دریافت می‌کنند. مانند مترجم یک جلسه، ارتباط را برقرار کرده و اطلاعات را منتقل می‌کنند. یکی از پروکسی‌های محبوب Squid است که فراتر از واسطه عمل کرده و ترافیک شبکه را نیز مدیریت می‌کند که در این آموزش، نحوه نصب و پیکربندی آن روی سرور Ubuntu 22.04 را بررسی خواهیم کرد.

پیش نیازهای نصب

در این آموزش از your_domain به‌عنوان نام دامنه استفاده شده است، اما شما باید آن را با دامنه واقعی خود یا آدرس IP جایگزین کنید.

مرحله اول: نصب Squid Proxy

همان‌طور که پیش‌تر گفتیم، Squid نه‌تنها برای مسیریابی ترافیک کاربران استفاده می‌شود، بلکه در سرورها نقش مهمی دارد. از جمله کاربردهای آن می‌توان به متوازن‌سازی بار برای مدیریت بهتر ترافیک و مسیریابی شبکه‌ای برای هدایت داده‌ها در معماری‌های پیچیده اشاره کرد.

با این حال، برخی روش‌های مقیاس‌پذیری افقی که در گذشته به پروکسی سرورها متکی بودند، با رواج فریمورک‌هایی مانند Kubernetes دیگر کمتر مورد استفاده قرار می‌گیرند. Kubernetes و فناوری‌های مشابه با توزیع بهینه‌تر اجزای یک برنامه، در برخی موارد وابستگی به پروکسی سرورها را کاهش داده و راهکارهای پیشرفته‌تری برای مدیریت ترافیک فراهم کرده‌اند.

در نهایت، این روش‌های مقیاس‌پذیری افقی که معمولاً از پروکسی سرورها استفاده می‌کردند، با ظهور فریمورک‌هایی مانند Kubernetes که اجزای بیشتری از یک برنامه را توزیع می‌کنند، از محبوبیت‌شان کاسته شده است.

بیایید از این مطالب بگذریم و نصب Squid Proxy را با دستورات زیر در اوبونتو شروع کنیم:

sudo apt update
sudo apt install squid

سرویس Squid به‌طور خودکار پس از اتمام فرآیند نصب شروع می‌شود. برای بررسی اینکه آیا سرویس به درستی در‌حال اجرا است یا خیر، دستور زیر را تایپ کنید:

systemctl status squid.service

خروجی شبیه این خواهید داشت:

● squid.service - Squid Web Proxy Server
     Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-12-15 21:45:15 UTC; 2min 11s ago

به‌طور پیش‌فرض، Squid اتصالات خارجی را مسدود می‌کند و فقط از داخل سرور قابل دسترسی است. برای اجازه دادن به کلاینت‌های خارجی، باید تنظیمات آن را ویرایش کنید.

فایل پیکربندی Squid در مسیر /etc/squid/squid.conf قرار دارد که می‌توانید آن را با nano یا هر ویرایشگر دلخواه خود باز کنید:

sudo nano /etc/squid/squid.conf

همان‌طور که در کد زیر می‌بینید فایل پیکربندی Squid کمی طولانی است که به‌صورت موقت بصورت کامنت درآمده‌اند. برای پیدا کردن تنظیمات موردنظر، بهتر است از قابلیت جستجو استفاده کنید. در ویرایشگر nano، با فشردن Ctrl + W عبارت موردنظر را تایپ کرده وEnter را بزنید. در صورت نیاز به یافتن موارد بعدی، می‌توانید از Alt + W استفاده کنید.

ابتدا به خطی که شامل عبارت http_access deny all است بروید. در این بخش، توضیحاتی درباره قوانین پیش‌فرض دسترسی Squid مشاهده می‌کنید:

. . . 
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all
. . . 

در این بخش، می‌توانید ببینید که Squid به‌طور پیش‌فرض فقط به localhost اجازه اتصال می‌دهد و سایر اتصالات را مسدود می‌کند. توجه داشته باشید که این قوانین به‌ترتیب پردازش می‌شوند، بنابراین بهتر است قانون deny all را در انتهای این بخش قرار دهید تا تنظیمات دسترسی به درستی اعمال شوند.

می‌توانید این قانون را به allow all نیز تغییر دهید تا کاربران بصورت عمومی بتوانند به پروکسی شما متصل شوند، اما معمولاً این کار توصیه نمی‌شود.

بجای آن، می‌توانید یک خط جدید بالای عبارت http_access allow localhost اضافه کنید و آدرس IP خود را وارد کنید، مانند مثال زیر:

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
  • در تنظیمات بالا acl مخفف Access Control List قوانینی است که مشخص می‌کند چه کسی اجازه دسترسی دارد.
  • در اینجا localnet نام ACL شما است.
  • src هم محدوده‌ای از آدرس‌های IP را مشخص می‌کند که اجازه ارسال درخواست از طریق Squid را دارند، یعنی دستگاه‌هایی که می‌توانند به پراکسی متصل شوند.

اگر آدرس IP محلی خود را نمی‌دانید، ساده‌ترین راه این است که به سایتی مثل What’s My IP مراجعه کنید تا آدرس سیستم‌تان را پیدا کنید. بعد از اضافه کردن IP خود در تنظیمات Squid، باید تغییرات را ذخیره کنید. اگر از nano استفاده می‌کنید، برای ذخیره و خروج، کلیدهای Ctrl + X را بزنید، سپس Y را برای تأیید تایپ کنید و Enter را بزنید.

حالا می‌توانید با ری‌استارت کردن Squid، اتصال را تست کنید، اما قبل از آن بهتر است تنظیمات امنیتی بیشتری را اعمال کنید تا پروکسی شما در برابر دسترسی‌های غیرمجاز محفوظ بماند.

مرحله دوم: امن‌ سازی Squid Proxy

بیشتر پروکسی‌ها و برنامه‌های کلاینت (مانند مرورگرهای وب) از روش‌های مختلف احراز هویت پشتیبانی می‌کنند، مهم‌ترین آن‌ها، کلیدهای مشترک و سرورهای احراز هویت جداگانه است که نام کاربری و رمز عبور رایج‌ترین روش می‌باشد.

Squid Proxy می‌تواند علاوه بر محدود کردن دسترسی بر اساس IP، احراز هویت کاربران را همچنین با استفاده از نام کاربری و رمز عبور انجام دهد. در این بخش برای افزایش امنیت دسترسی‌ها، می‌توانید فایلی به نام etc/squid/passwords ایجاد کرده و Squid را طوری تنظیم کنید که اطلاعات ورود کاربران را از این فایل دریافت کند. این روش باعث می‌شود فقط کاربران مجاز بتوانند از پروکسی استفاده کنند، در نتیجه دسترسی‌های غیرمجاز مسدود شده و امنیت سرور شما افزایش پیدا کند.

طبق دستور زیر ابتدا باید چند ابزار کمکی از پروژه Apache را نصب کنید تا بتوانید از یک تولیدکننده رمز عبور سازگار با Squid استفاده کنید.

sudo apt install apache2-utils

این پکیج شامل دستور htpasswd است که می‌توانید از آن برای ایجاد رمز عبور یک کاربر جدید در Squid استفاده کنید. نام‌های کاربری در Squid مستقل از نام‌های کاربری سیستم هستند، بنابراین در صورت تمایل، می‌توانید از همان نام کاربری سیستم خودتان استفاده کنید. پس از اجرای این دستور، از شما خواسته می‌شود که یک رمز عبور برای کاربر وارد کنید:

sudo htpasswd -c /etc/squid/passwords your_squid_username

با این کار، نام کاربری شما به همراه نسخه رمزگذاری‌شده‌ی رمز عبورتان در فایل /etc/squid/passwords ذخیره می‌شود. Squid از این فایل برای تأیید هویت کاربران استفاده می‌کند. اگر کنجکاوید ببینید اطلاعات به چه شکلی ذخیره شده‌اند، می‌توانید با دستور cat /etc/squid/passwords محتوای آن را بررسی کنید:

sudo cat /etc/squid/passwords
Output
sammy:$apr1$Dgl.Mtnd$vdqLYjBGdtoWA47w4q1Td.

بعد از اینکه مطمئن شدید نام کاربری و رمزعبورتان ذخیره شده، حالا باید Squid را طوری تنظیم کنید تا از این فایل برای احراز هویت استفاده کند. برای این‌کار تنظمیات Squid را با ویرایشگر nano باز کنید و خطوط زیر را به آن اضافه کنید:

sudo nano /etc/squid/squid.conf
…
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
http_access allow authenticated
# And finally deny all other access to this proxy
http_access deny all
…

همان‌طور که در بالا می‌بینید، این دستورات اضافی به Squid می‌گویند که برای احراز هویت، هش‌های رمز عبور را از فایل جدید شما بخواند و آن‌ها را با روش basic_ncsa_auth پردازش کند. همچنین دسترسی شما به پروکسی را فقط در صورتی که احراز هویت کرده باشید، مجاز می‌کند.

برای اطلاعات بیشتر در این مورد می‌توانیدبه مستندات رسمی Squid مراجعه کنید. در آخر پس از اعمال تغییرات گفته شده، طبق دستور زیر، Squid را ری‌استارت کنید، صبور باشید زیرا این فرایند ممکن است چند لحظه طول بکشد.

sudo systemctl restart squid.service

و حتما فراموش نکنید اگر از ufw استفاده می‌کنید، حتما پورت 3128 را طبق دستور زیر در فایروال باز کنید.

sudo ufw allow 3128

در ادامه این آموزش، به پروکسی خود متصل خواهید شد.

مرحله سوم: اتصال از طریق Squid

برای اینکه از صحت عملکرد Squid مطمئن شویم باید از دستور curl استفاده کنیم. این ابزار محبوب ،روشی ساده برای ارسال درخواست‌های وب است. اگر می‌خواهید ببینید که اتصال شما بصورت درست در مرورگر کار می‌کند یا نه، بهتر است ابتدا آن را با curl تست کنید. این ابزار به‌صورت پیش‌فرض روی بیشتر سیستم‌های ویندوز، مک، و لینوکس نصب شده، پس کافی است ترمینال خود را باز کنید و این دستور را اجرا کنید:

curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 http://www.google.com/

در دستور بالا آرگومان -x در دستور curl برای مشخص کردن یک سرور پروکسی استفاده می‌شود. در این آموزش، شما از پروتکل http:// استفاده می‌کنید، در این مرحله نام کاربری و رمز عبور خود را وارد می‌کنید و سپس به یک وب‌سایت معتبر مانند google.com متصل می‌شوید.

اگر دستور curl به‌درستی اجرا شود، باید خروجی مشابه زیر دریافت کنید.

*   Trying 138.197.103.77...
* TCP_NODELAY set
* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
* Proxy auth using Basic with user 'sammy'
> GET http://www.google.com/ HTTP/1.1

البته می‌توانید از پروکسی Squid بدون تغییرات اضافی، برای دسترسی به سایت‌های https:// استفاده کنید. با استفاده از یک دستور پروکسی جداگانه به نامCONNECT می‌توانید ارتباط SSL بین کلاینت و سرور را حفظ کنید.

curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
Output
*   Trying 138.197.103.77...
* TCP_NODELAY set
* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user 'sammy'
> CONNECT www.google.com:443 HTTP/1.1
> Host: www.google.com:443
> Proxy-Authorization: Basic c2FtbXk6c2FtbXk=
> User-Agent: curl/7.55.1
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
* Proxy replied OK to CONNECT request
* CONNECT phase completed!

حالا اعتبارنامه‌هایی که برای curl استفاده کرده‌اید، باید در هر جایی که بخواهید از سرور پروکسی جدید خود استفاده کنید، کار کنند.

نتیجه گیری

در این مقاله از لیارا، نحوه راه‌اندازی و پیکربندی Squid، یک پروکسی HTTP متن‌باز محبوب را برای مدیریت ترافیک وب و افزایش امنیت و حریم خصوصی بررسی کردیم. ابتدا Squid را روی سرور Ubuntu 22.04 نصب کردیم و بعد با ویرایش فایل پیکربندی squid.conf، دسترسی به پروکسی را محدود کردیم. سپس تنظیمات امنیتی و نحوه ساخت و استفاده از نام کاربری و رمز عبور برای احراز هویت کاربران را آموزش دادیم. بعد از این مراحل، Squid راه‌اندازی و آماده استفاده شد.

در آخر، با استفاده از curl به شما نشان دادیم چطور می‌توانید به پروکسی وصل شوید و حتی بدون هیچ تغییر اضافی به سایت‌های https:// هم دسترسی پیدا کنید.

همچنین بخوانید: نحوه تنظیم سرور وب آپاچی روی سرور مجازی لینوکس (VPS)

سوالات متداول

1- چگونه میتوانم Squid را برای HTTPS تنظیم کنم؟

برای اتصال به سایت‌های HTTPS از طریق Squid، به تنظیمات اضافی نیاز نیست. Squid به‌طور پیش‌فرض از پروتکل CONNECT برای اتصال به سایت‌های HTTPS استفاده می‌کند که باعث می‌شود ارتباط امن بین شما و سرور مقصد برقرار شود. کافی است از دستور curl با پروتکل https:// استفاده کنید تا تست کنید.

2- از Squid سرور در شبکه‌های محلی میتوانم استفاده کنم؟

برای اینکه Squid فقط به IP خاصی اجازه اتصال بدهد، می‌توانید آدرس IP خود را در تنظیمات فایل پیکربندی Squid اضافه کنید. به این ترتیب، فقط دستگاه‌هایی که از آن IP به سرور دسترسی دارند می‌توانند از پروکسی استفاده کنند.

3- اگر Squid به درستی کار نکند چکار کنم؟

در صورت بروز مشکل، ابتدا وضعیت سرویس Squid را با دستور زیر بررسی کنید:

systemctl status squid.service

طبق خروجی که دریافت می‌کنید، اگر سرویس در حال اجرا نباشد، می‌توانید آن را مجدداً راه‌اندازی کنید:

sudo systemctl restart squid.service

همچنین بررسی کنید که تنظیمات فایل پیکربندی به‌درستی انجام شده باشد و هیچ اشتباهی در آدرس IP یا تنظیمات دسترسی وجود نداشته باشد.

4-چطور از Squid برای اتصال به اینترنت با IP متفاوت استفاده کنم؟

برای استفاده از Squid به‌عنوان پروکسی و اتصال به اینترنت با IP متفاوت، فقط کافی است Squid را روی سرور خود راه‌اندازی کرده و تنظیمات پروکسی را در مرورگر یا برنامه‌ای که استفاده می‌کنید اعمال کنید. با این کار ترافیک اینترنتی شما از طریق سرور پروکسی منتقل می‌شود و IP شما تغییر خواهد کرد.