همه چیز درباره iptables در اوبونتو

iptables یک برنامه فایروال قدرتمند است که می توانید از آن برای امنیت سرور لینوکس و یا سرور مجازی  VPS استفاده کنید. شما می توانید بر اساس نیاز خود rule های مختلفی را تعریف کنید.

اگر به دنبال یک آموزش جامع درباره iptables هستید ، پیشنهاد می کنیم در ادامه همراه ما باشید. در این مقاله نحوه نصب و استفاده از iptables در سیستم اوبونتو را به شما آموزش خواهیم داد.

با یادگیری این ابزار فایروال لینوکس ، می توانید سرور مجازی لینوکس (Linux VPS) خود را از طریق کامند لاین سرور ایمن کنید.

در این آموزش نحوه نصب iptables و استفاده از ابزارهای آن را یاد خواهید گرفت.پس از این آموزش ، شما می توانید مجموعه ای rule های مورد نیاز خود را برای مدیریت و فیلتر کردن packet های ورودی و خروجی تعریف کنید.

همچنین این آموزش برای اوبونتو سرور 16.04 و نسخه های بالاتر می باشد، ما در این مقاله بر روی سرورمجازی اوبونتو 18.04 آموزش داده ایم.

iptables  چیست و چگونه کار می کند؟

به بیان ساده ، iptables یک برنامه فایروال برای لینوکس است. با استفاده از جدول های درون آن ، میزان ترافیک ورودی و خروجی سرور شما کنترل می شود. این جدول ها شامل مجموعه ای از قوانین (rule) است که به آن ها Chain گفته می شود ، که packet های داده ورودی و خروجی را فیلتر می کند.

هنگامی که یک packet با یک rule مطابقت دارد یکی از عملیات های از پیش تعیین شده بر روی آن پیاده سازی می شود:

Accept : اجازه عبور packet داده می شود.

Drop : اجازه عبور packet داده نمی شود.

Return : اجازه عبور packet داده نمی شود  و packet به Chain قبلی برگردانده می شود.

در این آموزش iptables قصد داریم با یکی از جداول پیش فرض به نام filter کار کنیم.

جدول filter از سه chain تشکیل شده است:

  INPUT: بسته های ورودی به سرور را کنترل می کند.

 FORWARD : بسته های ورودی را که به جایی دیگر ارسال می شوند فیلتر می کند.

 OUTPUT : بسته هایی را که از سرور شما خارج می شوند فیلتر می کند.

پیش از شروع آموزش ابتدا مطمئن شوید که دسترسی SSH root و یا دسترسی sudo به سرور مجازی اوبونتو دارید.

Rule های iptables تنها برای IPv4 اعمال می شود. اگر می خواهید برای پروتکل IPv6 تنظیم کنید می بایست از ip6tables استفاده کنید.

آموزش نصب و استفاده از iptables linux firewall

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

ابتدا نحوه نصب در سرور مجازی اوبونتو را آموزش خواهیم داد.

سپس در مرحله نحوه تعریف rule ها را آموزش خواهیم داد.

و در آخر به شما آموزش خواهیم داد که چگونه تغییرات و بروز رسانی های مورد نظر خود را اعمال کنید.

مرحله اول – نصب iptables

Iptables به صورت پیشفرض در بیشتر توزیع های لینوکس نصب می باشد.اما اگر در سرور شما به صورت پیشفرض نصب نمی باشد مراحل زیر را در ادامه انجام دهید:

ابتدا از طریق SSH به سرور خود متصل شوید برای این کار می توانید از نرم افزار putty استفاده نمایید.

سپس دستورات زیر را به ترتیب اجرا نمایید.

sudo apt-get update
sudo apt-get install iptables

سپس وضعیت پیکربندی فعلی iptables را با استفاده از دستور زیر بررسی نمایید:

sudo iptables -L -v

در این دستور –L برای لیست کردن همه rule ها و –V برای نمایش اطلاعات به صورت دقیق تر می باشد.

خروجی این دستور مشابه تصویر زیر می باشد .

دستور مشاهده لیست rule های iptables

اکنون فایروال لینوکس بر روی سرور شما نصب شده است. توجه داشته باشید که در این مرحله تمام rule ها روی ACCEPT تنظیم شده اند و هیچ policy اعمال نمی شود و در این شرایط سرور شما امن نیست زیرا هر packet می تواند بدون فیلتر وارد سرور شود.

پس در ادامه همراه ما باشید تا نحوه اعمال rule های فایروال را به شما آموزش دهیم.

مرحله دوم – تعریف Chain rule ها

برای تعریف rule جدید دستور زیر را وارد نمایید. قرار دادن A- بلافاصله بعد از iptables به معنای اضافه شدن این rule به chain می باشد.

