احتمالا تا الان اسم iptables به گوشتون خورده باشه این ابزار که توی اکثر سیستم عامل ها به صورت پیشفرض نصبه مسئولیت حفظ امنیت شبکه سیستم عامل رو بر عهده داره
البته توی نسخه های جدید ابزار nftables خودشو داره کم کم جایگزین iptables میکنه ولی امروز قراره راجب iptables صحبت کنیم چون هنوز که هنوزه بیشترین استفاده رو داره
مهم: توی سیستم های جدید تر دستورات iptables خودشون به دستورات nftables ترجمه میشن
از این ابزار میتونیم برای گزارش گیری، تغییر دادن، فوروارد کردن، ریدایرکت کردن و/یا محدود کردن (Drop) بسته های اطلاعاتی (Packet) استفاده کنیم. این ابزار در قالب یک سری دستور در محیط متنی لینوکس در اختیار ما قرار دارد
برای شروع دستور iptables –version رو میزنیم تا مطمین بشیم که دستورات iptables در دسترس هستن این دستور باید به شما نسخه iptables رو نشون بده
جدول ها
توی iptables پنج تا جدول داریم که میتونیم قوانین رو داخلشون بنویسیم
- Raw
- Filter
- NAT
- Mangle
- Security
RAW
از این جدول فقط برای پیکربندی بسته ها استفاده می شود تا از ردیابی اتصال معاف باشند
Filter
این جدول، جدول پیشفرضمونه که تمامی عملیات ها که معمولا هم به فایروال مربوط میشن اینجا قرار میگیرن
NAT
همونجوری که از اسمش مشخصه برای تنظیم NAT به کار میره و یکی از پر استفاده ترین کاربرهاش هم Port Forwading عه
Mangle
این بخش برای ایجاد تغییرات خیلی به خصوص استفاده میشه و خیلی کم بهش نیاز پیدا میکنید
Security
از این جدول برای “کنترل دسترسی اجباری” استفاده میشه (مثلا SELinux)
Chain ها
توی هر جدول یه سری Chain وجود داره که قوانین به ترتیب داخل اون ها قید میشن هر جدول Chain های مختص به خودش رو داره مثلا جدول filter که جدول پیشفرضه شامل Chain های INPUT، OUTPUT و FORWARD میشه. جدول NAT هم شامل Chain های PREROUTING و POSTROUTING و OUTPUT میشه.
به صورت پیشفرض توی Chain ها هیچ قانونی تنظیم نشده اما یه Policy پیشفرض داریم که باعث میشه که همه دسترسی ها باز باشه. و برای اینکه مشکلی توی تنظیم قوانین به وجود نیاد همیشه Policy پیشفرض به عنوان آخرین قانون تنظیم میشه
البته قابلیت تنظیم Chain های اختصاصی هم وجود داره
قوانین
فیلتر کردن بسته های شبکه بر پایه ی قوانین تعریف شده میباشد که هر قانون شامل یک یا چند شرط (برای اینکه یک قانون روی یک Packet اعمال شود تمامی شرط ها باید رعایت شده باشد) و هر قانون شامل یک هدف نیز میباشد (هدف به معنای آن است که چه اتفاقاتی بعد از رعایت شدن تمامی شرط ها بر روی آن بسته رخ دهد). معمولا برای شرط از این مقادیر استفاده میکنیم: درگاه شبکه ورودی (مثلا eth0)، نوع بسته و پورت مقصد
برای تعیین هدف برای یک قانون از آپشن -j یا –jump استفاده میکنیم و Chain هدف را تعیین میکنیم (میتواند Chain دستی یا Chain از پیش تعریف شده باشد) ولی خوب میتونید از target های پیشفرض هم استفاده کنید که شامل این ها میشن ACCEPT ، DROP، QUEUE و RETURN ولی خوب یه سری پکیج Extension روی iptables وجود داره که میتونه این ها رو گسترش بده
ثابت موندن تغییرات
برای ذخیره تغییرات از دستورات زیر استفاده میکنیم
iptables-save -f /etc/iptables/iptables.rules
با این دستور تغییرات ما ذخیره شده و برای برگرداندن آن میتوانید از دستور
iptables-restore /etc/iptables/iptables.rules
استفاده میکنیم
برای خودکار شدنش هم میتونید از systemd کمک بگیرید
دستورات
با این دستور
iptables -nvL
میتونیم قوانین تعریف شده رو ببینیم
موقع تعریف رول باید یکی از آپشن های
-D برای پاک کردن رول
-A برای اضافه کردن رول
و -R برای جا به جا کردن رول را حتما ست کنیم
مثلا با دستور زیر پورت 17500 رو میبندیم
iptables -A INPUT -p tcp --dport 17500 -j REJECT --reject-with icmp-port-unreachable
حالا اگه به جای -A از -D استفاده کنم میتونم رول تعریف شده رو پاک کنم
فقط حواستمون باید باشه موقع بستن دسترسی های مهم مثل ssh دسترسی خودمون رو اول باز کنیم و بعد دسترسی بقیه رو ببندیم چون رول ها به ترتیب اعمال میشن.
نظرات کاربران