بررسی فایروال Iptables بهمراه یکسری نکات و دستورات

بررسی فایروال Iptables بهمراه یکسری نکات و دستورات
در این پست می‌خوانید:

Iptables  چیست؟

Iptables  یا Netfilter محبوب ترین و پر استفاده ترین فایروال لینوکسی مبتنی بر خط فرمان است. iptables  خط اول دفاعی سرورهای لینوکس است و بسیاری از مدیران سرورها از آن برای کانفیگ و ایجاد تنظیمات در سرورهای لینوکس استفاده می­کنند.

IPTables فایروال پیش فرض سیستم لینوکس می باشد، از قدرت بالایی بهره برداری میکند که پایداری بسیاری دارد که قبل از آن به اسم IPchange بود. با قدرتمند کردن و اضافه کردن بعضی از دستورات به IPTables تبدیل شد.

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

iptables  امکانات زیادی در اختیار یک مدیر سرور می دهد ، بوسیله iptables می­توان پکت ها را بر اساس پروتکل مورد استفاده در ارتباط ، شماره ip  گیرنده و فرستنده ، شماره پورت مورد در ارتباط ، مک آدرس و آدرس فیزیکی سیستم ها ، دامنه ای از آدرس های ip ، زمان برقراری ارتباط ، بخش های مختلفی از بسته ها و تنظیمات IPSec ، طول بسته ها ، انتخاب تصادفی بسته ها ، انتخاب n امین بسته ، کاربر یا گروه ارسال کننده بسته ، پردازش ارسال کننده بسته ، بخش های TOS  و TTL  هدر ip   و تعداد ارتباطات در یک بازه زمانی را کنترل و فیلتر کرد.

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

قوانین iptable بسته به نوع کاربرد در جداول filter table ،  nat tableوmangling table و در زنجیر(chain)هایی از دستورات دسته بندی می شوند. وظیفه filter table سیاست گذاری و دادن مجوز برای ورود و خروج بسته های TCP/IP به سیستم است. این جدول شامل سه زنجیر INPUT برای ترافیک ورودی به سیستم ، OUTPUT برای ترافیک خروجی از سیستم و FORWARD برای ترافیک فوروارد شده از سیستم است.

وظیفه nat table سیاست گذاری و دادن مجوز عملیات routing است و قوانین مربوط به تغییر آدرس IP و یا پورت در جدول   nat قرار می گیرند.  این جدول شامل سه زنجیر PREROUTING برای شبکه مقصد در ترافیک ورودی به سیستم ، POSTROUTING  برای شبکه مبدا ترافیک خروجی از سیستم و OUTPUT است.

از جدول mangle  می توان برای مارک دار کردن بسته ها و عملیات بررسی بسته ها قبل از ورود به جداول بالاتر استفاده کرد . کلیه اعمال پیشرفته مربوط به دستکاری فیلدهای header در بسته های ارسالی در شبکه توسط قوانین موجود در این جدول صورت می گیرد.

قلاب یا hook

هر پکتی که وارد فرایند پردازش میشود با یکی از hook  ها در kernel  قلاب (hook) میشود. بسته به نوع هر پکت input, output و یا  forward قلابی به آن اختصاص داده میشود.

در ادامه قلاب هاییکه در پشته پروتکلی شبکه تعریف می شوند به اختصار بیان شده است:

  • NF_IP_PRE_ROUTING

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

  • NF_IP_LOCAL_IN

این قلاب بر روی بسته هایی اعمال می شود که مقصد نهایی آنها سیستم لوکال (local) است (Input).

  • NF_IP_FORWARD

این قلاب بر روی بسته هایی اعمال می شود که مقصد نهایی آنها  هاست دیگری می باشد (forward).

  • NF_IP_LOCAL_OUT

این قلاب بر روی بسته هایی خروجی از سیستم اعمال می شود (Output).

  • NF_IP_POST_ROUTING

این قلاب بر روی بسته های خروجی یا forward شده درست قبل از خروج از سیستم اعمال می شود.

به منظور اولویت بندی اجرای ماژول های هسته بر روی قلاب ها می بایست یک شماره اولویتی برای هر قلاب متصل به آن تعیین شود.

فایروال iptables با استفاده از جداولی برای سازماندهی قوانین عمل میکند. این جداول قوانین را طبق نوع تصمیمات طبقه بندی میکند. به عنوان مثال، اگر یک قاعده مربوط به ترجمه آدرس شبکه باشد، آن را به nat table تبدیل می کند.

در هر جدول iptables، قوانین در زنجیره های (chain) جداگانه سازماندهی می شوند. در حالی که جداول iptables یک سری قوانین کلی را شامل می شوند، زنجیره های مرتبط با قلاب های netfilter نیز آنها را کنترل می کنند. به طور اساسی chain ها تعیین می کنند که قوانین چه زمانی ارزیابی شوند.