i- (interfaces):اینترفیسی می باشد که می خواهید rule نوشته شده بر روی آن اعمال شود. مانند eth0 ، ppp0 و ….

البته می توانید همه پروتکل ها را برای رول خود انتخاب نمایید.

p- (interfaces): پروتکل شبکه می باشد که شما می خواهید عملیات فیلتر بر روی آن پروتکل اعمال شود. مانند پروتکل های  tcp ، udp ، icmp ، sctp و …..

s- (interfaces) : ادرس مبدا packet می باشد . میتوانید آدرس IP و یا hostname مبدا را وارد نمایید.

dport- (interfaces) : شماره پورت مقصد پروتکل می باشد .مانند 22 برای پروتکل SSH و یا 443  برای پروتکل https . علاوه پورت های well known تمامی پورتهای دیگر نیز قابل استفاده می باشند.

j- (interfaces) : نام هدف می باشد (ACCEPT,DROP,RETURN) ، در هر rule که ایجاد می کنید می بایست این فاکتور را نیز برای آن مشخص نمایید.

حال می توانید با توجه به نوع rule مورد نظر خود فاکتورهای موردنیاز را وارد نمایید ، درصورت استفاده همه فاکتورها با هم rule شما به صورت زیر خواهد بود:

sudo iptables -A <chain> -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.>  -j <target>

پس از آشنایی با قواعد اصلی موردنیاز برای نوشتن rule ، می توانید پیکربندی فایروال را آغاز کنید، تا امنیت بیشتری به سرور خود بدهید.

برای این آموزش iptables ، ما قصد داریم به عنوان نمونه یک input chain ایجاد کنیم.

فعال کردن ترافیک در localhost

برای اجازه دادن به ترافیک local دستور زیر را وارد نمایید:

sudo iptables -A INPUT -i lo -j ACCEPT

برای این آموزش ، از اینترفیس مجازی lo (loopback) استفاده می کنیم.این اینترفیس برای تمام ارتباطات local مورد استفاده قرار می گیرد.

اینترفیس loopback درواقع یک اینترفیس مجازی است که برای بررسی ارتباطات local شبکه مورد استفاده قرار می گیرد.

حال با دستور زیر بررسی می کنیم که rule نوشته شده به iptables اضافه شده است:

دستور مشاهده rule های iptables
sudo iptables -L –v

درصورت تمایل میتوانید در rule نوشته شده اینترفیس فیزیکی سرور خود را اعمال نمایید.

فعال کردن ارتباطات بر روی پورت های SSH , HTTP , SSL

