/dev/null
321 subscribers
50 photos
11 videos
8 files
111 links
| دستمو گذاشتم رو این کار ، قلبمو گذاشتم. |

هر new ای را delete ای ست و پس از آن null کردنی (:
Download Telegram
Channel created
Channel name was changed to «/dev/null»
Channel photo updated
OSI layers 💭

🔥یک مدل بصری که شامل 7 لایه شبکه است

> پروتکل(protocol) چیست : به قوانین ارتباط بین سیستم‌ها و ماشین‌ها میگن !

> آی پی (ip) : یک internet address هست !

>پورت (port) : به عنوان نقطه اتصالی برای ورود به یک سیستم یا سرور است. به عنوان مثال در شرکت‌های بزرگ یک تلفن چند داخلی دارد و هر داخلی به یک بخش متصل می‌شود آن داخلی‌ها را می‌توان به عنوان port در نظر گرفت !

> برای connect شدن 2 سیستم در شبکه نیاز به دو ip و دو port داریم !

لایه 7 : شامل پروتکل http , ftp , https , ...
لایه 6 : پروتکل ssl
لایه 5 : zip
لایه 4 : ‌ TCP یا UDP
لایه 3 : send ip
لایه 2 : send mac address
لایه 1 : physical layer ( اطلاعات به صورت باینری در شبکه انتقال می‌یابد)

#network
💭TCP or UDP :

🔥تعریف‌های زیادی درباره این دو پروتکل است ولی به صورت خلاصه :
‌TCP
دقت بالاتر ولی سرعت انتقال داده کمتر دارد.

UDP
دقت پایین‌تر و سرعت بالاتر دارد.

< میشه دقت رو اینطوری گفت که ‌TCP هر Data که می‌فرسته چک ی‌کنه که با موفقیت ارسال شده یا نه ولی UDP بعد Data هایی که فرستاد چک می‌کنه کدام رفته و کدام ارور خورده

#network
💭client vs server !

🔥کلاینت کیه ؟ سرور چیه ؟

در شبکه به دریافت کننده اطلاعات client می‌گویند و به ارسال کننده اطلاعات server می‌گویند.

#network
💭ریموت شدن به سرور با ssh

🔥اس اس اچ (ssh) یه پروتکل رمزنگاری شده است که برای ارتباط بین دستگاه ها درون شبکه کاربرد دارد به ویژه برای کنترل و دسترسی به سرورها از راه دور (remote )


برای کانکت شدن به یک سرور باید هویت تایید شود که به دو روش پرتکرار انجام می‌شود :

1️⃣ اولین روش قرار دادن یک username و password برای سرور است .

sudo adduser  <new_username>


بعد از اجرای این command از شما یک پسورد می‌خواهد و تمام.

2️⃣ روش دوم از امنیت بالاتر برخوردار است.
این روش یک جفت کلید که شامل private key و public key هست احراز هویت ی‌شود.

ssh-keygen -t rsa (or dsa , ..)

نکته : در اینجا rsa , dsa , .. روش های رمز نگاری هستند.

بعد از اجرا از شما یک private key و یک public key می‌خواهد.

ssh <username>@<hostname>


حالا وقتی ssh بزنیم به یه server از ما اون public key که انتخاب کردیم رو میخواد!!

حالا هر سروری که بسازید و بخواهید به آن ssh بزنید یک public key می‌خواهد که باید آن را حفظ باشید برای اینکه با یک پسورد به تمام سرورها متصل بشوید می‌توانید از private key استفاده کنید.
با اجرا این command:

ssh-copy-ip <username>@<hostname>

نکته : در اینجا فایل public باید به اسم id_rsa.pub و private
باید به اسم id_rsa باشد در غیر اینصورت باید ssh-copy-ip ، include کرد .

❓️کجا میتونم فایل ها رو ببینم
/home/user/.ssh


❓️از کجا بفهمم private key من در سرور ذخیره شده و دیگه نیازی به public key نیست :

1) ssh <username>@<hostname>
2) cd ~.ssh
3) cat authorized_key

