در اینجا توضیح کاملی از ابزارهای مدیریت فایروال **iptables** و **UFW** ارائه می‌دهم. این آموزش شامل مفاهیم پایه، دستورات پرکاربرد، و نکات پیشرفته است. --- ## **فصل اول: آشنایی با iptables** ### 1. iptables چیست؟ **iptables** یک ابزار خط فرمان برای مدیریت قوانین فایروال در سیستم‌های لینوکسی است که از فیلترینگ بسته‌ها در سطح کرنل استفاده می‌کند. این ابزار به شما امکان می‌دهد ترافیک ورودی، خروجی، و عبوری از سیستم را کنترل کنید. ### 2. نصب iptables در اکثر توزیع‌های لینوکس، iptables به صورت پیش‌فرض نصب است. اما برای اطمینان می‌توانید از دستور زیر استفاده کنید: ```bash sudo apt install iptables # برای Debian/Ubuntu sudo yum install iptables # برای CentOS/RHEL ``` ### 3. ساختار کلی قوانین iptables قوانین در iptables در قالب جداول (Tables) و زنجیره‌ها (Chains) مدیریت می‌شوند: - **Tables**: شامل **filter**, **nat**, **mangle**, و **raw**. - **Chains**: شامل **INPUT**, **OUTPUT**, **FORWARD** (و موارد دیگر برای زنجیره‌های سفارشی). ### 4. دستورات پایه - نمایش قوانین فعلی: ```bash sudo iptables -L -v -n ``` - اضافه کردن قانون: ```bash sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT ``` - حذف قانون: ```bash sudo iptables -D INPUT 1 ``` - ذخیره قوانین: ```bash sudo iptables-save > /etc/iptables/rules.v4 ``` - بازنشانی قوانین: ```bash sudo iptables -F ``` --- ## **فصل دوم: آشنایی با UFW** ### 1. UFW چیست؟ **UFW (Uncomplicated Firewall)** یک ابزار ساده برای مدیریت فایروال در سیستم‌های لینوکس است. این ابزار به خصوص برای کاربرانی که با iptables آشنا نیستند طراحی شده است. ### 2. نصب UFW اگر UFW نصب نیست، می‌توانید آن را نصب کنید: ```bash sudo apt install ufw ``` ### 3. فعال‌سازی و غیرفعال‌سازی - فعال کردن UFW: ```bash sudo ufw enable ``` - غیرفعال کردن: ```bash sudo ufw disable ``` - بررسی وضعیت: ```bash sudo ufw status ``` ### 4. اضافه کردن قوانین - مجاز کردن یک پورت: ```bash sudo ufw allow 22 # فعال کردن SSH sudo ufw allow 80 # فعال کردن HTTP sudo ufw allow 443 # فعال کردن HTTPS ``` - مسدود کردن یک پورت: ```bash sudo ufw deny 8080 ``` - مجاز کردن محدوده آدرس IP: ```bash sudo ufw allow from 192.168.1.0/24 ``` ### 5. حذف قوانین - حذف یک قانون: ```bash sudo ufw delete allow 22 ``` --- ## **فصل سوم: مقایسه و انتخاب ابزار** | ویژگی | **iptables** | **UFW** | |-------------|------------------------------------|----------------------------------------| | پیچیدگی | پیشرفته و پیچیده | ساده و کاربرپسند | | سفارشی‌سازی | امکان تنظیمات بسیار پیشرفته | مناسب برای تنظیمات ساده و معمول | | نصب | پیش‌فرض روی اکثر توزیع‌ها | نیاز به نصب در برخی سیستم‌ها | --- ## **فصل چهارم: سناریوهای عملی** ### 1. راه‌اندازی فایروال برای یک وب سرور **iptables**: ```bash sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -P INPUT DROP sudo iptables -P OUTPUT ACCEPT ``` **UFW**: ```bash sudo ufw allow 80 sudo ufw allow 443 sudo ufw allow 22 sudo ufw enable ``` ### 2. محدود کردن دسترسی به SSH فقط از یک IP خاص **iptables**: ```bash sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j DROP ``` **UFW**: ```bash sudo ufw allow from 192.168.1.100 to any port 22 sudo ufw deny 22 ``` --- اگر نیاز به توضیحات بیشتری در هر بخش دارید یا مثالی خاص مدنظر شماست، اطلاع دهید تا گسترش دهم. ### **مثال‌هایی برای نت‌ (NAT)** NAT (Network Address Translation) برای تغییر آدرس‌های IP یا پورت‌ها در ترافیک شبکه استفاده می‌شود. --- #### **1. SNAT (Source NAT): تغییر آدرس مبدا** این روش برای زمانی است که شما می‌خواهید آدرس IP داخلی را به آدرس IP عمومی ترجمه کنید، مثلاً برای دسترسی دستگاه‌های داخلی به اینترنت. ```bash sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.1 ``` - **`-t nat`**: استفاده از جدول NAT. - **`POSTROUTING`**: تغییر آدرس بعد از پردازش ترافیک. - **`--to-source 203.0.113.1`**: آدرس IP عمومی. --- #### **2. MASQUERADE: جایگزین SNAT برای IP دینامیک** اگر سرور شما از IP پویا (Dynamic IP) استفاده می‌کند: ```bash sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ``` - **MASQUERADE**: به صورت خودکار آدرس IP خروجی را تنظیم می‌کند. --- #### **3. DNAT (Destination NAT): تغییر آدرس مقصد** برای زمانی که می‌خواهید ترافیک ورودی به یک آدرس عمومی را به یک آدرس داخلی هدایت کنید: ```bash sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 ``` - **`PREROUTING`**: تغییر آدرس قبل از پردازش ترافیک. - **`--to-destination 192.168.1.100:80`**: هدایت به آدرس داخلی. --- ### **مثال‌هایی برای PREROUTING** **PREROUTING** برای تغییر آدرس مقصد (Destination) یا مدیریت ترافیک ورودی قبل از رسیدن به پردازش استفاده می‌شود. --- #### **1. تغییر آدرس مقصد برای وب‌سرور داخلی** این قانون تمامی درخواست‌های ورودی به پورت 8080 را به یک وب‌سرور داخلی با IP `192.168.1.200` هدایت می‌کند: ```bash sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.200:80 ``` --- #### **2. هدایت ترافیک به یک پروکسی سرور** اگر می‌خواهید تمام درخواست‌های HTTP به پورت 3128 (پروکسی) هدایت شوند: ```bash sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128 ``` --- #### **3. مسدود کردن ترافیک از یک آدرس خاص قبل از پردازش** تمام ترافیک ورودی از IP مشخص را مسدود کنید: ```bash sudo iptables -t nat -A PREROUTING -s 192.168.1.50 -j DROP ``` --- ### **مثال‌هایی برای ساخت لیست از آدرس‌های ورودی یا خروجی** لیست‌ها برای مدیریت ترافیک ورودی یا خروجی گروهی از IPها یا شبکه‌ها استفاده می‌شود. --- #### **1. ایجاد لیست سفید (Whitelist) برای ترافیک ورودی** اجازه دسترسی به پورت 22 فقط از IPهای مشخص: ```bash sudo ipset create whitelist hash:ip sudo ipset add whitelist 192.168.1.10 sudo ipset add whitelist 192.168.1.20 sudo iptables -A INPUT -m set --match-set whitelist src -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j DROP ``` - **`ipset create whitelist`**: ساخت لیست با نام `whitelist`. - **`--match-set whitelist`**: استفاده از لیست در قانون iptables. --- #### **2. مسدود کردن لیست سیاه (Blacklist)** مسدود کردن ترافیک از گروهی از IPها: ```bash sudo ipset create blacklist hash:ip sudo ipset add blacklist 203.0.113.5 sudo ipset add blacklist 203.0.113.6 sudo iptables -A INPUT -m set --match-set blacklist src -j DROP ``` --- #### **3. محدود کردن ترافیک خروجی به لیستی از دامنه‌ها** اگر می‌خواهید ترافیک خروجی فقط به گروهی از آدرس‌های IP مجاز باشد: ```bash sudo ipset create allowed_ips hash:ip sudo ipset add allowed_ips 8.8.8.8 # Google DNS sudo ipset add allowed_ips 1.1.1.1 # Cloudflare DNS sudo iptables -A OUTPUT -m set --match-set allowed_ips dst -j ACCEPT sudo iptables -A OUTPUT -j DROP ``` --- ### **نکات تکمیلی** - **ذخیره قوانین برای ماندگاری**: ```bash sudo iptables-save > /etc/iptables/rules.v4 ``` - **بررسی لیست ipset**: ```bash sudo ipset list ``` - **حذف آیتم از لیست**: ```bash sudo ipset del whitelist 192.168.1.10 ``` اگر نیاز به مثال‌های پیشرفته‌تر دارید یا سناریوی خاصی مدنظرتان است، اعلام کنید.