دیوار آتشین لینوکس (Iptables) چیست؟
Iptables یک نرمافزار فایروال برای سیستمعاملهای لینوکس است که به شما این امکان را میدهد تا سرورها و VPS های خود را فعال کنید. iptables یک برنامه فایروال است که برای سیستمعاملهای لینوکس توسعه داده شده است. این برنامه از طریق تعیین قوانین و سیاستهای امنیتی، کنترل ترافیک شبکه را بر روی سیستم انجام میدهد.
دیوار آتشین لینوکس (Iptables) چگونه کار میکند؟
کارکرد iptables بر اساس تحلیل و پردازش بستههای شبکه است. وقتی یک بسته شبکه وارد سیستم میشود یا از سیستم خارج میشود، iptables قوانین تعریف شده را بر روی آن بسته اعمال میکند.
قوانین iptables میتوانند شرایط مختلفی را بر اساس منبع، مقصد، پورتها، پروتکلها و ویژگیهای دیگر بستهها بررسی کنند و بر اساس آنها تصمیمگیری کنند که بسته باید مورد پذیرش، رد یا اقدامات دیگر قرار گیرد.
به طور کلی، iptables به شما امکان میدهد تا:
- فیلتر کردن بستهها: میتوانید بر اساس آدرس منبع و مقصد، پورتها، پروتکلها و ویژگیهای دیگر، بستههای ورودی و خروجی را فیلتر کنید و متناسب با سیاست امنیتی خود اقدام کنید.
- ایجاد قوانین NAT (Network Address Translation): با استفاده از iptables میتوانید قوانین NAT را تعریف کنید تا آدرسها و پورتهای منبع و مقصد بستهها را تغییر دهید و بستهها را بین شبکهها رد و انتقال دهید.
- ایجاد قوانین مسدودسازی (Firewall): میتوانید بر اساس الگوها، آدرسهای IP، پورتها و ویژگیهای دیگر، بستههای مشکوک را مسدود کنید و از نفوذ آنها جلوگیری کنید.
توجه داشته باشید که تنظیمات iptables باید به دقت و با دانش کافی انجام شود، زیرا عدم توجه
عملیات فیلتر کردن پکت
عملیات فیلتر کردن بستهها توسط iptables بر اساس چهار مفهوم اصلی انجام میشود. این چهار مفهوم عبارتند از:
زنجیرهها (Chains): در iptables، بستهها از طریق زنجیرهها عبور میکنند. زنجیرهها مجموعهای از قوانین هستند که به ترتیب اعمال میشوند. در iptables، چهار زنجیره اصلی وجود دارد:
- INPUT: برای بستههای ورودی (Incoming packets)
- OUTPUT: برای بستههای خروجی (Outgoing packets)
- FORWARD: برای بستههایی که باید از سیستم به سمت دیگری هدایت شوند (Forwarded packets)
- PREROUTING: برای بستههایی که در مرحله قبل از مسیریابی (routing) هستند
قوانین (Rules): برای هر زنجیره، شما میتوانید قوانین مختلفی تعریف کنید. قوانین شامل شرایطی هستند که بستهها باید برآنها تطابق داشته باشند تا عملیات مشخصی اعمال شود. هر قانون میتواند شرایطی مانند آدرس IP، پورتها، پروتکلها و ویژگیهای دیگر بستهها را مشخص کند و اقداماتی مانند رد یا پذیرش بسته را تعیین کند.
جداول (Tables): جداول در iptables محفظههایی هستند که قوانین در آنها قرار میگیرند. سه جدول اصلی iptables عبارتند از:
Filter: برای فیلتر کردن بستهها و تصمیمگیری درباره پذیرش یا رد بستهها استفاده میشود.
NAT: برای تغییر آدرس و پورتهای منبع و مقصد بستهها و انجام عملیات Network Address Translation (NAT) استفاده میشود.
Mangle: برای تغییر سربرگها (Header) و ویژگیهای دیگر بستهها استفاده میشود.
هدف (Target): هدف در iptables نشان میدهد که بسته باید چه کاری انجام دهد پس از تطابق با یک قانون. میتواند عملیاتی مانند پذیرش بسته، رد بسته، انتقال بسته به زنجیره دیگر یا انجام عملیات NAT باشد.
با استفاده از این چهار مفهوم، شما میتوانید قوانین خود را برای فیلتر کردن بستهها بر اساس معیارهای مختلفی مانند آدرس IP، پورتهها، پروتکلها و ویژگیهای دیگر تعریف کنید و عملکرد مورد نظر را برای بستهها تعیین کنید.
چگونه میتوانم قوانین iptables را تعریف کنم و بستهها را بر اساس آنها فیلتر کنم؟
برای تعریف قوانین iptables و فیلتر کردن بستهها، شما میتوانید از دستورات iptables در ترمینال لینوکس استفاده کنید. در زیر، یک روند ساده برای تعریف قوانین و فیلتر کردن بستهها با استفاده از iptables آورده شده است:
مطمئن شوید که دسترسی ادمین (sudo) را دارید، زیرا برای تغییرات در تنظیمات iptables نیاز است. ابتدا میتوانید قوانین موجود را بررسی کنید با استفاده از دستور:
sudo iptables -L
برای ایجاد یک قانون جدید، از دستور زیر استفاده کنید:
sudo iptables -A [CHAIN] [OPTIONS] -j [TARGET]
- [CHAIN]: نام زنجیرهای که قانون در آن قرار میگیرد (مانند INPUT، OUTPUT یا FORWARD).
- [OPTIONS]: شرایطی که بسته باید بر آنها تطابق داشته باشد (مانند آدرس منبع و مقصد، پورتها و پروتکلها).
- [TARGET]: عملیاتی که بسته باید پس از تطابق با قانون انجام دهد (مانند ACCEPT، DROP یا REJECT). برای مثال، این دستور یک قانون ساده را برای رد کردن بستههای ورودی با آدرس منبع ۱۹۲.۱۶۸.۱.۱۰ تعریف میکند:
sudo iptables -A INPUT -s 192.168.1.10 -j DROP
بعد از تعریف قوانین، بستهها بر اساس قوانین فیلتر میشوند. برای ذخیره تغییرات و فعال کردن قوانین، از دستور زیر استفاده کنید:
sudo iptables-save
حتماً برای اطمینان از اعمال قوانین، بهتر است آنها را تست کنید. برای این کار، میتوانید یک بسته تست از منبع مورد نظر به سمت سیستم خود ارسال کنید و بررسی کنید که آیا قانون مورد نظر به درستی اعمال میشود یا خیر.
مهم است که دقت کنید که قوانین iptables به ترتیب اعمال میشوند و اولین قانونی که با بسته تطابق میکند، اعمال میشود. بنابراین، ترتیب قوانین در زنجیرهها بسیار مهم است. همچنین، در صورت نیاز به حذف یا تغییر قوانین، میتوانید از دستورات iptables -D
و iptables -R
استفاده کنید.
توجه داشته باشید که iptables برای مدیریت پیشرفتهتر شبکه و فایروال، میتوجه داشته باشید که iptables برای مدیریت پیشرفتهتر شبکه و فایروال، میتواند پیچیده باشد و نیاز به دانش بیشتری دارد. قبل از اعمال تغییرات، بهتر است با مستندات مربوطه آشنا شده و توجه کنید که تغییرات شما چگونه تأثیری بر روی سیستم و شبکه خواهد داشت. همچنین، ممکن است نیاز به دسترسی ادمین (sudo) و یا استفاده از ابزارهای مدیریت شبکه مانند firewalld یا ufw داشته باشید که سطح سختی کمتری دارند.
آشنایی کامل با جدول ها در iptables
در iptables، جداول (tables) برای دستهبندی قوانین و عملیاتهای فایروال استفاده میشوند. هر جدول شامل یک مجموعه از زنجیرهها (chains) است و هر زنجیره شامل قوانین است. iptables شامل چهار جدول اصلی است که عبارتند از:
جدول filter
: این جدول برای کنترل دسترسی بستهها و فیلتر کردن آنها استفاده میشود. برخی از زنجیرههای مهم در این جدول عبارتند از:
INPUT
: بررسی بستههای ورودی به سیستم.OUTPUT
: بررسی بستههای خروجی از سیستم.FORWARD
: بررسی بستههایی که از یک رابط به رابط دیگر هدایت میشوند.
جدول nat
: این جدول برای تغییر آدرسها و پورتها در بستهها استفاده میشود، به عنوان مثال برای NAT (Network Address Translation). زنجیرههای مهم در این جدول عبارتند از:
PREROUTING
: تغییر آدرس و پورت در بستهها قبل از روت کردن آنها.POSTROUTING
: تغییر آدرس و پورت در بستهها پس از روت کردن آنها.OUTPUT
: تغییر آدرس و پورت در بستههای خروجی از سیستم.
جدول mangle
: این جدول برای تغییر برخی از سرآیندهای بستهها مانند TTL (Time To Live) استفاده میشود. زنجیرههای مهم در این جدول عبارتند از:
PREROUTING
: تغییر سرآیندها قبل از روت کردن بستهها.OUTPUT
: تغییر سرآیندها در بستههای خروجی از سیستم.
جدول raw
: این جدول برای تنظیمات خاصی مانند تغییرات در TTL بستهها یا تغییرات در مارکها (marking) استفاده میشود.
همچنین، iptables شامل جداول دیگری نیز است که به صورت پیشفرض فعال نیستند و برای استفادههای خاص مورد استفاده قرار میگیرند. برخی از این جداول عبارتند از:
- جدول
security
: برای استفاده در مدیریت SELinux. - جدول
raw
: برای تنظیمات خاصی مانند تغییرات در TTL بستهها یا تغییرات در مارکها (marking). - جدول
nat
: برای استفاده در موارد خاص NAT. - جدول
mangle
: برای تغییر سرآیندها و برخی اطلاعات بستهها.
برای مشاهده قجداول موجود در iptables و زنجیرههای مربوط به هر جدول، میتوانید از دستور iptables -L
استفاده کنید. برای مشاهده جدول و زنجیرههای خاصی میتوانید از پارامترهای مختلف استفاده کنید. به عنوان مثال:
برای مشاهده زنجیرههای جدول filter
:
sudo iptables -L -t filter
– برای مشاهده زنجیرههای جدول `nat`:
sudo iptables -L -t nat
– برای مشاهده زنجیرههای جدول `mangle`:
sudo iptables -L -t mangle
– برای مشاهده زنجیرههای جدول `raw`:
sudo iptables -L -t raw
لازم به ذکر است که جداول و زنجیرههایی که در iptables وجود دارند، ممکن است بسته به نصب و پیکربندی سیستم شما متفاوت باشند.
اهداف (target) در iptables
هدفهای اصلی در استفاده از iptables عبارتند از:
- فیلتر کردن بستهها (Packet Filtering): یکی از استفادههای اصلی iptables، فیلتر کردن بستهها است. با استفاده از قوانین موجود در جداول و زنجیرهها، میتوانید بستههایی را که وارد سیستم میشوند یا از سیستم خارج میشوند، بر اساس معیارهایی مانند آدرس منبع و مقصد، پورتها، پروتکلها و وضعیت اتصال (connection state) فیلتر کنید. این امر به شما اجازه میدهد تا بستههای مشکوک یا ناخواسته را مسدود کنید و ترافیک مورد نظر خود را تنظیم کنید.
- تغییر آدرس و پورت (Network Address Translation – NAT): iptables از NAT برای تغییر آدرس و پورت بستهها استفاده میکند. با استفاده از جداول و زنجیرههای مربوط، میتوانید آدرسها و پورتها را در بستهها تغییر دهید. این عملیات مفید است در مواردی مانند اشتراک اینترنت (Internet Sharing)، توزیع بار (Load Balancing) و نهانسازی آدرس IP (IP Address Masquerading).
- تغییر مشخصات بستهها (Packet Manipulation): با استفاده از iptables، میتوانید مشخصات بستهها مانند سرآیندها (header) و سایر فیلدهای بستهها را تغییر دهید. این امر برای تنظیمات خاصی مانند تغییر در TTL بستهها، تغییر در مارکها (marking) و تنظیمات دیگر مورد استفاده قرار میگیرد.
- ایجاد قوانین امنیتی (Security Rules): با استفاده از iptables، میتوانید قوانین امنیتی خود را تعریف کنید و ترافیک غیرمجاز را مسدود کنید. این شامل جلوگیری از حملات DDoS، تنظیم سطح دسترسی برای سرورها و ایجاد تحریمها (blacklist) است.
- آتشسوزی (Firewalling): iptables به عنوان یک نرمافزار آتشسوزی (firewall) مورد استفاده قرار میگیرد. با استفاده از iptables، میتوانید ترافیک شبکه را کنترل کنید و از سیستم خود را در برابر حملات و نفوذهای احتمالی محافظت کنید.
مهمترین هدف در استفاده از iptables، تنظیم و کنترل ترافیک شبکه است. با استفاده از جداول، زنجیرههای iptables و قوانین مربوطه، میتوانید ترافیک شبکه را به دلخواه خود شخصیسازی کنید و امنیت و کارایی سیستم خود را بهبود بخشید.
آموزش کامل نصب iptables در لینوکس
نصب iptables بستگی به سیستم عاملی دارد که بر روی آن نصب میکنید. در زیر، روشهای نصب iptables برای دو سیستم عامل رایج را توضیح میدهم:
برای سیستمعاملهای مبتنی بر Debian (مانند Debian و Ubuntu):
- با استفاده از ابزار مدیریت پکیج مانند apt-get، مطمئن شوید که سیستم شما بروزرسانی شده است:
sudo apt-get update
sudo apt-get upgrade
- نصب بسته iptables:
sudo apt-get install iptables
حالا iptables بر روی سیستم شما نصب شده است و میتوانید از آن استفاده کنید.
برای سیستمعاملهای مبتنی بر Red Hat (مانند CentOS و Fedora):
- نصب بسته iptables با استفاده از ابزار مدیریت پکیج مانند yum:
sudo yum install iptables
- پس از نصب، میتوانید از iptables استفاده کنید.
لطفاً توجه داشته باشید که برای تنظیمات پیشرفته iptables و مدیریت آن به صورت مستقیم، نیاز به دانش و تجربه بیشتری در زمینه شبکه و تنظیمات سیستم عامل دارید. در ادامه چند مثال و آموزش کاربردی iptables را به شما آموزش خواهیم داد.
مسدود کردن IP ها با استفاده از iptables
برای مسدود کردن یک IP خاص با استفاده از iptables، میتوانید از دستورات زیر استفاده کنید:
- افزودن قاعده برای مسدود کردن IP:
sudo iptables -A INPUT -s -j DROP
در این دستور، <IP_Address>
باید با آدرس IP مورد نظر جایگزین شود. مثلاً اگر میخواهید آدرس IP 192.168.1.100 را مسدود کنید، دستور به صورت زیر خواهد بود:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
- ذخیره تغییرات:
sudo iptables-save
با اجرای این دستور، تغییرات اعمال شده در قوانین iptables ذخیره خواهند شد.
بعد از اعمال این تنظیمات، ترافیک از آدرس IP مورد نظر مسدود خواهد شد و بستههایی که از این IP آمدهاند، حذف خواهند شد.
برای بررسی قوانین iptables و مشاهده آدرسهای IP مسدود شده، میتوانید از دستور زیر استفاده کنید:
sudo iptables -L
این دستور لیستی از قوانین iptables را نشان میدهد که بر اساس آنها ترافیک مسدود شده است.
فعال سازی اتصال با پورت های HTTP و SSH و SSL
برای فعال کردن اتصال با پورتهای HTTP (پورت ۸۰)، SSH (پورت ۲۲) و SSL (پورت ۴۴۳) در iptables، میتوانید به روش زیر عمل کنید:
- اجازه دسترسی به پورت HTTP (پورت ۸۰):
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- اجازه دسترسی به پورت SSH (پورت ۲۲):
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- اجازه دسترسی به پورت SSL (پورت ۴۴۳):
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
در این مثال، قاعدههای جدید به زنجیره INPUT اضافه میشوند و ترافیکی که به مقصد پورتهای مشخص شده میرسد، مجاز خواهد بود. این قوانین را میتوانید بر اساس نیازهای خود تغییر دهید یا آنها را به سیستم خود اضافه کنید.
بعد از اعمال تغییرات، مطمئن شوید که قوانین جدید به iptables اعمال شدهاند و ترافیک از این پورتها به درستی مسموح است.
آموزش فعال کردن ترافیک در Localhost
اگر میخواهید ترافیک بین برنامههایی که بر روی همان دستگاه اجرا میشوند (مانند برنامههایی که بر روی localhost یا ۱۲۷.۰.۰.۱ اجرا میشوند) را فعال کنید، نیازی به تنظیمات خاصی در iptables ندارید. این ترافیک به طور پیش فرض به صورت محلی (local) و بدون هیچگونه محدودیتی انجام میشود.
بنابراین، شما بدون نیاز به تغییر در iptables، قادر به استفاده از ترافیک محلی بر روی localhost خواهید بود. میتوانید برنامههایی که به طور محلی اجرا میشوند و از ترافیک localhost استفاده میکنند، بدون هیچ محدودیتی اجرا کنید.
حذف، جا به جایی و جایگزین قوانین
برای حذف، جا به جایی و جایگزینی قوانین iptables، میتوانید از دستورات زیر استفاده کنید:
حذف یک قانون خاص بر اساس شماره خط:
sudo iptables -D
در این دستور، <chain>
باید زنجیره مربوطه (مانند INPUT، OUTPUT یا FORWARD) را نشان دهد و <rule_number>
شماره خط قانون مورد نظر را مشخص میکند. برای مثال:
sudo iptables -D INPUT 3
این دستور قانونی که در زنجیره INPUT با شماره خط ۳ قرار دارد را حذف خواهد کرد.
جا به جایی یک قانون در زنجیره:
sudo iptables -R
در این دستور، <chain>
نام زنجیره (مانند INPUT، OUTPUT یا FORWARD) است. <rule_number>
شماره خط قانون مورد نظر در زنجیره را نشان میدهد و <new_rule>
قانون جدیدی است که جایگزین قانون موجود خواهد شد. برای مثال:
sudo iptables -R INPUT 3 -s 192.168.1.100 -j DROP
این دستور، قانونی که در زنجیره INPUT با شماره خط ۳ قرار دارد را با یک قانون جدید (مسدود کردن IP 192.168.1.100) جایگزین میکند.
- جایگزینی یک قانون با قانون جدید:
sudo iptables -R
در این دستور، <chain>
نام زنجیره (مانند INPUT، OUTPUT یا FORWARD) است. <rule_number>
شماره خط قانون مورد نظر در زنجیره را نشان میدهد و <new_rule>
قانون جدیدی است که به جایگزینی قانون موجود استفاده میشود. برای مثال:
sudo iptables -R INPUT 3 -s 192.168.1.100 -j ACCEPT
این دستور، قانونی که در زنجیره INPUT با شماره خط ۳ قرار دارد را با یک قانون جدید (مجاز کردن IP 192.168.1.100) جایگزین میکند.
توجه داشته باشید که شماره خط قوانین در زنجیره ممکن است با تغییرات قبلی تغییر کند. بنابراین، قبل از انجام هر تغییری، بهتر است لیست قوانین را با استفاده از دستور sudo iptables -L
بررسی کنید تا شمارههای خطوط را به درستی مشخص کنید.
جمع بندی:
iptables یک ابزار قدرتمند برای مدیریت فایروال در سیستمهای لینوکس است. با استفاده از iptables، میتوانید ترافیک شبکه را کنترل کنید، قوانین امنیتی را پیکربندی کنید و مسدودسازی آدرسهای IP خطرناک را انجام دهید.
در ادامه، روش مسدود کردن آدرس IPهای خاص را بررسی کردیم. با استفاده از دستور sudo iptables -A INPUT -s <IP_Address> -j DROP
، میتوانیم یک IP را به لیست مسدود شده اضافه کرده و از دسترسی آن به سیستم جلوگیری کنیم.
در نهایت، با بررسی روشهای حذف، جا به جایی و جایگزینی قوانین iptables آشنا شدیم. این قابلیتها به شما امکان میدهند تا قوانین iptables را به راحتی تغییر دهید، قوانین را حذف کنید و قوانین جدید را اضافه یا جایگزین کنید.
با استفاده از iptables، میتوانید شبکه خود را امنتر کنید و کنترل بیشتری بر ترافیک شبکه خود داشته باشید. امیدوارم این مطلب مفید واقع شده باشد و به درک و استفاده بهتر از iptables کمک کند.