❓️و حالا اینکه از کجا بفهمیم یه سرور هایی رو میتونیم از private key استفاده کنیم
باید بهتون بگم که تویه همون مسیر

home/user/.ssh

یه فایلی هست به اسم known_hosts که توش هر سروری که بشه باهاش private key زد رو نشون میده .

💡 الان دیگه به راحتی میشه به سرور دسترسی پیدا کرد و و حتی data انتقال داد که بعداً روشش رو بهتون میگم.

#network #linux
💭از browser تا web server :

🔥وقتی شما روی URL یا همون لینک کلیک میکنید چه اتفاقی می افته؟

>وب سرور چیکار میکنه❓️
سرو میکنه اطلاعات رو توسط پروتکل Http !

شما برای وارد شدن به یک وب سایت و دسترسی به محتوای آن نیاز به ip اون وب سایت یا سرور دارین .

ولی ما برای هر وب سایت یا سرور فقط دامین اون ها ( مثل google.com) رو بلدیم
خب حالا باید چیکار کرد ❓️

اینجا DNS به کمک ما میاد !

چیکار میکنه ؟
دی ان اس (DNS ) مثل یک دفترچه تلفن تو خودش نگه می‌داره که مثلا ip گوگل ، 216.239.38.120 هس و یا مثلا example.com , آی پیش ۱.۲.۳.۴ هس (مثلا)

>هر سرور یک name server داره که DNS server ها به صورت زنجیره ای وصل هستن به اون ها و ip سرور رو برای ما میگیرن.



گفتیم برای ارتباط بین دو سیستم نیاز به دو ip و دو port داریم ! پس ip DNS و ip name server کجاست ؟
ip DNS :
~. resolve.conf در فایلی به اسم

ip name server:
وقتی که ما دامین میخریم همون جا ست میکنیم که ip name server چی باشه !

خب پس متوجه شدیم میشه ip سرور ها و وب سایت های مختلف رو توسط DNS بررسی کرد .

حالا ip رو گرفتیم بعدش چی میشه ؟

حالا توسط پروتکل ip/tcp/http یک request http به وب سرور میزنیم و یک response http توسط وب سرور دریافت میکنیم !

(نکته : این ip که ما میگیریم ip خود سایت یا وب سرور نیست بلکه ip CDN هست که بعدا میگم راجبش )


طبق این پروتکل(TCP) ، سه مرحله باید طی بشه که browser و web server به هم متصل بشن :

3_way handshake :

مرحله اول : syn هست که browser یک بسته اولیه برای web server می‌فرسته که چک کنه در این بین پروتکل رمزنگاری چک شده یا اینکه بسته به صورت کامل رسیده به مقصد یا نه

مرحله دوم : syn / ack
در این مرحله web server تایید خودش رو برای درست رسیدن بسته انجام میده

مرحله سوم : ack
در این مرحله browser تایید میکنه که تاییدیه web server بدست آورده


خب در response که دریافت میکنیم پکت های html , javascript, css , .. هست که توسط render و javascript interpreter مرورگر تبدیل به data های قابل درک می‌شوند!

#network
👍1
گوگل بهتون رایگان یه شل دبیان بیس میده که 5 گیگ هم حافظه داره روش داکر، گیت، پایتون و پی اچ پی و ... هم از قبل نصب کرده


یه ادیتور هم داره

shell.cloud.google.com
💭SSL or TLS

🔥پروتکل SSL (Secure Sockets Layer) یا نسخه جدیدتر آن، TLS (Transport Layer Security)، پروتکلی است که به طور گسترده برای ایجاد ارتباطات امن بین کاربران و سرورها استفاده می‌شود. SSL دو قابلیت مهم را فراهم می‌کند:

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

