پیاده سازی فایروال با استفاده از Iptables در Ubuntu

معرفی

تنظیم و پیاده سازی فایروال یکی از ضروری ترین کارها در جهت امینت سیستم عامل است. تنظیم فایروال بر روی بیشتر توزیع‌های لینوکس با چندین ابزار مختلف امکان پذیر است. در این مقاله نصب و تنظیم فایروال را با استفاده از ابزاری به نام Iptables بر روی سیستم عامل Ubuntu 14.04 توضیح خواهیم داد.
Iptables ابزاری است برای تنظیم فایروال که در بیشتر توزیع‌های لینوکس به صورت پیش فرض وجود دارد. عملکرد Iptables به این صورت است که هر ترافیکی که از کارت شبکه سیستم می‌گذرد را با مجموعه‌ای از Rule ها تطابق می‌دهد تا اگر با هر کدام از آن Rule ها تطابق یافت مشخص کند چه اتفاقی برای آن ترافیک قرار است بیفتد.
همین طور (UFW (Uncomplicated Firewall ابزار تنظیمات فایروال است که به صورت پیش فرض بر روی سیستم عامل Ubuntu وجود دارد و برای راحت تر شدن تنظیمات Iptables به وجود آمده است. ما برای start و یا stop کردن و همین طور فعال و یا غیرفعال کردن سرویس Iptables از این ابزار استفاده می‌کنیم.

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

اگر Iptables را بر روی سیستم خود ندارید، با استفاده از دستور زیر آن را نصب کنید.

 # apt-get update
# apt-get install iptables

توجه ! تمامی دستورات مربوط به Iptables باید با کاربر root اجرا شود.

مرحله دوم – دستورات Iptables

برای دیدن لیست تمامی Rule هایی که در Iptables نوشته شده‌اند از دستور زیر کمک بگیرید.

 # iptables –L 

در صورتی که هیچ Rule یی در Iptables نوشته نشده باشد خروجی دستور بالا به شکل زیر خواهد بود:





Output:
    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

در تصویر هر سه Chain پیش فرض Iptables یعنی (INPUT, OUTPUT, FORWARD) و Policy پیش فرض هر یک از آنها را مشاهده می‌کنید. همان طور که مشخص است به صورت پیش فرض هیچ مجموعه Rule یی در Iptables تعریف نشده است.

1) Chain : به مجوعه ای از Rule ها گفته می‌شود که بر اساس پارامتری خاص دسته بنده شده‌اند.

2) INPUT : تمامی ترافیک ورودی و در واقع Packet های وروردی که آدرس مقصد آنها، سرور شماست با این Chain و Rule هایی که درون آن است کنترل می‌شوند.

3) OUTPUT : تمامی ترافیکی که از طریق سرور شما تولید می‌شوند و مقصد آن جایی خارج از سرور شماست با این Chain و Rule هایی که درون آن است کنترل می‌شوند.

4) FORWARD : به مانند جایی است برای Route ترافیک سرورهای دیگر.

با استفاده از دستور زیر نیز می‌توانید تمامی Rule های Iptables سیستم تان را Flush کنید.

 # iptables –F 

همین طور برای دیدن اطلاعات کامل تر از وضعیت Iptables خود می‌توانید از دستور زیر استفاده کنید.

 # iptables -S 

مرحله سوم – ساختن Rule در Iptables

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

به عنوان مثال می‌خواهیم پورت سرویس SSH سیستم را که به صورت پیش فرض 22 است در فایروال باز کنیم و با این کار به دیگر سرور ها اجازه دهیم تا به سیستم ما SSH بزنند. به همین ترتیب اطز دستور زیر استفاده می‌کنیم.

در دستور بالا:

 # iptables -A INPUT -p tcp --dport 22 -j ACCEPT 

Iptables : دستوری است که برای نوشتن تمامی Rule های Iptables از آن استفاده می‌شود.

A INPUT – : سوییچ A- یک Rule را به آخر Chain که در اینجا INPUT است

P tcp – : این سوییچ Packet هایی را که شامل پورت TCP باشند با Rule تطابق می‌دهد.

dport– : این بخش در صورتی نوشته می‌شود که قسمت قبلی یعنی p tcp- نیز در Rule ذکر شده باشد و مشخص کننده‌ی شماره پورتی است که بر روی پروتکل TCP قرار است در Rule کنترل شود. در اینجا به پورت 22 که مربوط به سرویس SSH است اشاره می‌کند.

j ACCEPT – : سوییچ j- مشخص کننده‌ی اقدامی است که در صورت تطابق داشتن Packet با Rule باید اتفاق بیفتد. در اینجا ACCEPT به معنی آن است که به Packet یی که به سمت سرور می‌آید و شماره پورت آن 22 TCP است، اجازه‌ی ورود بدهید

عوض کردن Policy پیش فرض

1) عوض کردن Policy پیش فرض

 # iptables -P INPUT –j DROP 

این کار باعث Drop شدن تک تک Packet هایی خواهد شد که با هیچ Rule یی در Iptables تطابق ندارند.

البته اتفاقی که خواهد افتاد این است که در صورت Flush کردن Iptables خود این Rule نیز از بین می‌رود و تمامی packet ها قابل قبول خواهند بود.

2) نوشتن یک Rule جهت Drop شدن بقیه Packet ها

راه بهتر این است که علاوه بر Rule های مورد نیاز، جهت Drop شدن باقی Packet هایی که به سمت سرور می‌آیند، یک Rule نوشته شود.

 # iptables -A INPUT -j DROP 

به یاد داشته باشید که اگر Policy ی INPUT Chain خود را تغییر داده‌اید به راحتی می‌توانید آن را به حالت پیش فرض برگردانید.

# iptables -P INPUT –j ACCEPT

مرحله چهارم – ذخیره تنظیمات Iptables

Iptables به صورت پیش فرض و اتوماتیک تنظیمات خود را ذخیره نمی‌کند و با اولین دفعه‌ای که سرور خود را restart کنید، تمامی Rule هایی که نوشته بوده‌اید از بین خواهد رفت. برای ذخیره‌ی تنظیمات Iptables راه‌های مختلفی وجود دارد که ساده ترین آنها استفاده از پکیج iptables-persistent است. شما می‌توانید این پیکج را از Repository های پیش فرض Ubuntu و با کمک گرفتن از دستورات زیر نصب کنید.

 # apt-get update
# apt-get install iptables-persistent

در طول مراحل نصب از شما سوال خواهد شد تمایل دارید Rule های فعلی Iptables خود را ذخیره کنید یا خیر. اگر تمایل به انجام این کار دارید، گزینه‌ی Yes را انتخاب کنید.

پس از اتمام مراحل نصب، شما سرویس جدیدی به نام iptables-persistent خواهید داشت که به گونه‌ای تنظیم شده است تا هر زمان سیستم روشن شد، این سرویس هم کارش را شروع کند.

برای ذخیره‌ی Rule های نوشته شده در Iptables و به کمک سرویسی که نصب کرده‌اید، از دستور زیر استفاده کنید.

 # invoke-rc.d iptables-persistent save 

این دستور تنظیمات Iptables شما را در فایل تنظیماتی در مسیر< /etc/iptables/rules.v4 نگه داری می‌کند.

مرحله پنجم – کنترل سرویس Iptables

با استفاده از دستورات زیر و استفاده از ابزار UFW می‌توانیم فایروال سیستم را Start و Stop نماییم.

# service ufw start
# service ufw stop