اگر قسمت قبلی آموزش های کانفیگ سرور لینوکس ما را مطالعه کرده باشید، الان با بخش عظیمی از iptables آشنایی دارید، که حالا به قسمت ۸۸ رسیدیم. باید بدانید که به عنوان مدیر سرور که قصد انجام تنظیمات امنیتی با استفاده از دیوار آتش را دارید، باید استراتژی محافظت را با توجه به نیاز سرورتان بچینید و طبق آن عمل کنید. مثلاً گاهی از مواقع روی سرور اطلاعات بسیار حساسی دارید، که باید ابتدا کل دسترسی های وارد شوند (INPUT) و خارج شونده (OUTPUT) را مسدود کنید. حالا یکی یکی دسترسی های مدنظرتان را باز کنید. اما در حالت هایی غیر از این می توانید دسترسی های متعارف را باز نگه دارید. حالا روی عوامل تهدید زا محدودیت ایجاد کنید.
که در مقالۀ قبلی ما راجع به تنظیم رفتار پیش فرض حلقه های INPUT, OUTPUT و FORWARD در جدول filter به طور کامل بحث کردیم. در حالت عادی این حلقه ها دسترسی را باز می گذارند، که ما هم همین طور می خواهیم. ولی پورت (Port) ها بسته هستند. پورت ها با عددهای خاصی مشخص شدند که هر کدام از این پورت ها برای یک کاری در نظر گرفته شدند. مثلاً پورت ۸۰ برای سرویس httpd برای ارائۀ خدمات به بازدید کنندگان سایت باید حتماً باز گذاشته شود.
پس ما در این مرحله با خود دستور iptables
کار داریم که دستورهایی را به حلقه های مختلف جدول های iptables اضافه می کند. یا حتی با آن می توانید یک جدول جدید بسازیم و حلقه ها و دستورات آن را تنظیم کنیم. به طور پیش فرض دستورات iptables یا همان Rule ها در مسیر زیر در CentOS 6 ذخیره می شوند:
/etc/sysconfig/iptables /etc/sysconfig/ip6tables
برای ویرایش Rule ها پیشنهاد نمی شود که دستی این پرونده ها را ویرایش کنید. البته در نسخۀ ۷ CentOS این پرونده ها دیگر وجود ندارند! ولی همچنان پرونده های زیر برای پیکربندیِ iptables موجود هستند.
/etc/sysconfig/iptables-config /etc/sysconfig/ip6tables-config
ساختار کلی دستور iptables
ساختار کلی این دستور به صورت زیر است:
iptables [-t <table-name>] <command> <chain-name> \ <parameter-1> <option-1> \ <parameter-n> <option-n>
بعد از زدن دستور iptables باید با مشخصۀ t نام جدول را مشخص کنید که اگر این کار را نکنید، همان جدول پیش فرض که filter هست در نظر گرفته می شود. سپس <command> را می بینید که نوع عملی که باید انجام شود را باید به جای آن وارد کنید. مثلاً اگر قصد دارید یک Rule را اضافه یا حذف کنید یا یک جدول جدید بسازید باید در اینجا تعینش کنید. <chain-name> هم که نام حلقه است که قرار است دستور درون آن ایجاد گردد. در نهایت در انتهای دستور شما می توانید ترکیبی از پارامترها و مقدارهای آنها به صورت زوجی قرار گیرد.
پس اگر ما خواسته باشیم مثلاً یک خط از دستورات iptables را حذف کنیم، باید از ساختار زیر بهره ببریم:
iptables -D <chain-name> <line-number>
<line-number> شماره خط دستور مورد نظر است. دستورات در حلقه های جداول به صورت خط به خط قرار می گیرند.
مهم ترین دستورات iptables
حالا برای اینکه با دستورات iptables بیشتر آشنا شوید، با نمونه هایی از آن که کار خاصی را انجام می دهند در خدمت شما خواهیم بود.
مشاهدۀ وضعیت فعلیِ فایروال
در اولین گام شاید خواسته باشید ببینید که چه ruleهایی تا به اینجا تعیین شدند. پس از دستور iptables با مشخصۀ L استفاده کنید.
iptables -L
مشخصۀ n به جای عبارت از عدد استفاده می کند. مشخصۀ v هم به صورت توضیحی نتیجه را بر می گرداند.
iptables -n -L -v
حالا اگر خواسته باید وضعیت rule ها فقط برای حلقۀ INPUT یا OUTPUT را بررسی کنید، از دستورات زیر استفاده کنید.
iptables -L INPUT -n -v iptables -L OUTPUT -n -v --line-numbers
مسدود کردن دسترسی ورودی یک IP
دستور زیر یک نمونۀ کامل از عملکرد دستور iptables است. به A- دقت کنید که کارش افزودن یک rule به انتهای فهرست ruleها در جدول و حلقۀ مورد نظر است. حلقه هم که INPUT در نظر گرفته شده و چون نامی از جدول خاصی به میان نیامده است، پس منظور همان جدول پیش فرض filter است. مشخصۀ s آی پیِ مورد نظر را می گیرد و مشخصۀ j هدفی که مد نظر است را اجرایی می کند. مثلاً در نمونۀ زیر چنین دسترسی را DROP می کند. اما شما می توانید به جای آن از ACCEPT یا REJECT هم استفاده کنید که راجع به آنها در مقالۀ قبلی توضیحات کامل داده شد.
iptables -A INPUT -s 10.10.10.10 -j DROP
نکتۀ بسیار مهم : در مسدود کردن یا دادن دسترسی به یک IP یا سرویس باید به این نکته دقت داشته باشید که سرویس ها یا IP ها به صورت رفت و برگشتی بسته هایی را ارسال می کنند. پس اگر قصد دارید دسترسی یک سرویس را باز کنید، باید هم در حلقۀ INPUT و هم در حلقۀ OUTPUT این کار را انجام دهید. در غیر این صورت همچنان دسترسیِ آن سرویس بسته خواهد ماند.
تنظیم دسترسی به یک پورت خاص
همانطور که گفته شد، پورت ها درگاه های نرم افزاری برای ایجاد ارتباط با سرویس های متعدد است. مثلاً برای اتصال به سرور از طریق SSH حتماً باید پورت ۲۲ که درگاه پیش فرض سرویس SSH محسوب می شود، باز باشد. حالا شاید بعداً این درگاه را خودتان بنا به دلایل امنیتی تغییر دهید (تغییر پورت SSH)، که باز باید پورت جدید را توسط فایروال باز کنید. در غیر این صورت دسترسی به SSH وجود نخواهد داشت. این داستان برای هر نوع سرویس دیگر صدق می کند. پس ما با استفاده از دستور زیر می توانید پورتی را باز یا بسته کنیم.
iptables -A INPUT -p tcp --dport ssh -j DROP
در مشخصۀ dport باید شماره یا اسم پورت را وارد کنید. در مشخصۀ j هم باید کاری که صورت گیرد را تعیین نمایید.
همانطور که قبلاً هم گفته شد، برخی از پروتکل ها نیاز به دسترسیِ دو طرفه دارند. پروتکل SSH هم به همین صورت است. پس فراموش نکنید که دستور بالا برای باز کردن پورت SSH را هم برای حلقۀ INPUT بزنید و هم برای OUTPUT.
ذخیره کردن تغییرات
بعد از اینکه دستورات مورد نظر خود را وارد کردیم، حالا باید این تغییرات را ذخیره کنیم تا بار دیگری که سیستم را روشن می کنیم، این دستورات هم اعمال شوند. برای این کار اگر نسخۀ CentOS شما ۶ می باشد، از دستور زیر استفاده کنید:
service iptables save
اما اگر از CentOS 7 استفاده می کنید، به دلیل اینکه Firewalld جایگزین iptables شده است، اول از همه باید از همان دستورهای firewalld برای باز و بسته کردن و در نهایت پیکربندی دیوار آتش سرور لینوکس خود استفاده کنید. در ثانی پس از آن با استفاده از دستور زیر فایروال را راه اندازیِ مجدد نمایید تا تغییرات تثبیت شود. راجع به Firewalld در آموزش بعدی به طور کامل توضیحاتی ارائه خواهد شد.
firewall-cmd --reload
پاکسازی همۀ پیکربندی هایی که تا به الان انجام شده
اگر خواسته باشید تمامی تغییراتی که دادید به حالت اولیه برگردند، از دستور زیر استفاده کنید. دقت کنید در خیلی از مواقع بعد از زدن دستور زیر دسترسیِ شما و حتی دیگر کاربران به سرور قطع خواهد شد. پس با دقت از آن استفاده کنید.
iptables -F
stop / Start / Restart کردن iptables
این دستورات برای اجرا، توقف و راه اندازیِ مجدد iptables به مانند هر سرویس دیگری روی CentOS 6 کارایی دارند.
service iptables stop service iptables start service iptables restart
اما روی CentOS 7 باید از دستور systemctl استفاده کنیم. البته روی این نسخه از لینوکس هم اصلاً سرویس iptables ای وجود ندارد که خواسته باشیم از این دستور استفاده کنیم. مگر اینکه طبق آموزش بعدی Firewalld را حذف و iptables را نصب و فعال کنیم.
به این ترتیب ما توانستیم با کلیات دستور iptables برای مدیریت rule های مختلفی که درون حلقه ها از جداول مختلف iptables واقع می شدند، آشنا شویم و کار کنیم. همانطور که گفته شد هدف آموزش iptables مخصوص کسانی است که هنوز از نسخۀ ۶ CentOS استفاده می کنند. یا آنهایی که روی CentOS 7 سرویس های iptables را فعال کرده اند. به هر حال دانستن نحوۀ کار کردن با این دستور خالی از فایده نیست.
۰ دیدگاه