2) حفظ یکپارچگی اطلاعات : این پروتکل همچنین تضمین می‌کند که داده‌هایی که بین کاربر و سرور منتقل می‌شود، در مسیر دستکاری نشده‌اند. اگر در جریان انتقال داده‌ها، تغییرات غیرمجاز انجام شود، SSL این تغییرات را شناسایی می‌کند و به کاربر هشدار می‌دهد.

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

نقش ابزارهایی مثل Burp Suite در حملات MITM:

برپ سوییت یکی از ابزارهای معروف برای انجام حملات "Man in the Middle" (MITM) است. در این حالت، به جای ارتباط مستقیم با سرور، ترافیک از طریق Burp Suite عبور داده می‌شود. Burp به عنوان یک واسطه بین کاربر و سرور عمل می‌کند.

قابلیت ها :

قابلیت Traffic Inspection: برپ می‌تواند ترافیک رمزنگاری‌شده SSL را باز کند و به کاربر اجازه دهد محتوای درخواست‌ها و پاسخ‌ها را مشاهده کند. این کار با استفاده از یک گواهی SSL تقلبی که Burp Suite ایجاد می‌کند، انجام می‌شود. کاربر یا مرورگر باید این گواهی را بپذیرد تا Burp بتواند به ترافیک دسترسی پیدا کند.

قابلیت Traffic Modification: علاوه بر مشاهده ترافیک، Burp این امکان را فراهم می‌کند که کاربر بتواند محتوای بسته‌ها را تغییر دهد. مثلاً می‌توان درخواست‌هایی که به سرور ارسال می‌شود یا پاسخ‌هایی که از سرور دریافت می‌شود را دستکاری کرد.
مراحل دقیق عملیات MITM با Burp:

ابتدا، ارتباط از مرورگر کاربر به Burp Suite برقرار می‌شود، به‌جای اینکه مستقیم به سرور متصل شود.
برپ بسته‌ها را از مرورگر دریافت می‌کند و به‌طور موقت رمزنگاری را باز می‌کند (Decrypt). این کار با استفاده از گواهی جعلی SSL که قبلاً نصب شده است، امکان‌پذیر است. سپس کاربر می‌تواند بسته را مشاهده یا تغییر دهد.
در نهایت، Burp Suite دوباره بسته را رمزنگاری کرده و به سرور اصلی ارسال می‌کند.
》این عملیات به ما امکان بازبینی و دستکاری ترافیک در یک ارتباط امن را می‌دهد، در حالی که برای کاربر یا سرور تفاوتی در ظاهر ارتباط مشاهده نمی‌شود.
👍2
💭انواع احراز هویت در web applications :

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

احراز هویت دو مرحله‌ای (2FA):
این روش شامل دو مرحله برای تأیید هویت کاربر است. معمولاً پس از وارد کردن نام کاربری و رمز عبور، کاربر باید یک کد تأیید که به تلفن همراه یا ایمیل او ارسال می‌شود را وارد کند.

احراز هویت مبتنی بر توکن : (Token-Based Authentication) یکی از روش‌های محبوب و امن برای تأیید هویت کاربران در وب اپلیکیشن‌ها و APIها است. در این روش، پس از ورود موفق کاربر، یک توکن به او داده می‌شود که می‌تواند برای دسترسی به منابع مختلف استفاده شود

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

احراز هویت بیومتریک:
این روش شامل استفاده از ویژگی‌های بیومتریک مانند اثر انگشت، تشخیص چهره یا صدا برای تأیید هویت کاربر است.
>> برای اطلاعات بیشتر :
https://www.baeldung.com/cs/authentication-web-apps


مراحل احراز هویت مبتنی بر توکن (Token-Based Authentication) :

1️⃣ورود کاربر: کاربر با وارد کردن نام کاربری و رمز عبور خود به سرور درخواست می‌فرستد

2️⃣تأیید هویت: سرور اطلاعات کاربر را بررسی می‌کند. اگر اطلاعات صحیح باشد، سرور یک توکن تولید می‌کند