همانطور که در ادامه می توان دید، نام های هر chain در netfilter با نام hook  آنها مرتبط است:

  • PREROUTING

آغاز راه اندازی توسط قلاب NF_IP_PRE_ROUTING

  • INPUT

آغاز راه اندازی توسط قلاب NF_IP_LOCAL_IN

  • FORWARD

آغاز راه اندازی توسط قلاب NF_IP_FORWARD

  • OUTPUT

آغاز راه اندازی توسط قلاب NF_IP_LOCAL_OUT

  • POSTROUTING

آغاز راه اندازی توسط قلاب NF_IP_POST_ROUTING

تنها پنج hook  در  kernel مربوط به  netfilter وجود دارد، بنابراین chain ای از Tableهای  متعدد در هر یک از hook ها ثبت می شود.به عنوان مثال، سه Table دارای زنجیرهای PREROUTING هستند. هنگامی که این زنجیرها در hook NF_IP_PRE_ROUTING مربوطه ثبت می شوند، آنها یک اولویت را تعیین می کنند که هر کدام یک table’s PREROUTING chain نامیده می شود.

هر یک از قوانین درون زنجیره PREROUTING با بالاترین اولویت قبل از حرکت به زنجیره PREROUTING بعدی ارزیابی می شود

Table های مختلف iptables

  • Filter Table

جدول filter یکی از جداول پرکاربرد در iptables است.  Filter tables برای تصمیم گیری در مورد اینکه آیا به یک بسته اجازه داده شود همچنان به مقصد مورد نظر خود برود (ACCEPT) و یا برای انکار درخواست آن است (DROP). در فایروال، به عنوان “فیلتر کردن” بسته شناخته می شود.

  • NAT Table

جدول nat برای استفاده از قوانین ترجمه آدرس شبکه مورد استفاده قرار می گیرد. همان طور که بسته ها به پشته شبکه وارد می شوند، قواعد در این جدول تعیین می کند که آیا و چگونه می توان آدرس های مبدا یا مقصد را تغییر داد. این جدول در تعیین مسیریابی بسته و هر نوع ترافیک شبکه استفاده می شود. این table  معمولا برای هدایت بسته ها به شبکه ها زمانی که دسترسی مستقیم امکان پذیر نیست استفاده می شود.

  • Mangle Table

جدول mangle برای تغییر header های پکت IP استفاده می شود. به عنوان مثال، شما می توانید مقدار TTL (زمان زندگی) یک بسته را تنظیم کنید. این table  میتواند  بصورت internal kernel  برای پردازش بیشتر در جداول دیگر و سایر ابزارهای شبکه بصورت mark  شده قرار گیرد.

به طور خلاصه

هسته لینوکس با استفاده از امکانات Netfilter به فیلتر کردن بسته، می پردازد و اجازه میدهد بعضی از بسته ها با استفاده از پسورد وارد شود و دیگر بسته اجازه وارد شدن نداشته باشند
که هسته آن از لینوکس درست شده که در آن پنج جدول از پیش طراحی شده که شامل:

Filter: این جدول به طور پیش فرض برای مدیریت بسته های شبکه است

NAT: برای تغییر بسته برای یک اتصال جدید کاربرد دارد مثلا تبدیل ای پی اینترنت به ای پی شبکه داخلی و برعکس مورد استفاده قرار میگیرد

Mangle: برای تغییر و مارک دار کردن انواع خاصی از بسته با توجه به پالیسی نوشته شده به کار میرود

Raw: عمدتا برای پیکربندی معافیت در طول ردیابی اتصال در ترکیب با هدف NOTRACK است

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

Filter table جدول های فیلتر شامل

Input chain کلیه بسته های ورودی به سیستم عامل

Output chain کلیه بسته های خروجی از سیستم عامل

Forward chain کلیه بسته هایی که از طریق این سیستم عامل بخواهد فوروارد شود

NAT table جدول نت

Pre-routing بسته های شبکه را زمانی که آنها می رسند تغییر می دهد و مغمولا برای برای destination network مورد استفاده قرار میگیرد

Output تغییر میدهد بسته های تولید شده در شبکه داخلی قبل از اینکه خارج شود

Post-routing تغییر می دهد بسته ها را قبل از اینکه از شبکه خارج شوند

Mangle table جدول های منگل

Input بسته های شبکه را برای میزبان تغییر می دهد (مارک دار می کند)

Output بسته های تولید شده از شبکه را قبل از فرستادن تغییر می دهد (مارک دار می کند)

Forward تغییر میدهد (مارک دار می کند) پاکت های شبکه که می خواهد روت شود به نقطه دیگر

