با استونل، تونل امن بسازید

استونل چیه؟ برنامه‌ای که میاد اطلاعات رد و بدل شده رو رمزنگاری میکنه.
اما به تنهایی هیچ کاربردی نداره و همیشه پشت سرش یه برنامه دیگه هست. یه جورایی میشه گفت مثل آپاچی می‌مونه و نقش گارسونی رو برعهده داره که دم در رستوران (پورت) به گوش ایستاده و همه درخواست‌ها رو می‌گیره و پاس میده به برنامه پشت سری (سرآشپز) :) و بعد دوباره جواب  (غذای دستپخت سرآشپز) رو بعد از اینکه رمزنگاری کرد!  به دست مشری می‌رسونه و بنابراین وسط راه کسی متوجه نوع غذا نمی‌شه، اینکه پیتزاست و یا ساندویچ دیگه معلوم نیست!

stunnel

حالا بریم سراغ یکی از  برنامه‌های پشت سری و کاربردی اسکوئید! اسکوئید دو تا نقش مهم داره یکی به عنوان استفاده کش و دیگری پروکسی. حالا توی مورد ما قراره کاربر از طریق استونل درخواست خودش رو به صورت رمز شده بفرسته به سرور، درون سرور استونل درخواست کاربر و مشتری رو هدایت می‌کنه به سمت اسکوئید و اون هم  سایت مورد درخواست کاربر رو باز میکنه روی سروری که دارید، و جواب رو تحویل استونل می‌ده و در نهایت استونل هم جواب رو به صورت رمز شده به سمت کاربر هدایت می‌کنه :)

حالا که روند کار مشخص شد، می‌ریم سراغ ریزه کاری‌ها

تنظیمات سمت سرور

۱- تنظیمات مربوط به اسکوئید

با فرض اینکه centos نسخه شش دارید به ابتدای فایل تنظیمات اسکوئید خطوط یک تا شش زیر رو اضافه کنید

vi /etc/squid/squid.conf
auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/squid_passwd
auth_param basic children 20 startup=10 idle=1 concurrency=5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users

خط اول می‌گه آقای اسکوئید از سیستم احراز هویت ncsa استفاده کن، یوزرنیم‌ و پسورد رو از هم از فایل squid_passwd بخون و چک کن که کاربر یوزر و پسوردش منطبق هست با یوزر و پسوردی که داخل این لیست موجوده؟

خط دوم تعداد پروسه‌هایی رو نشون می ده که در زمان پروسه احراز هویت لازمه  و این عدد اگه خیلی کم باشه زمانی که سرعت نت پایینه، مشکل‌ساز می‌شه چون در سرعتای پایین  پروسه‌های زیادی موقع وارد کردن پسورد باز میشه

خط سوم همون نوشته و آلارمی هست که کاربر هنگام استفاده خواهد دید :) به این صورت که برای اولین استفاده، کادری باز میشه و از کاربر یوزر و پسورد رو می‌پرسه، که همونجا این پیغام رو خواهد دید Squid proxy-caching web server

خط چهارم باعث میشه اسکوئید هر دو ساعت یوزر و پسورد رو از کاربر بپرسه و اینطوری اگر مثلا کاربری یوزر و پسوردش رو در کافی نت وارد کرده باشه، مشکل چندانی پیش نخواهد اومد.

خط پنجم باعث می‌شه اسکوئید هر یوزری رو که بدین روش لاگین کرد، یک برچسب ncsa_users بهش بچسبونه و توی خط آخر گفتیم هر کی  این برچسب ncsa_users رو داشت اجازه دسترسی به وب رو داشته باشه!

حالا باید به روشی یوزرنیم و پسورد رو به صورت استاندارد و قابل فهمی وارد squid_passwd کنیم. برای اینکار از برنامه htpasswd استفاده می‌کنیم.

/usr/local/apache/bin/htpasswd -c /etc/squid/squid_passwd novid

و برای اینکه برنامه اسکوئید بتونه به محتویات این فایل دسترسی داشته باشه دستور زیر رو بزنید.

chmod o+r  /etc/squid/squid_passwd

وقتی این دستور رو بزنید، برنامه ازتون پسوردِ کاربر novid رو می‌پرسه که باید دوبار وارد کنید و در نهایت خروجی در فایل squid_passwd نوشته می‌شه. و برای یوزرهای بعدی هم دیگه لازم نیست آرگومان سی رو وارد کنید چرا که فایل از نو ساخته می‌شه!

۲- تنظیمات مربوط به استونل

ابتدا فایل تنظیمات استونل رو با ادیتور دلخواهتون باز کنید.

vi /etc/stunnel/stunnel.conf

اگه می‌بنید خیلی فایل شلوغ پلوقی هست، کل نوشته‌های داخلش رو  پاک کنید و فقط خط های زیر رو اضافه کنید بهش :)

cert = /etc/stunnel/stunnel.pem
pid = /var/run/stunnel.pid
setuid = root
setgid = root
output = /var/log/stunnel.log