3️⃣ارسال توکن: توکن تولید شده به کاربر ارسال می‌شود. این توکن معمولاً به صورت یک رشته متنی (مانند JWT - JSON Web Token) است.

4️⃣استفاده از توکن: کاربر می‌تواند این توکن را در درخواست‌های بعدی خود به سرور ارسال کند. معمولاً توکن در هدر HTTP (به عنوان مثال، در هدر Authorization) ارسال می‌شود.
>> در مورد هدر های HTTP قبلا توضیح دادم !

5️⃣تأیید توکن: سرور توکن را بررسی می‌کند تا مطمئن شود که معتبر و غیر منقضی است. اگر توکن معتبر باشد، سرور به درخواست کاربر پاسخ می‌دهد

رایج ترین نوع احراز هویت از طریق توکن :

یکی از انها JWT (JSON Web Token):

یکی از رایج‌ترین انواع توکن‌ها است که شامل سه بخش (Header، Payload و Signature) است و می‌تواند اطلاعاتی مانند شناسه کاربر و زمان انقضا را در خود داشته باشد.
>> در مورد Payload و signature بعدا بیشتر توضیح میدم

حالا JWT از الگوریتم های مختلفی استفاده میکنه که پرکاربرد ترین اون ها :

HS256 , RS256

الگوریتم HS256 چیست؟

‏HS256 یک الگوریتم امضای متقارن هست. در رمزنگاری متقارن، هم برای امضا و هم برای تأیید توکن از یک کلید استفاده میشه که بهش private key میگیم ( تعریف الگوریتم متقارن ) .

الگوریتم ‏RS256 چیست؟

‏RS256، یک الگوریتم امضای نامتقارن هست. برخلاف HS256، از یک جفت کلید استفاده میکنه ، یک private key برای امضای توکن و یک public key مربوطه برای تأیید اون( تعریف الگوریتم نامتقارن ) .این امر RS256 را برای سناریوهایی که طرف‌های امضا و تأیید موجودیت‌های متفاوتی هستن، مانند سیستم‌های توزیع‌شده یا زمانی که توکن‌ها در سرویس‌های مختلف به اشتراک گذاشته میشه، ایمن‌تر میکنه.

برای استفاده از private key و public key داریم:

// sign token with private key
jwt.sign(payload, prvkey, {
expiresIn: exp,
algorithm: 'RS256',
});

// verify token with public key
jwt.verify(token, pubkey, { algorithms: ['RS256'] })

#jwt
👏2
💭HSTS چیه .

🔥 هدف: HSTS برای محافظت از وب‌سایت‌ها در برابر حملات MITM(man-in-the-middle)
طراحی شده است، مانند حملات کاهش پروتکل و سرقت cookie. با اجباری کردن استفاده از HTTPS، اطمینان حاصل می‌کند که تمام ارتباطات بین browser و server رمزگذاری شده است.( ssl handshake)

زمانی که یک مرورگر هدر HSTS را از یک server دریافت می‌کند، این دستور را برای یک دوره مشخص (که با دستور max-age تعیین می‌شود) به خاطر می‌سپارد. در این مدت، اگر کاربر سعی کند به سایت از طریق HTTP دسترسی پیدا کند، مرورگر به‌طور خودکار درخواست را به HTTPS تبدیل می‌کند.


Strict-Transport-Security: max-age=31536000; includeSubDomains ;preload

- max-age
زمان (به ثانیه) را مشخص
می‌کند که مرورگر باید به یاد داشته باشد که HTTPS را اجباری کند.

- includeSubDomains نشان می‌دهد که HSTS باید به تمام زیر دامنه‌های سایت نیز
اعمال شود.

- preload
میگه که کاربر حتی اگر قبلا هم با HTTPS وارد نشده بود
باید HSTS رخ بده و HTTP رو تبدیل کنه به HTTPS .

برای استفاده از HSTS باید در وب سرور خود ذخیره کنیم :