Pre-routing تغییر میدهد (مارک دار می کند) پاکت های شبکه را قبل از اینکه روت شوند

Post-routing تغییر میدهد (مارک دار می کند) پاکت های شبکه را بعد از اینکه روت شوند

Raw table جدول های raw

Output اجرا پاکت های که در شبکه داخلی تولید شده اند قبل از اینکه خارج شوند

Pre-routing اجرای بسته های ورودی قبل از اینکه خارج شوند

Security table جدول های Security

Input اجرا روی پاکت های که به شبکه وارد می شوند

Output اجرا روی پاکت های که از شبکه خارج می شوند

Forward اجرا روی پاکت های که از شبکه می خواهند روت شوند به جای دیگری

سوئیچ ها و دستورات iptable

 

  • A- برای افزودن دستور به انتهای یک زنجیره از جدول قوانین استفاده می شود.
  • I- برای افزودن به مکان خاصی از زنجیره جدول قوانین استفاده می شود.
  • D- برای حذف دستور از مکان خاصی از زنجیره جدول قوانین استفاده می شود.
  • R- برای جایگزین کردن دستور جاری یا یک دستور در مکان خاصی از زنجیره جدول قوانین استفاده می شود.
  • p- برای مشخص کردن نوع پروتکل مورد استفاده قرار می­گیرد.
  • t- برای مشخص کردن جدول مورد استفاده قرار می­گیرد.
  • s- یا source– برای مشخص کردن شماره ip  مبدا مورد استفاده قرار می­گیرد.
  • d- یا destination– برای مشخص کردن شماره ip  مقصد مورد استفاده قرار می­گیرد.
  • i- یا in-interface– برای مشخص کردن کارت شبکه ورودی مورد استفاده قرار می­گیرد.
  • o- یا out-interface– برای مشخص کردن کارت شبکه خروجی مورد استفاده قرار می­گیرد.
  • sport– برای مشخص کردن شماره پورت مبدا مورد استفاده قرار می­گیرد.
  • dport– برای مشحص کردن شماره پورت مقصد مورد استفاده قرار می­گیرد.
  • L- برای لیست کردن قوانین موجود در یک زنجیر مورد استفاده قرار می­گیرد.
  • N- برای ایجاد زنجیر جدید مورد استفاده قرار می­گیرد.
  • X- برای حذف یک زنجیر مورد استفاده قرار می­گیرد.
  • F- برای پاک کردن قوانین مورد استفاده قرار می­گیرد.
  • j- مشخص کردن نحوه برخورد با بسته مورد استفاده قرار می­گیرد.این سویچ به معنی jump  بوده و به موارد DROP ، LOG ، ACCEPT  و REJECT اشاره می کند. در اینجا تفاوتی که بین DROP و REJECT وجود دارد و آ ن این است که در DROP برای فرستنده پیامی مبنی بر حذف بسته  ارسال نمی­کند ولی در REJECT به فرستنده یک بسته عدم پذیرش ترافیک ارسال خواهد شد

پشتیبان گیری از rule ها

# iptables-save > /etc/iptables.rules

برای پشتیبان گیری تنظیمات مورد استفاده قرار می¬گیرد.

# post-down iptables-save > /etc/iptables.rules

برای پشتیبان گیری تنظیمات قبل از هر خاموش شدن سیستم مورد استفاده قرار می¬گیرد.

# iptables-restore < /etc/iptables.rules

برای بازیابی تنظیمات مورد استفاده قرار می¬گیرد.

مهم ترین و پرکاربردترین دستورات و تنظیمات iptables

پاک کردن تمام تنظیمات جاری

# Iptables -F

ایجاد تنظیمات عمومی و مسدود کردن همه دسترسی ها

# iptables -P INPUT DROP

# iptables -P FORWARD DROP

# iptables -P OUTPUT DROP

مسدود کردن یک ip خاص

# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

بستن PING:

# iptables -A OUTPUT -p icmp - j REJECT

# iptables -A INPUT -p icmp - j REJECT

و برای حذف این دستور چنین عمل می کنیم:

# iptables -D OUTPUT -p icmp -j REJECT

باز کردن پورت SSH برای تمامی ارتباطات ورودی

# iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

باز کردن پورت ssh برای یک ip یا رنج ip خاص

# iptables -A INPUT -i eth0 -p tcp -s xxx.xxx.xxx.xxx/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A INPUT -i eth0 -p tcp -s xxx.xxx.xxx.xxx --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

باز کردن پورت http

# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

باز کردن پورت https

# iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

باز کردن چند پورت بصورت یکجا

# iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

باز کردن پورت برای ارتباط خروجی ssh

# iptables -A OUTPUT -o eth0 -p tcp -d 192.168.101.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

باز کردن پورت https برای ارتباطات خروجی

# iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

ایجاد امکانping از داخل به خارج

# iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

ایجاد امکانping از خارج به داخل

# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

ایجاد امکان دسترسی loopback

# iptables -A INPUT -i lo -j ACCEPT

# iptables -A OUTPUT -o lo -j ACCEPT

ایجاد امکان دسترسی به شبکه خارجیeth1 از شبکه داخلی eth0

# iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

باز کردن دسترسی خروجی پورت dns

# iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT

# iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

.بستن پورت 23برای همه ip ها

#  iptables -t nat -A POSTROUTING -o eth1 -p tcp -m tcp --dport 23 -j DROP

..بستن پورت های 22 و 23 برای همه ip ها

#  iptables -t nat -A POSTROUTING -o eth1 -p tcp -m tcp --dport 22:23 -j DROP

بستن پورت 22و 23 برای یک ip خاص

#  iptables -t nat -A POSTROUTING -s 192.168.0.88 -o eth1 -p tcp -m tcp --dport 22:23 -j DROP

drop کردن تمامی Packet های یک IP خاص

#  iptables -A INPUT -s 217.61.158.248 -j DROP

Drop کردن SSH packetهای یک Ip خاص

#  iptables -A INPUT -s 217.61.158.248 -p tcp --dport 22 -j DROP

ذخیره تغییرات iptables

# service iptables save

or

# iptables-save

فعال کردن LOG در قوانین فایروال

برای اینکه مدیریت کامل تری به شبکه خود داشته باشیم و بتوانیم منابعی که در حال اسکن کردن سیستم ما هستند بیابیم و یا در هر حال گزارشی از عملکرد صحیح فایر وال داشته باشیم می توانیم به طرق ذیل Log فایل ها را برای موارد دلخواهمان فعال کنیم:

.فعال کردن Log برای دیدن بسته های ICMP:

# iptables -A OUTPUT -p icmp -j LOG --log-prefix "PING:> "

# iptables -A INPUT -p icmp -j LOG --log-prefix "PING:> "

برای دیدن این log ها به این مسیر بروید:

# less /var/log/messages

و خط هایی را که با

 PING:> …..

شروع شده اند بررسی نمایید.( البته راه ساده تر آن استفاده از دستور فیلتر کننده grep و مختص کردن به log های فایروال می باشد)

فعال کردن Log برای دیدن Ftp:

 # iptables -A OUTPUT -p tcp -s 0/0 --dport 21 -j LOG --log-prefix "FTP:> "
# iptables -A INPUT -p tcp -s 0/0 --dport 21 -j LOG --log-prefix "FTP:> "

و در لاگ فایل ها دنبال عبارت انتخابی می گردیم.

فعال کردن Log برای یک ip خاص:

 # iptables -t  nat POSTROUTING -s 192.168.0.88 -o eth1 -j LOG --log-prefix "SPICAIL_IP:>"

و در لاگ فایل ها دنبال عبارت انتخابی می گردیم.

redirect کردن پورت های مختلف

در این بخش redirect کردن پورت های مختلف را با هم بررسی می کنیم:

1-Transparent کردنSquid

 # iptables -t nat -A PREROUTING -p tcp --dport 80  -j REDIRECT --to-ports 3128

2-برای redirect کردن گروهی از پورتها:

 # iptables -t nat -A PREROUTING -p tcp -d 203.145.184.246 --dport 20:23 -j DNAT --to 192.168.0.88:20-23

# iptables -A FORWARD -p tcp -d 192.168.0.88 --dport 20:23 -j ACCEPT

# iptables -t nat -A PREROUTING -p udp -d 203.145.184.246 --dport 20:23 -j DNAT --to 192.168.0.88:20-23

# iptables -A FORWARD -p udp -d 192.168.0.88 --dport 20:23 -j ACCEPT

3- برای redirect کردن تمامی درخواست های SMTP از اینترفیسeth0 به یک کامپیوتر دیگه داخل شبکه( LAN):

 # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to 192.168.0.88:25

# iptables -A FORWARD -p tcp -d 192.168.0.88 --dport 25 -j ACCEPT
Share کردن اینترنت

در این بخش با استفاده از سیاست MASQUERADE اینترنت را در شبکه به اشتراک می گزاریم:

با استفاده از دو کارت شبکه که یکی به اینترنت و دیگری به شبکه داخلی متصل است:

 # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

(توضیح اینکه در اینجا eth1 اینترفیسی است که به اینترنت متصل است. شما اسم اینترفیسی را بزارید که متصل به اینترنت هست)

 لازم است که IP forwarding نیز فعال شده باشد برای فعال کردن IP Forwarding دستور زیر را وارد کنید

 # echo "1" > /proc/sys/net/ipv4/ip_forward

 

دیدگاه‌ها ۰
ارسال دیدگاه جدید