در مرحله بعد ، می خواهیم ارتباط های http (پورت 80) ، https  (پورت 443 ( و ssh (پورت 22) را فعال کنیم تا این سرویس ها بتوانند  بر روی سرور کار خود را انجام دهند.. برای این کار ، باید پروتکل (-p) و پورت مربوطه  (-dport) را مشخص کنیم. می توانید این دستورات را یک به یک اجرا کنید:

دستور اول مربوط به SSH می باشد .(پورت 22)

دستور دوم مربوط به HTTP می باشد .(پورت 80)

دستور سوم مربوط به HTTPS می باشد .(پورت 443)

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

حال با دستور زیر که با آن آشنا شده اید ، بررسی می کنیم که rule ها اعمال شده باشند.

دستور مشاهده rule های iptables
sudo iptables -L -v

فیلتر کردن packet ها با استفاده از source آن ها

Iptables به شما این امکان را می دهد که packet ها را بر اساس آدرس IP یا گروهی از آدرس های IP فیلتر کنید. شما باید IP و یا Range IP موردنظر خود را در دستور تعریف rule ، بعد از علامت -s مشخص کنید. به عنوان مثال ، برای پذیرفتن بسته های مربوط به 192.168.1.3 ، دستور عبارت است از:

sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT

همچنین می توانید Packet های آدرس خاصی را drop کنید :

sudo iptables -A INPUT -s 192.168.1.4 -j DROP

اگر می خواهید بسته ها را  از یک گروه آدرس IP ،  drop و یا accept کنید ، باید از گزینه -m و ماژول iprange استفاده کنید. سپس محدوده آدرس IP را با –src-range مشخص کنید. به مثال زیر توجه کنید :

sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

drop کردن سایر ترافیک ها

Drop کردن ترافیک های دیگر پس از تعریف rule های موردنظر شما یک امر ضروری می باشد . چرا که شما با استفاده از مجموعه rule هایی که تعریف نموده اید ترافیک سرور را کنترل نموده اید پس لازم است در پایان مابقی ترافیک که شامل rule های  تعریف شده قبلی نمی باشند drop شوند.

با این کار از دسترسی غیر مجاز به سرور از طریق سایر پورت های های باز جلوگیری می شود.

برای این کار به سادگی می توانید دستور زیر را وارد نمایید:

sudo iptables -A INPUT -j DROP

حال برقراری connection با سرور از طریق پورت هایی که تعریف نشده اند امکان پذیر نمی باشد.

حذف  rule ها در iptables

درصورتیکه بخواهید همه rule های تعریف شده را حذف نمایید ، دستور زیر را وارد کنید:

sudo iptables –F

اما اگر می خواهید یک یا چند rule خاص را از جدول iptables حذف نمایید ،ابتدا با وارد نمودن دستوز زیر تمام خطوط iptables را مشاهده نمایید:

sudo iptables -L --line-numbers
حذف rule های iptables

ستون num  نشان دهنده شماره خط rule می باشد. کافیست شماره خط rule مورد نظر خود را پیدا نمایید.

به طور مثال می خواهیم دستور شماره 3 در Chain input را حذف نماییم:

sudo iptables -D INPUT 3

حال مجددا دستور sudo iptables -L –line-numbers را وارد می کنیم . همانطور که مشاهده می شود rule مربوط به http (دستور شماره 3) حذف شده است. توجه کنید که دستورهای بعدی جایگزین دستور حذف شده خواهند شد:

مرحله سوم – دائمی کردن تغییرات

قوانین iptables که ایجاد می کنید در memory ذخیره می شود. به همین دلیل پس از هر بار ریستارت سرور می بایست مجدداً آنها را تعریف کنید. برای اینکه این تغییرات پس از راه اندازی مجدد سرور ذخیره بمانند ، می توانید از این دستور استفاده کنید:

دائمی کردن تغییرات
sudo /sbin/iptables-save

این کامند rule های فعلی iptables را در فایل های پیکربندی سیستم ذخیره می کند ، و پس از هربار ریستارت شدن سرور مجددا این دستورات در memory سرور ذخیره می شوند.

توجه داشته باشید که پس از هرگونه تغییری (اضافه و یا حذف نمودن ruleها) می بایست دستور بالا را وارد نمایید.

 به طور مثال اگر قصد دارید iptables را غیرفعال نمایید ، دستورات زیر را وارد نمایید:

دستور اول مربوط به غیرفعال کردن سرویس iptables و دستور دوم برای ذخیره شدن تغییرات می باشد:

غیرفعال کردن سرویس iptables
sudo iptables -F
sudo /sbin/iptables-save

iptables یک برنامه فایروال قدرتمند است که می توانید از آن برای امنیت سرور لینوکس و یا سرور مجازی  VPS استفاده کنید. شما می توانید بر اساس نیاز خود rule های مختلفی را تعریف کنید.

در این آموزش نحوه نصب iptables و استفاده از ابزارهای آن را یاد گرفته اید. از این پس، شما می توانید مجموعه rule های خود را برای مدیریت و فیلتر کردن packet های ورودی و خروجی تعریف کنید.

سرورهای مجازی میزبان اول مناسب برای راه اندازی سرور لینوکس و ویندوز می باشد . درصورت نیاز به مشاوره در زمینه سرور مجازی لینوکس و ویندوزبا ما در ارتباط باشید.

سوالات متداول

iptables  چیست و چگونه کار می کند؟

به بیان ساده ، iptables یک برنامه فایروال برای لینوکس است. با استفاده از جدول های درون آن ، میزان ترافیک ورودی و خروجی سرور شما کنترل می شود. این جدول ها شامل مجموعه ای از قوانین (rule) است که به آن ها Chain گفته می شود ، که packet های داده ورودی و خروجی را فیلتر می کند.

drop کردن سایر ترافیک ها در iptables به چه معنا می باشد؟

Drop کردن ترافیک های دیگر پس از تعریف rule های موردنظر شما یک امر ضروری می باشد . چرا که شما با استفاده از مجموعه rule هایی که تعریف نموده اید ترافیک سرور را کنترل نموده اید پس لازم است در پایان مابقی ترافیک که شامل rule های  تعریف شده قبلی نمی باشند drop شوند.

چگونه سرویس iptables را در سرور مجازی لینوکس غیرفعال می کنیم؟

با وارد کردن دستور sudo iptables -F این سروری در سرور لینوکس شما غیرفعال می گردد . اگر می خواهید پس از ریستارت سرور اوبونتو ،تنظیمات مجددا به حالت اولیه برنگردد دستور sudo /sbin/iptables-save را نیز پس از غیرفعال کردن iptables وارد نمایید.