<VirtualHost *:443>
ServerName yourdomain.com

SSLEngine on
SSLCertificateFile /path/to/yourdomain.crt
SSLCertificateKeyFile /path/to/yourdomain.key

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

</VirtualHost>




خب حالا یه نکته ای که هست باید قبل از استفاده از HSTS گواهی ssl وب سرور امضا شده باشد :

1. انتخاب نوع گواهی SSL

قبل از هر چیز، باید نوع گواهی SSL مورد نیاز خود را انتخاب کنید. انواع رایج گواهی‌ها عبارتند از:

- DV (Domain Validation): تأیید هویت دامنه. سریع‌ترین و ارزان‌ترین نوع گواهی.
- OV (Organization Validation): تأیید هویت سازمان. نیاز به تأیید هویت سازمان دارد.
- EV (Extended Validation): تأیید هویت گسترده. بالاترین سطح تأیید هویت و امنیت.

2. انتخاب یک مرکز صدور گواهی (CA)

مرکز صدور گواهی (CA) را انتخاب کنید. برخی از گزینه‌های رایج شامل:

- Let's Encrypt (رایگان)
- DigiCert
- Comodo
- GlobalSign

3. ایجاد یک درخواست گواهی (CSR)

برای دریافت گواهی SSL، باید یک درخواست گواهی (CSR) ایجاد کنید. این کار معمولاً از طریق وب سرور انجام می‌شود. مراحل ایجاد CSR :
openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key

اطلاعات مورد نیاز را وارد کنید (مانند نام دامنه، نام سازمان و غیره).

4.ارسال CSR به CA

پس از ایجاد CSR، آن را به مرکز صدور گواهی ارسال کنید. این کار معمولاً از طریق وب‌سایت CA انجام می‌شود. شما باید اطلاعات مربوط به دامنه و سازمان خود را نیز ارائه دهید.

5.تأیید هویت

CA هویت شما و دامنه‌تان را تأیید می‌کند. این فرآیند ممکن است شامل ارسال ایمیل به آدرس‌های ثبت شده دامنه یا تأیید اطلاعات سازمان باشد.

6. دریافت گواهی SSL

پس از تأیید هویت، CA گواهی SSL را صادر می‌کند و آن را به شما ارسال می‌کند. این گواهی معمولاً شامل یک فایل با پسوند .crt است.

نصب گواهی :

<VirtualHost *:443>
ServerName yourdomain.com

SSLEngine on
SSLCertificateFile /path/to/yourdomain.crt
SSLCertificateKeyFile /path/to/yourdomain.key


</VirtualHost>

#HSTS
💭ورژن های HTTP :

🔥پروتکل HTTP یکی از اصلی‌ترین پروتکل‌های وب است که برای انتقال داده‌ها بین مرورگر و سرور استفاده می‌شود.
این پروتکل چندین نسخه دارد که هر یک از آنها با بهبودها و تغییراتی همراه بوده‌اند. تفاوت‌های کلیدی میان این نسخه‌ها را می‌توان در عملکرد، امنیت و کارایی مشاهده کرد. در ادامه، به تفاوت‌ نسخه‌های مختلف آن می‌پردازیم:

ورژن HTTP/0.9
این نسخه ابتدایی پروتکل HTTP است که در سال 1991 توسعه داده شد.
فقط از درخواست‌های GET پشتیبانی می‌کرد.
هدرهای HTTP (مانند نوع محتوا، طول محتوا و ...) را نداشت؛ بنابراین تنها قابلیت ارسال فایل‌های HTML داشت.
پاسخ‌ها فقط شامل بدنه بودند، یعنی هیچ اطلاعات اضافی مانند نوع یا طول محتوا ارسال نمی‌شد.
به دلیل نبود پشتیبانی از هدرها و انواع درخواست‌های دیگر، بسیار محدود بود و کاربری‌های پیچیده‌تر را پشتیبانی نمی‌کرد.

