tableها در iptabless
همچنین میتوانید برای دیدن لیست آموزش های مربوط به IPTables اینجا را کیلیک کنید.
نت فیلتر از پنج chain تشکیل میشود که میتوان آنها را در سه table دسته بندی کرد:
۱-Filter
جدول filter شامل سه chain از پیش ساخته شده درون نت فیلتر میباشد. وظیفهی این جدول بررسی بستههای عبوری از لحاظ ویژگیهایشان و صدور مجوز عبور بستهها بر اساس این ارزیابی میباشد. سه زنجیرهی این جدول به صورت زیر هستند:
۱٫Input ۲٫Forward ۳٫Output
زنجیرهی Input بستههایی را که مقصدشان خود فایروال (درون سیستم) میباشند را مورد ارزیابی قرار میدهد. زنجیرهی Output بستههای تولید شده توسط سیستم را که قصد رفتن به بیرون را دارند را مورد بررسی قرار میدهد. زنجیرهی Forward بستههایی را که از شبکهای خارجی آمدهاند و قصد رفتن به شبکهای دیگر را دارند (نه به داخل خود سیستم) ارزیابی میکند.
یکی از تفاوتهای اصلی iptables با ipchainsدر این است که در ipchains بستههایی که از بیرون میآمدند و قصد رفتن به شبکهای دیگر را داشتند باید از سه زنجیرهی Input,Forward,Output میگذشتند در حالی که در iptables فقط از زنجیرهی Forward عبور میکنند.
سه شکل زیر بیانگر توضیحات داده شده در مورد جدول filter میباشد:
NetFilter FORWARD Chain Processing
NetFilter OUTPUT Chain Processing
در اینجا برای مثال ما میخواهیم به پورت ۱۴۳ که مربوط به IMAP می باشد در جدول INPUT اجازه عبور دهیم و همچنین جلوی ترافیک پورت ۱۱۰ که مربوط به POP3 می باشد را بگیریم:
Pass IMAP:
iptables -A INPUT -j PASS -p tcp –destination-port 143 -i eth0
Block POP3:
iptables -A INPUT -j DROP -p tcp –destination-port 110 -i eth0
در جدول زیر برای درک بیشتر به شرح Option هایی که با دستور iptables به کار میروند پرداخته ایم.
به وسیله این آپشن میتوانیم به انتهای یک جدول یا زنجیره موجود رولی را اضافه کنیم | -A –append |
با این آپشن میتوانیم match بودن رول ها با جدول یا زنجیره را بررسی کنیم | -C –check |
با این آپشن میتوانیم یک یا چند رول را از جدول یا زنجیره مورد نظر پاک کنیم | -D –delete |
این آپشن تمام رول های موجود در iptables را پاک میکند | -F –flush |
با این آپشن میتوانیم رولی را با شماره ترتیب مورد نظر به جدول یا زنجیره اضافه کنیم | -I –insert |
با این آپشن میتوانیم تمام رول های موجود در جدول یا زنجیره مورد نطر را لیست کنیم | -L –list |
با این آپشن IP و Port ها به صورت شماره نمایش داده میشوند | -n –numeric |
با این آپشن میتوانیم جدول یا زنجیره مخصوص خودمان را بسازیم | -N –new-chain <name> |
با این آپشن جزئیات بیشتری هنگام اجرای دستور روی صفحه نمایش پدیدار میشود | -v –verbose |
با این آپشن میتوانیم جداول و زنجیره هایی که خودمان ساختیم را پاک کنیم | -X –delete-chain <name> |
این آپشن پروتکلی که رول بر روی آن اعمال میشود را مشخص میکند | -p, — protocol |
این آپشن آدرس منبع یا جایی که جریان ترافیک از آنجا به شمت ما می آید را مشخص میکند | -s, — source |
این آپشن مقصد یا جایی که جریان ترافیک به آنجا میرود را مشخص می کند | -d, — destination |
این آپشن هدف نهایی در زمان match شدن رول را مشخص میکند | -j, — jump |
آین آپشن در صورت match شدن مشخص میکند که ادامه پردازش در کدام جدول یا زنجیره ای که توسط کاربر تعریف شده ادامه پیدا کند | -g, –goto chain |
این آپشن اینترفیس ورودی جریان ترافیک را مشخص میکند | -i, –in-interface |
این آپشن اینترفیس خروجی جریان ترافیک را مشخص میکند | -o, –out-interface |
این آپشن به فایروال میگوید که رول بر روی بسته دوم به بعد که با این رول match شدن اعمال شود | -f, –fragment |
این آپشن شمارنده تعداد match شدن را بر روی رول فعال میکند | -c, –set-counters |
۲-NAT
جدول NAT برای تبدیل آدرس بستههایی که میخواهند به شبکه وارد شوند یا از آن خارج شوند به کار میرود که شامل DNAT (Destination NAT)، SNAT (Source NAT) و Masquerading میشود. این جدول سه زنجیرهی از پیش تعیین شده دارد:
۱٫Prerouting ۲٫Postrouting ۳٫Output
۱- زنجیرهی Prerouting بر روی بستههایی که میخواهند وارد شبکه بشوند و هنوز تعیین مسیر نشدهاند، عمل میکند و ابتدا روی آنها عمل DNAT انجام میشود تا آدرس مقصدشان تغییر کند.
در اینجا مثالی برای چگونگی نوشتن یک رول و اضافه کردن آن به جدول NAT آورده شده است:
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 10.0.4.2:80
در مثال بالا ما به iptables گفته ایم که اگر ترافیکی با پورت مقصد ۸۰ وارد اینترفیس eth0 شد آن را بوسیله Destination NAT به سمت ماشین داخلی به ip شماره ۱۰٫۰٫۴٫۲ و پورت ۸۰ آن بفرست.
۲- زنجیرهی Postrouting بر روی بستههایی که میخواهند از شبکه خارج شوند و مسیرشان تعیین شده عمل میکند و ابتدا روی آنها عمل SNAT انجام میشود تا آدرس مبداشان تغییر کند.
در زیر مثالی از Source NAT آورده شده است که به iptables میگوید که ترافیک های خروجی از اینترفیس eth0 را به آدرس ۱٫۲٫۳٫۴ ترجمه کند و بفرستد..
iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 1.2.3.4
۳- Masquerading که نسخهی سادهای از SNAT میباشد که در واقع آدرس اینترفیس خروجی فایروال را به عنوان آدرس مبدا بستهها قرار میدهد.
در زیر مثالی آمده که در آن به iptables میگوییم که بصورت داینامیک تمام ترافیک خروجی از اینترفیس ppp0 را به آدرس همان اینترفیس ترجمه کند
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
۳-Mangle
این جدول فایروال را قادر میسازد تا تعداد زیادی از فیلدهای موجود در سرآیند هر بسته را که شامل مواردی همچون TOS(Type Of Service)، Mark، TTL(Time To Live) است، تغییر بدهد.
این جدول شامل پنج زنجیرهی Prerouting، Input، Forward، Output و Postrouting میباشد، در حالی که ipchains تنها شامل دو زنجیرهی Prerouting وOutput بود. IPtables کاربر را قادر میسازد تا علاوه بر این زنجیرههای از پیش تعریف شده در آن، به طور دلخواه نیز زنجیرههای دیگری را اضافه کند.
با توجه به توضیحات داده شده، روند گردش بستهها در نتفیلتر و IPtables را به کمک یک دیاگرام در زیر به طور کامل شرح میدهیم.
در نت فیلتر سه نوع جریان را برای بستهها در نظر میگیریم که عبارتند از :
۱-بستههایی که از شبکهای بیرونی میآیند و مقصدشان سیستم داخلی میباشد. این بستهها باید به ترتیب از زنجیرههای Prerouting و Input عبور کنند و در نهایت وارد سیستم شوند.
۲-بستههایی که از شبکهای بیرونی میآیند و مقصدشان شبکهای دیگر در آن طرف فایروال میباشد. این بستهها باید به سمت شبکه مقصد هدایت شوند، بنابراین باید به ترتیب از زنجیرههای Prerouting و Forward و Postrouting عبور کنند و در نهایت وارد شبکه خارجی شوند.
۳-بستههایی که درون خود سیستم تولید میشوند و باید به بیرون از سیستم هدایت شوند. این بستهها باید به ترتیب از زنجیرههای Output و Postrouting عبور کرده و از سیستم خارج شوند.
همانطور که در شکل میبینیم، تمام بستههایی که به فایروال میرسند تا وارد شوند باید ابتدا از زنجیرهی Prerouting عبور کنند. بستهها در هنگام عبور از این قسمت با دو جدول Mangle وNAT برخورد میکنند. در جدول NAT عمل DNAT روی بستهها انجام میشود تا آدرس مقصد واقعی آنها مشخص گردد. در جدول Mangle نیز در صورت نیاز فیلدهای سرآیند بستهها قبل از رسیدن به مرحله مسیریابی تغییر میکند. در صورتی که زیرسیستم Conntrack نیز به نتفیلتر IPtables اضافه شده باشد، عمل Connection Tracking نیز قبل از برخورد بستهها با دو جدول Mangle وPrerouting انجام میشود.
در واقع از mangle برای اضافه کردن flag های خاص TCP یا دستکاری در بسته IP استفاده مشود. برای مثال اگر بخواهیم ترافیک پورت ۸۰ و ۴۴۳ از اینترفیس خاصی که مد نظر ماست بیرون رود از mangle برای این کار استفاده می کنیم
در زیر مثالی برای استفاده از mangle آورده شده است.
iptables -t mangle -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –set-mss 1452