ورود/ایجاد حساب کاربری
   منوی اصلی
· خانه
· لیست کاربران
· جستجو
· آمار مشاهدات
· آرشیو مقالات


- شرح
· راهنمای نویسندگان
· درباره ما

   همکاری با نشریه
در صورتی که مایل به همکاری با نشریه هستید، می‌توانید در لیست پستی نشریه عضو شده و در جریان امور قرار گیرید. برای اطلاعات بیشتر، اینجا کلیک کنید.

   کاربران
سردبیر
هیچ مدیر کمکی حاضر
همکاران
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:0
جدیدترین:مجموع:2471
جدیدترین:جدیدترین:
ufumenarayu
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:1
مجموع:مجموع:1
کاربران حاضر
هیچ کاربر حاضری وجود ندارد

   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید

آشنایی با IPTABLES قسمت اول

(2298 مجموع کلمات موجود در متن)
(10293 بار مطالعه شده است)  نسخه چاپی

آشنایی با IPTABLES

قسمت اول

مقدمه
همانطور که می‌دانید، شبکه‌های کامپیوتری مبتنی بر گنو/لینوکس به طور فزاینده‌ای رو به گسترش هستند. در این بین یکی از عمده مشکلات، مشکلات مربوط به امنیت شبکه می‌باشد. Iptables یکی از کاراترین و انعطاف پذیرترین نرم‌افزارهای تولید شده در این زمینه است. با استفاده از این نرم افزار شما می توانید ترافیک ورودی و خروجی سیستم و شبکه را تحت کنترل خود درآورید. در این مقاله سعی شده تا حد زیادی مفاهیم و امکانات مربوط به این نرم افزار را در اختیار شما قرار دهیم.

اصطلاحات
این مقاله شامل تعدادی اصطلاحات خاص است که باید کمی بیشتر در مورد آنها توضیح دهم. در این قسمت آن دسته از اصطلاحاتی که بیشتر مورد استفاده است را برایتان تشریح می کنم:

DNAT یاDestination Network Address Translation
DNAT
تکنیکی برای ترجمه یا تفییر آدرس IP مقصد است. DNAT به همراه SNAT برای تسهیم یک آدرس IP معتبر (آدرس IP که در اینترنت قابلیت مسیریابی داشته باشد) به کار می‌رود. این کار به وسیله واگذار کردن (assigning) درگاههای مختلف در جهت یک آدرس IP اینترنتی معتبر و در نهایت مطلع کردن مسیریاب لینوکس از اینکه ترافیک را به کجا بفرستد، انجام می‌شود.

Stream
این اصطلاح مربوط به اتصالی است که بسته‌هایی را که به طریقی به یکدیگر مرتبط هستند، ارسال و دریافت می‌کند. به طور پایه در این مقاله از این اصطلاح برای اتصالاتی که دو یا چند بسته را به طور همزمان ارسال می کنند، استفاده می‌شود. در بحث TCP به اتصالی گفته می شود که یک SYN می‌فرستد و سپس با یک SYN/ACK پاسخ می‌دهد، اما اتصالی که با ارسال یک SYN یک ICMP Host unreaschable دریافت می‌کند نیز ممکن است. به زبان دیگر این اصطلاح در بعضی موارد به طور بی ربطی استفاده شده است.

SNAT یاSource Network Address Translation
این اصطلاح به تکنیکی در مورد تغییر آدرس مقصد یک بسته اشاره می‌کند.

State
این اصطلاح وضعیت فعلی یک بسته را مشخص می‌کند. این وضعیت هم می تواند مطابق RFC 793 - Transmission Control Protocol باشد و هم مطابق با حالت های تعریف شده توسط کاربر در جدولNetfilter/iptable . دقت کنید که حالت‌هایی که به صورت داخلی یا خارجی استفاده می‌شوند، به طور کامل از RFC 793 تبعیت نمی کند. دلیل اصلی این است که Netfilter مجبور است تا مفروضیات زیادی در مورد اتصالات و بسته ها بسازد.

۱) طریقه ی حرکت جداول و زنجیره ها یاchains
در این بخش به شما می‌گویم که بسته‌ها چگونه و به چه صورت از میان زنجیره‌های مختلف عبور می‌کنند و اینکه هر کدام از سفارش‌ها در کدام جدول می‌چرخد. این مطالب به شما کمک می کند تا قواعدهای (rule) مخصوص خودتان را بنویسید.
وقتی که یک بسته وارد firewall می‌شود، ابتدا به سخت افزار بر می‌خورد و سپس به درایور مربوطه فرستاده می‌شود. سپس، قبل از اینکه به نرم افزار مربوطه فرستاده شود، یا اینکه به میزبان دیگری فرستاده شود، از یک سری مراحل در داخل هسته عبور می کند.
ابتدا اجازه دهید که به بسته‌ای که مقصدش بر روی میزبان محلی است نگاهی بیندازیم. قبل از اینکه واقعا به برنامه کاربردی مربوطه تحویل داده شود، این بسته از مراحل زیر عبور می‌کند:

مرحله

جدول

زنجیره

توضیحات

1



بر روی خطوط(مثل اینرنت)

2



وارد رابط شده است(مانند eth0)

3

mangle

PREROUTING

این زنجیره به طور معمول جهت دستکاری بسته‌ها مانند TOSآنها، استفاده می شود.

4

nat

PREROUTING

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

5



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

6

mangle

INPUT