ورژن HTTP/1.0 (سال 1996)
هدرهای HTTP معرفی شد که امکان ارسال اطلاعات بیشتر درباره درخواست‌ها و پاسخ‌ها را فراهم می‌کرد.
از روش‌های متعدد HTTP مانند GET، POST و HEAD پشتیبانی می‌کرد.
قابلیت مشخص کردن نوع و طول محتوا (Content-Type و Content-Length) به پاسخ‌ها افزوده شد.
از اتصال غیرفعال (non-persistent connection) استفاده می‌کرد؛ به این معنا که پس از ارسال هر درخواست و دریافت پاسخ، اتصال بسته می‌شد. این موضوع باعث افزایش زمان تاخیر می‌شد، چون برای هر درخواست یک اتصال جدید ایجاد می‌شد.

ورژنHTTP/1.1 (سال 1997)
ارتباط مداوم (persistent connection) معرفی شد، که اجازه می‌دهد یک اتصال بین کلاینت و سرور برای چندین درخواست باز بماند، و این موضوع به شدت کارایی شبکه را افزایش داد.
پایپ‌لاینینگ (pipelining) معرفی شد، که به مرورگر اجازه می‌دهد چندین درخواست را بدون انتظار برای پاسخ درخواست قبلی ارسال کند.
بهبودهای مربوط به کشینگ (caching) ارائه شد تا کارایی بارگذاری صفحات بیشتر شود.
پشتیبانی از چندین میزبان در یک سرور (از طریق هدر Host)، که برای میزبانی مجازی چندین دامنه روی یک آدرس IP ضروری بود.
پشتیبانی از فشرده‌سازی و رمزگذاری محتوا (مثل Gzip و Chunked Transfer Encoding) برای کاهش حجم انتقال داده‌ها و افزایش سرعت.


ورژن HTTP/2 (سال 2015)
قابلیت چندپخشی (multiplexing): چندین درخواست و پاسخ می‌توانند هم‌زمان از طریق یک اتصال TCP منتقل شوند. این باعث کاهش تاخیر شبکه می‌شود.
استفاده از فریم‌های باینری به جای متن خالص: این تغییر باعث می‌شود داده‌ها سریع‌تر و بهینه‌تر ارسال شوند.
اولویت‌بندی درخواست‌ها: کلاینت‌ها می‌توانند اولویت ارسال درخواست‌ها را تعیین کنند تا منابع مهم‌تر زودتر بارگذاری شوند.
فشرده‌سازی هدرها (HPACK): این قابلیت به منظور کاهش حجم هدرهای HTTP و در نتیجه افزایش کارایی معرفی شد.
بهبود امنیت: HTTP/2 عمدتاً با TLS (نسخه امن پروتکل) استفاده می‌شود، که این باعث افزایش امنیت ارتباطات می‌شود.

ورژن HTTP/3 (نسخه نهایی در سال 2022)
مهم‌ترین تغییر در HTTP/3 استفاده از پروتکل QUIC به جای TCP است. QUIC یک پروتکل لایه انتقال جدید است که با هدف کاهش تاخیر و بهبود کارایی، به‌ویژه در شرایط شبکه‌های ناپایدار (مانند اتصالات موبایل) طراحی شده است.
اتصال سریع‌تر: QUIC از UDP استفاده می‌کند که در مقایسه با TCP نیاز به تایید اتصال اولیه کمتری دارد، بنابراین زمان تاخیر اولیه (RTT) کاهش می‌یابد.
پشتیبانی بهتر از چندپخشی (multiplexing): در HTTP/2 اگر یک بسته گم شود، همه جریان‌ها باید منتظر بازیابی آن بسته بمانند، اما در HTTP/3 هر جریان به صورت مستقل عمل می‌کند.
امنیت پیش‌فرض: QUIC با TLS نسخه 1.3 یکپارچه شده است، بنابراین از ابتدا از رمزنگاری قوی برای ارتباطات استفاده می‌کند.

#HTTP