[squid]
accept = 4948
connect = 127.0.0.1:3128

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

خط accept میگه اقای اسکوئید به پورت ۴۹۴۸ گوش بده! و همه درخواست‌ها روی این پورت رو هدایت کنه به پورت ۳۱۲۸ که پورت اسکوئید هست:)

نکته خیلی مهم اینه که کاربر می‌تونه مستقیم به پورت ۳۱۲۸ و اسکوئید هم وصل شه! که برای جلوگیری از این اتفاق با فایروال می‌تونید پورت ۳۱۲۸ رو مسدود کنید.

کلاینت (کاربر) باید پورت ۴۹۴۸ و آی‌پی سرور رو برای استفاده از استونل داشته باشه، می تونید از پورت ۸۰ نیز  استفاده کنید و اینطوری دیگه توی بدترین شرایط دسترسی به نت رو خواهید داشت :)

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

openssl genrsa -out privkey.pem 2048
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
cat privkey.pem cacert.pem >> /etc/stunnel/stunnel.pem

مجوز کلید رو هم تغییر می‌دیم تا از دست خرابکاری‌های احتمالی در امون باشه

chmod 0400 /etc/stunnel/stunnel.pem

اگه همه چیز خوب پیش رفته باشه باید بشه با دو تا دستور زیر سرویس‌های اسکوئید و استونل رو سمت سرور اجرا کرد.

stunnel /etc/stunnel/stunnel.conf
/etc/init.d/squid restart

و اما تنظیمات سمت کلاینت (کاربر)

کاربر اگر اپن سوزه باشه کافیه برنامه استونل رو نصب کنه و فایل رو بدین شکل تغییر بده

vi /etc/stunnel/stunnel.conf

client = yes
chroot = /var/lib/stunnel/
setuid = stunnel
setgid = nogroup

pid = /var/run/stunnel.pid

[proxy]
accept = 127.0.0.1:5050
connect = server_ip:4948

توی مرورگر و توی بخش پروکسی و http  کاربر باید پورت ۱۲۷٫۰٫۰٫۱ و پورت ۵۰۵۰ رو وارد کنه. در اینصورت با وارد شدن به هر سایتی، یه کادر باز میشه و ازتون پسورد و یوزرنیم رو می‌پرسه.

Released under public domain

یک فکر در “با استونل، تونل امن بسازید”

  1. راه سادهتر برای اینکه نشه از بیرون به squid وصل شد اینه که بری و بهش بگی فقط روی ۱۲۷.۰.۰.۱ گوش وایسا.
    چون stunnel روی همین آدرس کار میکنه مشکلی براش پیش نمیاد.

    یعنی بری و آدرس ۳۱۲۸ خالی رو تبدیل این :
    ۱۲۷٫۰٫۰٫۱:۳۱۲۸

    1. برای ویندوز که سایتش بری برنامه داره، راحت می‌تونه وصل شه، دقیقا مشابه همین اپن سوزه شاید ساده تر حتی وصل میشن به سمت سرور :)
      من رو آیپد راهش انداختم حتما اندروید هم میشه :ی احتمال داره حتی از استور و ایناش بتونی برنامه اماده پیدا کنی:ی

  2. داشتن که داره و دیدم چه جوری میشه راحش انداخت تنظیمات فایل کلانتش باید چه جوری باشه با همین تنظیمات سرور بالا؟ گواهی ها و.کلید رو باید کجا گذاشت توی کدوم فولدر
    درضمن توی لینوکس دیگه گواهی وکلید رو نیازی نیست توی کلاینت هم قرار داده شه؟

  3. سلام و ممنون از سایت خوبتون
    در ابتدا نوشته بودید که:
    خط دوم تعداد پروسه‌هایی رو نشون می ده که در زمان پروسه احراز هویت لازمه و این عدد اگه خیلی کم باشه زمانی که سرعت نت پایینه، مشکل‌ساز می‌شه چون در سرعتای پایین پروسه‌های زیادی موقع وارد کردن پسورد باز میشه!!!
    auth_param basic children 20 startup=10 idle=1 concurrency=5

    حالا سوال بنده این هست که سرعت فعلی هم شامل این مورد میشه؟
    و اینکه چه تغییراتی باید ایجاد بشه در خط دوم با توجه به این نوع سرعت؟

    1. حتماً لازم نیست Authentication رو سمت Squid انجام بدید. برای هر کاربر یک گواهی‌نامه امنیتی صادر کنید و سمت Stunnel چک کنید. (verify = 3 و لیست گواهی‌نامه‌ها در CAfile)

  4. ممنون از این آموزش. من یه سرور با centos5 دارم که میخوام روش http پروکسی نصب کنم. نمیخوام پسورد هم داشته باشه. فقط میخوام ای پی و پورت رو به مرورگر بدم و بهش وصل بشه. امکانش هست راهنمایی کنین؟ الآن چند روزه دارم میگردم اما روش سالمی که کار کنه نیافتم :((

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>