در این نقطه، به زنجیره INPUT از جدول mangle برخورد می‌کنیم. از این زنجیره جهت دستکاری بسته ها بعد از اینکه مسیریابی شدند و قبل از اینکه به پردازش مربوطه بر روی ماشین ارسال شوند، استفاده می‌شود.

7

filter

INPUT

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

8



پردازش یا application محلی(مانند برنامه های server/client)

دقت داشته باشید که این بسته‌ها از زنجیره ی INPUT رد می‌شوند نه زنجیره‌ی FORWARD. شاید در این لحظه کمی گیج شده باشید، اما با کمی تفکر و دقت می توانید دریابید که در حقیقت چه اتفاقی رخ داده است.

اکنون به بسته ای که از ماشین خودمان خارج می شود، نگاهی می اندازیم:

مرحله

جدول

زنجیره

توضیحات

1



پردازش یا برنامه local (مانند برنامه server/client)

2



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

3

mangle

OUTPUT

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

4

nat

OUTPUT

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

5

filter

OUTPUT

این نقطه محلی است که ما بسته‌های خروجی از ماشین محلی را فیلتر می کنیم.

6

mangle

POSTROUTING

زنجیره POSTROUTING در جدول mangle اساسا زمانی استفاده می‌شود که ما می‌خواهیم بسته‌ها را بعد از مسیریابی و قبل از خروجشان از ماشین محلی دستکاری کنیم. این زنجیره هم با بسته‌هایی که از firewall می‌گذرند و هم آنهایی که توسط خود firewall ساخته شده‌اند، برخورد دارد.

7

nat

POSTROUTING

اینجا محلی است که ما عمل SNAT را انجام می‌دهیم. در اینجا هم توصیه می‌شود که عمل فیلترینگ را انجام ندهید.

8



خروج بسته از یک یا چند رابط (مثل eth0)

9



بر روی سیم (مثل اینترنت)

حال فرض کنیم که بسته متعلق به یک شبکه دیگر است و قرار است از میزبان محلی به شبکه‌ی دیگری ارسال شود.بسته از طریق مراحلی که در زیر آورده شده است ارسال می‌شود:

مرحله

جدول

زنجیره

توضیحات

1



بر روی سیم (مثل اینترنت)

2



وارد رابط شده است(مانند eth0)

3

mangle

PREROUTING

این زنجیره به طور معمول جهت دستکاری بسته‌ها مانند TOS آنها، استفاده می شود.

4

nat

PREROUTING

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

5



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

6

mangle

FORWARD

بسته به زنجیره FORWARD از جدول mangle ارسال می‌شود. این کار ممکن است برای بسیاری از نیازهای مخصوص انجام شود، جایی که می‌خواهیم بسته ها را بعد از تصمیمات ابتدایی مسیریابی دستکاری کنیم و قبل از اینکه تصمیمات نهایی مسیریابی انجام شود و بسته ارسال شود.

7

filter

FORWARD

تنها بسته‌های forward شده به این زنجیره بیایند و در اینجا عمل فیلترینگ انجام می شود. توجه داشته باشید از آنجاییکه تمام ترافیک از این نقطه می‌گذرد، باید مجموعه قواعد خود را به درستی تنظیم کنید. زیرا دیگر وقتی برای تصحیح آنها نخواهید داشت.

8

mangle

POSTROUTING

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

9

nat

POSTROUTING

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

10



خروج بسته از یک یا چند رابط (مثل eth0)

11



بر روی سیم (مثل اینترنت)

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




اگر احساس کردید که به اطلاعات بیشتری نیاز دارید، می‌توانید از اسکریپت زیر استفاده کنید. این اسکریپت تعدادی rule به شما می‌دهد تا نحوه‌ی عملکرد جداول و زنجیره ها را ببینید.

#!/bin/bash
#
# rc.test-iptables - test script for iptables chains and tables.
#
# Copyright (C) 2001 Oskar Andreasson <bluefluxATkoffeinDOTnet>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program or from the site that you downloaded it
# from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA
#
#
# Filter table, all chains
#
iptables -t filter -A INPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter INPUT:"
iptables -t filter -A INPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter INPUT:"
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter OUTPUT:"
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter OUTPUT:"
iptables -t filter -A FORWARD -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter FORWARD:"
iptables -t filter -A FORWARD -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter FORWARD:"
#
# NAT table, all chains except OUTPUT which don't work.
#
iptables -t nat -A PREROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat PREROUTING:"
iptables -t nat -A PREROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat PREROUTING:"
iptables -t nat -A POSTROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat POSTROUTING:"
iptables -t nat -A POSTROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat POSTROUTING:"
iptables -t nat -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat OUTPUT:"
iptables -t nat -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat OUTPUT:"
#
# Mangle table, all chains
#
iptables -t mangle -A PREROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle PREROUTING:"
iptables -t mangle -A PREROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle PREROUTING:"
iptables -t mangle -I FORWARD 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle FORWARD:"
iptables -t mangle -I FORWARD 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle FORWARD:"
iptables -t mangle -I INPUT 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle INPUT:"
iptables -t mangle -I INPUT 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle INPUT:"
iptables -t mangle -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle OUTPUT:"
iptables -t mangle -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle OUTPUT:"
iptables -t mangle -I POSTROUTING 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle POSTROUTING:"
iptables -t mangle -I POSTROUTING 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle POSTROUTING:"

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


منبع: http://iptables-tutorial.frozentux.net/iptables-tutorial.html
مترجم: ایرج هدایتی shotorbaan@yahoo.co.uk

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.