نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

مفاهیم کلیدی iptables هستند.

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

تاریخچه خلقت

قبل از IPTables در لینوکس از فایروال IPFW استفاده می کردند که از BSD قرض گرفته شده بود. سپس با نسخه 2.4 هسته لینوکس، فایروال Netfilter و ابزار IPTables برای مدیریت آن آغاز شد. در روش شناسی کار آن، تمام جنبه ها حفظ شد و کمی از نظر عملکردی گسترش یافت.

ساختار و طراحی IPTables

پس از ورود به فایروال، بسته از چندین بررسی عبور می کند. این می تواند یک چک جمع یا هر تحلیل دیگری در سطح هسته باشد. سپس نوبت به عبور از زنجیره PREROUTING می رسد. بعد، بررسی می شود که مطابق آن تغییر جهت به زنجیره بعدی رخ می دهد. اگر بسته آدرسی نداشته باشد، به عنوان مثال، در TCP، آنگاه به زنجیره FORWARD ارسال می شود. در مواردی که آدرس خاصی وجود دارد، زنجیره INPUT دنبال می‌شود و سپس به آن شیاطین یا سرویس‌هایی که برای آنها در نظر گرفته شده است. پاسخ آنها نیز باید از چندین زنجیره عبور کند، به عنوان مثال OUTPUT. آخرین حلقه در این فرآیند زنجیره POSTROUTING است.

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

جداول به نوبه خود حاوی چندین قانون هستند. اساساً یک قانون شرط خاصی است که بسته مورد بررسی باید آن را داشته باشد. بسته به نتیجه، عمل خاصی روی بسته انجام می شود.

بنابراین، بسته با عبور از تمام مراحل شبکه، به طور متوالی از تمام زنجیره ها بازدید می کند و در هر کدام از نظر مطابقت با شرط یک قانون خاص بررسی می شود. اگر جدول توسط کاربر ایجاد نشده باشد، عمل پیش فرض انجام می شود، اساسا ACCEPT، که به شما امکان می دهد به حرکت رو به جلو ادامه دهید، یا DROP، که بسته را متوقف می کند.

زنجیره های از پیش تعیین شده در دسته بندی های زیر قرار می گیرند:

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

علاوه بر زنجیره های داخلی، کاربران می توانند زنجیره های خود را ایجاد یا حذف کنند.

قوانین IPTables را مشاهده و مدیریت کنید

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

فرمت فرمان به این صورت است: فرمان iptables [-t name of the table در حال پردازش] به نام [معیار] [عمل انجام شده].

هر چیزی که در آن باشد را می توان حذف کرد. اگر این پارامتری است که یک جدول را مشخص می کند، از فیلتر استفاده می شود. برای استفاده از یک نام خاص، باید سوئیچ -t را اضافه کنید. دستور فراخوانی به شما اجازه می دهد تا عمل مورد نیاز را فعال کنید، به عنوان مثال، یک قانون IPTables را اضافه کنید یا آن را حذف کنید. "معیارها" پارامترهایی را نشان می دهد که انتخاب توسط آنها انجام می شود. و در «عمل» عملی است که در صورت تحقق شرط لازم است انجام شود.

دستورات برای ایجاد و مشاهده قوانین IPTables

  • ضمیمه (-A).هنگام استفاده از دستور، زنجیره و جدولی را که می خواهید قانون مورد نیاز را به آن اضافه کنید، مشخص می کنید. ارزش تیم این است که این کار را در انتهای لیست انجام می دهد.
  • حذف شده).همانطور که از نام آن پیداست، یک قانون را حذف می کند. به عنوان پارامتر، می توانید هم نام کامل و هم اعداد اختصاص داده شده به آنها را مشخص کنید.
  • تغییر نام زنجیره (-E).نام زنجیره را تغییر می دهد. دستور نام قدیمی و سپس نام جدید را مشخص می کند.
  • فلاش (-F).پاک کردن کاملاً تمام قوانین یک جدول خاص.
  • Insert(-I).این دستور قانون مورد نیاز را در مکان مشخص شده با شماره وارد می کند.
  • لیست (-L).قوانین Iptables را مشاهده کنید. اگر جدولی مشخص نشده باشد، از فیلتر پیش فرض استفاده می شود.
  • خط مشی (-P).خط مشی پیش فرض برای زنجیره مشخص شده استفاده می شود.
  • (-R) را جایگزین کنید.قانون زیر تعداد مشخص شده را به مقدار مورد نیاز تغییر می دهد.
  • حذف زنجیره (-X).این دستور تمام زنجیره های ایجاد شده را حذف می کند. فقط موارد از پیش نصب شده باقی خواهند ماند.
  • صفر (-Z).شمارنده های داده های ارسال شده در زنجیره مشخص شده را بازنشانی می کند.

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

آنها را می توان به سه نوع تقسیم کرد:

  • معیارهای عمومی. آنها را می توان برای هر قاعده ای مشخص کرد. آنها نیازی به اتصال افزونه ها و ماژول های خاصی ندارند و همچنین به پروتکل مورد استفاده بستگی ندارند.
  • معیارهای کلی نیستآنها با استفاده از معیارهای عمومی در دسترس می شوند.
  • صریح.برای استفاده از این نوع، باید پلاگین های مخصوص netfilter را متصل کنید. علاوه بر این، باید از سوئیچ -m در دستور استفاده کنید.

شایان ذکر است که کمی در مورد پارامترهایی که در هنگام تجزیه و تحلیل بسته ها با آنها مواجه می شوند صحبت کنیم:

  • پروتکل (-p).پروتکل را نشان می دهد.
  • منبع(-ها).این پارامتر آدرس IP منبعی را که بسته از آن آمده است تعیین می کند. از چند طریق می توان آن را مشخص کرد. یک میزبان خاص، آدرس یا یک زیرشبکه کامل.
  • مقصد (-d).آدرس مقصد بسته درست مانند مورد قبلی، می توان آن را به چندین روش توصیف کرد.
  • رابط داخلی (-i).رابط ورودی بسته را مشخص می کند. عمدتاً برای NAT یا در سیستم هایی با چندین رابط استفاده می شود.
  • رابط خارجی (-o).رابط خروجی

چند نمونه

برای مشاهده قوانین nat IPTables؟ شما باید از دستور - "iptables -L -t nat" استفاده کنید. وضعیت کلی فایروال - "iptables -L -n -v" را بیابید. علاوه بر این، این دستور به شما امکان می دهد قوانین IPTables موجود در سراسر سیستم را مشاهده کنید. یک قانون را در یک مکان مشخص در جدول وارد کنید، به عنوان مثال، بین خطوط اول و دوم - "iptables -I INPUT 2 -s 202.54.1.2 -j DROP". سپس ببینید آیا اضافه شده است - "iptables -L INPUT -n --line-numbers".

برای مسدود کردن یک آدرس خاص، به عنوان مثال، 12.12.12.12 - "iptables -A INPUT -s 12.12.12.12 -j DROP".

راهنما با iptables - "man iptables". اگر به اطلاعاتی در مورد یک دستور خاص نیاز دارید، از "iptables -j DROP -h" استفاده کنید.

سرانجام

شما باید از دستورات IPTables با احتیاط استفاده کنید، زیرا پیکربندی نادرست (به دلیل ناآگاهی) می تواند منجر به خرابی شبکه یا شکست کامل شود. بنابراین، قبل از پیکربندی، ارزش مطالعه دقیق دستورالعمل ها و دستورالعمل ها را دارد. در دستان ماهر، IPTables را می توان به محافظ قابل اعتماد اتصالات شبکه تبدیل کرد. مدیران سیستم به طور فعال از این ابزار برای ایجاد اتصالات جدا شده از دسترسی غیرمجاز استفاده می کنند.

چندین بار با این واقعیت مواجه شده ام که حتی افراد باهوش هم اشتباهات کاملا غیر قابل بخشش را مرتکب می شوند. به عنوان مثال، درگاهی که پایگاه داده روی آن اجرا می شود را به کل اینترنت باز می کنند. این اغلب برای مبتدیان DevOps اتفاق می افتد که تمام زندگی خود را کد می نویسند و اکنون مسئولیت آنها شامل راه اندازی سرور نیز می شود. آموزش های خوبی در اینترنت در مورد راه اندازی اولیه فایروال در لینوکس و سایر *nix وجود دارد، اما اغلب اینها برگه هایی در بسیاری از صفحه نمایش ها هستند. بنابراین، امیدوارم این آموزش مختصرتر برای کسی مفید باشد.

مهم!بسیار آسان است که به اشتباه یک ماشین را چنان فایروال کنید که دیگر نتوانید به آن دسترسی پیدا کنید. این امر به ویژه برای میزبانی ابری صادق است. به عنوان مثال، اگر در AWS همه پورت ها را از 1024 تا 65536 ببندید، به دلایلی دستگاه پس از راه اندازی مجدد بسته می شود. همه چیز به طور کلیپورت ها اگر در فضای ابری میزبانی می کنید، بهتر است فایروال را از طریق رابط وب ارائه شده توسط هاست راه اندازی کنید.

یک نکته کوچک در مورد اصطلاحات فایروال ساخته شده در هسته لینوکس Netfilter نام دارد و iptables ابزاری برای مدیریت این فایروال است. بسیاری از مردم به اشتباه معتقدند که فایروال iptables نامیده می شود. این اشتباه است. با گفتن چیزی مانند "من بسته ها را با استفاده از iptables فیلتر می کنم"، نادانی خود را به دیگران نشان می دهید.

به طور کلی، چه نوع مشکلاتی را می توان با استفاده از Netfilter حل کرد:

  • با استفاده از پروتکل‌های خاص (IPv4/IPv6، TCP/UDP) از آدرس‌های مشخص شده (IP، MAC) یا زیرشبکه‌ها، ترافیک ورودی به پورت‌های خاص را مجاز/رد کنید.
  • همه چیز برای ترافیک خروجی یکسان است.
  • برای مثال، می توانید تمام بسته های ICMP را به طور کامل نادیده بگیرید.
  • راه اندازی NAT، به مقاله در مورد روتر مبتنی بر Raspberry Pi مراجعه کنید.
  • شنیده‌ام که گوروهای واقعی می‌توانند DDoS و حفاظت از نیروی brute force را راه‌اندازی کنند، دسترسی شبکه را به برنامه‌ها، کاربران یا گروه‌های خاص محدود کنند، و کارهای احمقانه دیگری انجام دهند.

توجه داشته باشم که برنامه iptables شخصاً در ابتدا در مقایسه با ipfw در FreeBSD برای من بسیار ناخوشایند به نظر می رسید. خوشبختانه، پس از مدتی کار با آن، همه این پرچم های زیادی مانند -A، -D، -j و دیگران آشنا می شوند، پس صبور باشید. بیایید به دستورات اساسی نگاه کنیم.

نمایش همه قوانین:

iptables -L -n

ممکن است متوجه شوید که Netfilter دارای "زنجیره" است - حداقل INPUT، OUTPUT و FORWARD. من شخصاً یک زنجیر DOCKER نیز روی دستگاه خود دارم. برای اولین بار، می توانید دو مورد اول را به ترتیب به عنوان تمام ترافیک ورودی و خروجی در نظر بگیرید و به طور موقت بقیه را فراموش کنید. این احتمال وجود دارد که شما هرگز به آنها نیاز نداشته باشید.

حذف همه قوانین:

iptables -F

سیاست (رفتار پیش فرض) زنجیره را تغییر دهید:

iptables -P INPUT DROP
iptables -P INPUT ACCEPT

عدم دسترسی از میزبان/زیر شبکه:

iptables -A INPUT -s 123.45.67.89 -j DROP
iptables -A INPUT -s 123.45.0.0/ 16 -j DROP

همچنین می توانید از نام های دامنه استفاده کنید:

iptables -A INPUT -s example.ru -j DROP

ممنوعیت اتصالات خروجی:

iptables -A OUTPUT -d 123.45.67.89 -j DROP

می توانید از نفی در قوانین استفاده کنید:

iptables -A INPUT ! -s 123.45.67.89 -j DROP

حذف یک قانون با شماره آن در زنجیره:

iptables -D INPUT 1

حذف یک قانون بر اساس آنچه انجام می دهد:

iptables -D INPUT -s 123.45.67.89 -j DROP

گزینه -p پروتکل را مشخص می کند. می توانید از همه، icmp، tcp، udp یا شماره پروتکل از /etc/protocols استفاده کنید. پرچم - -sport نشان دهنده پورتی است که بسته از آنجا ارسال شده است و - -dport پورت مقصد را مشخص می کند:

iptables -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

درج یک قانون در ابتدای یک زنجیره:

iptables -I INPUT ...

یا می توانید موقعیت خاصی را مشخص کنید:

iptables -I INPUT 3 ...

iptables-save > /etc/ iptables.rules

قوانین بازیابی:

iptables-restore< / etc/ iptables.rules

حال بیایید به چند نمونه عملی نگاه کنیم. به عنوان مثال، شبیه سازی netsplit در آزمایشی که رفتار برنامه ای را که از Akka Cluster استفاده می کند بررسی می کند، به این صورت است:

run(node1, s "iptables -A INPUT -s $node2 -j DROP")
run(node1, s "iptables -A INPUT -s $node3 -j DROP")
run(node1, s "iptables -A OUTPUT -d $node2 -j DROP")
run(node1, s "iptables -A OUTPUT -d $node3 -j DROP")

بازیابی دقیقاً به همین صورت انجام می شود، فقط پرچم -A با پرچم -D جایگزین می شود.

مثالی دیگر. باید دریابید که کدام پورت ها به دستگاه گوش می دهند و پورت های غیر ضروری را ببندید. سوار ماشین می شویم و می گوییم:

netstat -tuwpln

خروجی نمونه:

اتصالات اینترنتی فعال (فقط سرورها)
Proto Recv-Q Send-Q آدرس محلی آدرس خارجی وضعیت PID/نام برنامه
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3210/nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 1789/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 797/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 990/postgres

Nginx و SSHd به اینترنت نگاه می کنند، این طبیعی است. PostgreSQL فقط به رابط محلی گوش می دهد، بنابراین هیچ مشکلی با آن وجود ندارد. اما epmd باقی می ماند (می توانید آن را با telnet از دستگاه دیگری بررسی کنید) و این خوب نیست. شما فقط می توانید پورت 4369 را ببندید. نحوه انجام این کار در بالا نشان داده شد. یا می‌توانید حتی فراتر رفته و تمام اتصالات خارج به پورت 81 و بالاتر را رد کنید.

مقدمه و تاریخچه

نت فیلتر- یک فایروال (با نام مستعار فایروال، فایروال مستعار، فایروال مستعار...) از نسخه 2.4 در هسته لینوکس ساخته شده است. Netfilter توسط ابزار کنترل می شود iptables(برای IPv6 - ip6tables). قبل از netfilter/iptablesبود Ipchains، که در هسته های لینوکس 2.2 گنجانده شده بود. قبل از ipchains در لینوکس به اصطلاح وجود داشت ipfw (فایروال IPV4)، از BSD منتقل شده است. ابزار مدیریت - ipfwadm. پروژه netfilter/iptables در سال 1998 تأسیس شد. نویسنده، Rusty Russell است (او همچنین تحولات گذشته را رهبری کرده است). در سال 1999، Netfilter Core Team (به اختصار coreteam) تشکیل شد. فایروال توسعه یافته به طور رسمی netfilter نام گرفت. در آگوست 2003، هارالد ولته سرپرست تیم مرکزی شد.

پروژه ها ipchainsو ipfwadmعملکرد پشته پروتکل هسته لینوکس را از قبل از ظهور تغییر داد فیلتر شبکههیچ شرطی در معماری هسته برای افزودن ماژول های مدیریت بسته اضافی وجود نداشت. iptablesایده اصلی را حفظ کرد ipfwadm- فهرستی از قوانین متشکل از معیارها و عملی که اگر بسته معیارها را برآورده کند، انجام می شود. که در ipchainsیک مفهوم جدید معرفی شد - توانایی ایجاد زنجیره های جدید قوانین و انتقال بسته ها بین زنجیره ها، و در iptables این مفهوم به چهار جدول (در فیلتر شبکه مدرن - بیش از چهار) گسترش یافت، زنجیره های قوانین را بر اساس وظیفه تعیین کرد: فیلتر کردن، NAT و اصلاح بسته ها. همچنین، iptables قابلیت‌های تشخیص وضعیت لینوکس را گسترش داده است و اجازه ایجاد فایروال‌هایی را می‌دهد که در سطح جلسه کار می‌کنند.

معماری Netfilter/iptables

پیش نیازها ()

همانطور که در بالا ذکر شد، برای اینکه Netfilter کار کند، به نسخه هسته 2.6 (یا حداقل 2.3.15) نیاز دارید. علاوه بر این، در صورت لزوم، تنظیمات زیر در دسترس هستند: CONFIG_NETFILTER، CONFIG_IP_NF_IPTABLES، CONFIG_IP_NF_FILTER (جدول فیلتر)، CONFIG_IP_NF_NAT (جدول nat)، CONFIG_BRIDGE_NETFILTER، و همچنین تعداد زیادی ماژول اتصال CONFIGN_IP_NF: F_FTP (ماژول کمکی برای ردیابی FTP اتصالات)، CONFIG_IP _NF_MATCH_* (انواع اضافی الگوهای تطبیق بسته: LIMIT، MAC، MARK، MULTIPORT، TOS، TCPMSS، STATE، NCLEAN، OWNER)، CONFIG_IP_NF_TARGET_* (عملکردهای اضافی در قوانین: REJERACT, REJERACT, REJERACT, REJERACT, REJERACT, REJERACT, TCPMSS, ), CONFIG_IP_NF_COMPAT_IPCHAINS برای سازگاری با ipchains، CONFIG_BRIDGE_NF_EBTABLES و CONFIG_BRIDGE_EBT_* برای کار در حالت پل، سایرین CONFIG_IP_NF_* و CONFIG_IP6_NF_*. همچنین تعیین CONFIG_PACKET مفید است.

همانطور که دیدیم، جدول natو خرد کردنمی تواند گیرنده یا فرستنده یک بسته شبکه را تغییر دهد. به همین دلیل است که بسته شبکه چندین بار در مقابل جدول مسیریابی بررسی می شود.

مکانیسم تشخیص حالت (کنتراک)

در بالا در متن، مفهوم «تعریف دولت‌ها» چندین بار ذکر شد که جای بحث جداگانه‌ای دارد، اما با این وجود، در پست فعلی به طور خلاصه به این موضوع می‌پردازم. به طور کلی، مکانیسم تعیین حالت ها (ماشین حالت مستعار، مستعار ارتباطعمل مسیر ing، با نام مستعار کنتراک) بخشی از فیلتر بسته است و به شما امکان می دهد تعیین کنید که یک بسته به کدام اتصال / جلسه تعلق دارد. Contrackوضعیت همه بسته ها را تجزیه و تحلیل می کند به جز مواردی که به عنوان علامت گذاری شده اند NOTRACK در جدول خام. بر اساس این حالت، بسته متعلق به تعیین می شود جدیداتصال (وضعیت جدید)، قبلا، پیش از این ایجاداتصال (وضعیت ایجاد), اضافیبه یک موجود از قبل ( مربوط)، و یا به " به دیگری"(غیرقابل تشخیص) اتصال (وضعیت بی اعتبار). وضعیت بسته با تجزیه و تحلیل هدرهای بسته TCP ارسالی تعیین می شود. ماژول contrackبه شما امکان می دهد یک فایروال در سطح جلسه (پنجم) پیاده سازی کنید. برای کنترل این مکانیسم، از ابزار کمکی استفاده کنید کنتراک،و همچنین پارامتر ابزار iptables: -m contrackیا -m ایالت(منسوخ شده). conntrack حالات اتصالات فعلی را در هسته ذخیره می کند. آنها را می توان در فایل /proc/net/nf_conntrack (یا /proc/net/ip_conntrack) مشاهده کرد.

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

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

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

به طور کلی فرمت دستور به صورت زیر است:

Iptables [-t]

تمام پارامترها در پرانتز - اختیاری. پیش فرض است جدول فیلتر، اگر نیاز به تعیین جدول دیگری دارید، باید از کلید استفاده کنید -tنشان می دهد نام. پس از مشخص شدن نام جدولی که عمل را مشخص می کند ( مثلا: درج یک قانون یا اضافه کردن یک قانون به انتهای زنجیره یا حذف یک قانون). پارامترهای انتخاب را تنظیم می کند. نشان می دهد که اگر معیارهای انتخاب در قانون مطابقت داشته باشند، چه اقدامی باید انجام شود ( مثلا: بسته را به زنجیره دیگری از قوانین منتقل کنید، بسته را رها کنید، یک پیام خطا به منبع صادر کنید...).

در زیر دستورات و پارامترهای ابزار iptables آمده است:

پارامتر شرح مثال
تیم ها
--پیوست (-A) قانون مشخص شده را به انتهای لیست در زنجیره مشخص شده و جدول مشخص شده اضافه کنید. iptables -A FORWARD معیار -j action
--حذف شده) قانون(های) مشخص شده توسط اعداد یا قانون(ها) را حذف می کند. مثال اول تمام قوانین با اعداد 10،12 را در تمام زنجیره‌ها، در جداول فیلتر حذف می‌کند، مثال دوم قانون مشخص‌شده را از جدول mangle در زنجیره PREROUTING حذف می‌کند. iptables -D 10.12
iptables -t mangle -D PREROUTING معیارها -j action
--تغییر نام زنجیره (-E) تغییر نام زنجیره iptables -E OLD_CHAIN‏NEW_CHAIN
- فلاش (-F) تمام قوانین جدول فعلی را پاک می کند. برای تمام بسته هایی که به اتصالات از قبل ایجاد شده مربوط می شوند، عمل ترمینال ACCEPT - skip را اعمال کنید iptables -F
--درج (-I) قانون مشخص شده را در مکان مشخص شده توسط شماره درج می کند. iptables -I FORWARD 5 معیار -j action
--list (به اختصار -L) قوانین موجود را مشاهده کنید (بدون تعیین صریح جدول - جدول فیلتر همه زنجیره ها نمایش داده می شود). iptables -L
-- سیاست (-P) خط مشی پیش فرض را برای زنجیره داده شده تنظیم می کند. iptables -t mangle -P PREROUTING DROP
-- جایگزین (-R) قانون مشخص شده توسط عدد را با قانون مشخص شده در معیارها جایگزین می کند. iptables -R POSROUTING 7 | معیار -j اقدام
--حذف زنجیره (-X) تمام زنجیره های ایجاد شده به صورت دستی را بردارید (فقط INPUT، OUTPUT، FORWARD، PREROUTING و POSTROUTING استاندارد را نگه دارید). iptables -X
--صفر (-Z) شمارنده های داده های ارسال شده در زنجیره را بازنشانی می کند. iptables -Z INPUT
گزینه ها
--عددی (-n) آدرس ها و پروتکل ها را در حین خروجی حل نمی کند.
--خط-اعداد اعداد قاعده را در خروجی مشخص کنید (می توان در ارتباط با -L استفاده کرد). iptables -L --line-numbers
--کمک (-h) ما بدون او کجا خواهیم بود؟
-t جدول نام جدولی را که عمل باید روی آن انجام شود را مشخص می کند. مثال جدول nat را در همه زنجیره‌ها بازنشانی می‌کند. iptables -t nat -F
-- پرحرف (-v) نتیجه گیری تفصیلی iptables -L -v

معیارها (پارامترها) برای انتخاب بسته های شبکه دستور iptables

معیارهای انتخاب بسته های شبکهبه طور مخفیانه به چند گروه تقسیم می شوند: معیارهای عمومی، معیارهای ضمنی، معیارهای صریح. را می توان در هر قاعده ای استفاده کرد، آنها به نوع پروتکل بستگی ندارند و نیازی به بارگیری ماژول های افزونه ندارند. (من آن را صدا می کنم غیر عمومی) معیارهایی که به طور ضمنی بارگذاری می شوند و در دسترس می شوند، برای مثال، هنگام تعیین یک معیار کلی --پروتکل tcp|udp|icmp. قبل از استفاده، باید وصل شوید گسترش اضافی(اینها عجیب هستند پلاگین هابرای نت فیلتر). پسوندهای اضافیبا استفاده از پارامتر بارگیری می شود -mیا --همخوانی داشتن. به عنوان مثال، اگر قرار است از معیارها استفاده کنیم حالت، پس باید به صراحت این را در خط قانون مشخص کنیم: -m ایالتدر سمت چپ معیار استفاده شده است. تفاوت بین واضحو ضمنی غیر عمومیمعیار این است که موارد صریح باید به طور صریح بارگذاری شوند و موارد ضمنی به طور خودکار بارگذاری می شوند.

قابل استفاده در تمامی معیارها امضا کردن!قبل از مقدار معیار این بدان معنی است که این قانون تمام بسته هایی را که در آن قرار دارند را پوشش می دهد با این پارامتر مطابقت ندارد. مثلا: معیار --پروتکل! tcpبه این معنی خواهد بود که تمام بسته هایی که نهآیا پروتکل های TCP مشمول قانون هستند. با این حال، آخرین نسخه های iptables (به ویژه، 1.4.3.2 و بالاتر) دیگر از این نحو پشتیبانی نمی کنند و نیاز به استفاده از --پروتکل! tcp، آ ! --پروتکل tcp، خطای زیر را می دهد:

استفاده از نفی درون موضعی (`--گزینه! این`) به نفع برون‌جایگزین شده (`! --گزینه این`) منسوخ شده است.

در زیر به صورت جدول آورده شده است پارامترهای انتخاب بسته رایج:

پارامتر شرح مثال
پارامترهای رایج
--پروتکل
(به اختصار -p)
پروتکل را تعریف می کند. گزینه های tcp، udp، icmp، همه یا هر پروتکل دیگری که در /etc/protocols تعریف شده است iptables -A INPUT -p tcp
-- منبع
(-s، --src)
آدرس IP منبع بسته. به چند صورت قابل تعریف است:
  • میزبان واحد: host.domain.tld یا آدرس IP: 10.10.10.3
  • استخر آدرس (زیر شبکه): 10.10.10.3/24 یا 10.10.10.3/255.255.255.0

اکیداً توصیه می‌شود که از نام‌های دامنه‌ای که برای تفکیک به جستارهای DNS نیاز دارند، استفاده نکنید، زیرا ممکن است DNS netfilter در مرحله پیکربندی به درستی کار نکند. همچنین، توجه داشته باشید که نام ها فقط یک بار حل می شوند - هنگام اضافه کردن یک قانون به زنجیره. متعاقباً ممکن است آدرس IP مربوط به این نام تغییر کند ، اما این روی قوانین قبلاً نوشته شده تأثیری نخواهد گذاشت (آدرس قدیمی در آنها باقی خواهد ماند). اگر نام دامنه ای را مشخص کنید که به چندین آدرس IP حل شود، یک قانون جداگانه برای هر آدرس اضافه می شود.

iptables -A INPUT -s 10.10.10.3
-- مقصد
(-d)
آدرس IP مقصد بسته. را می توان به روش های مختلفی تعریف کرد (به --source مراجعه کنید). iptables -A INPUT --destination 192.168.1.0/24
---in-interface
(-من)
رابطی را که بسته در آن وارد شده است را شناسایی می کند. مفید برای NAT و ماشین هایی با چندین رابط شبکه. در زنجیره های INPUT، FORWARD و PREROUTING استفاده می شود. می توان از علامت "+" استفاده کرد، سپس به معنای استفاده از تمام رابط هایی است که با نام + شروع می شوند (مثلا eth+ - همه رابط های eth). iptables -t nat -A PREROUTING --in-interface eth0
-- خارج از رابط
(-o)
رابطی را که بسته از آن خارج می شود را مشخص می کند. مفید برای NAT و ماشین هایی با چندین رابط شبکه. در زنجیره های OUTPUT، FORWARD و POSTROUTING استفاده می شود. امکان استفاده از علامت "+" وجود دارد. iptables -t nat -A POSTROUTING --in-interface eth1
پارامترهای ضمنی (غیر مشترک)
-p proto -h نمایش کمک در مورد پارامترهای ضمنی پروتکل. iptables -p icmp -h
---source-port
(--ورزش)
پورت منبع، فقط برای پروتکل های --protocol tcp یا --protocol udp امکان پذیر است iptables -A INPUT --protocol tcp --source-port 25
--بندر مقصد
(--dport)
پورت مقصد، فقط برای پروتکل های --protocol tcp یا --protemocol udp امکان پذیر است iptables -A INPUT --پروتکل udp --destination-port 67
پارامترهای صریح
-m حالت --state (منسوخ شده)
موسوم به
-m conntrack --ctstate

وضعیت اتصال. گزینه های موجود:

  • جدید(همه بسته ها در حال ایجاد یک اتصال جدید)
  • ایجاد(همه بسته های متعلق به اتصال برقرار شده)
  • مربوط(بسته هایی که متعلق به یک اتصال ایجاد شده نیستند، اما با آن مرتبط هستند. برای مثال، FTP در حالت فعال از اتصالات مختلفی برای انتقال داده استفاده می کند. این اتصالات مرتبط هستند.)
  • بی اعتبار(بسته هایی که به دلایلی قابل شناسایی نیستند. به عنوان مثال، خطاهای ICMP که به اتصالات موجود تعلق ندارند)
  • و غیره (جزئیات بیشتر در مستندات)
iptables -A INPUT -m حالت --state NEW,ESTABLISHEDiptables -A INPUT -m conntrack --ctstate NEW,ESTABLISHED
-m مک --mac-source آدرس MAC گره شبکه ای که بسته را ارسال کرده است را مشخص می کند. آدرس MAC باید به شکل XX:XX:XX:XX:XX:XX مشخص شود. -m mac --mac-source 00:00:00:00:00:0

اقدامات روی بسته ها

این عنوان به طور صحیح تر به صورت " اقدامات روی بسته هایی که با معیارهای انتخاب مطابقت دارندبنابراین، برای به انجام رساندن هر اقدامات روی بسته ها، باید کلید را مشخص کنید -j (--پرش)و مشخص کنید که چه اقدام خاصی باید انجام دهید.

اقدامات روی بسته ها می توانند مقادیر زیر را داشته باشند:

  • تایید کنید- بسته از این زنجیره خارج می شود و به زنجیره بعدی منتقل می شود (به معنای واقعی کلمه - ACCEPT).
  • رها کردن- بسته ای را که شرایط را برآورده می کند دور بریزید، در حالی که بسته به جدول/زنجیره دیگر منتقل نمی شود.
  • رد کنید- با ارسال یک پیام ICMP به فرستنده، بسته را دور بیندازید، در حالی که بسته به جداول/زنجیره های دیگر منتقل نمی شود.
  • برگشت- بسته را به زنجیره قبلی برگردانید و عبور آن را از قانون بعدی ادامه دهید.
  • SNAT منبعدر بسته بندی فقط در زنجیر قابل استفاده است پس از تولید و خروجیدر جداول nat
  • DNAT- ترجمه آدرس را اعمال کنید قرار ملاقات هادر بسته بندی قابل استفاده به صورت زنجیره ای پیش پروتینگدر جدول nat (در موارد استثنایی - در زنجیره OUTPUT)
  • LOG- بسته را وارد کنید (ارسال شده به دیمون) و آن را با قوانین دیگر پردازش کنید.
  • بالماسکه- به جای آن استفاده می شود SNATدر صورت وجود اتصال با IP پویا (مجاز است فقط در زنجیره نشان داده شود پس از استراوتینگجداول nat).
  • علامت- برای تنظیم برچسب روی بسته ها و انتقال به قوانین بعدی برای پردازش استفاده می شود.
  • و غیره.

علاوه بر این اقدامات، موارد دیگری نیز وجود دارد که می توان در مستندات یافت (شاید به زودی با توسعه موضوع مقاله را تکمیل کنم). برخی از اقدامات دارای پارامترهای اضافی هستند.

جدول زیر نمونه ها و توضیحات پارامترهای اضافی را ارائه می دهد:

پارامتر شرح مثال
DNAT (ترجمه آدرس شبکه مقصد)
-- به مقصد مشخص می کند که کدام آدرس IP باید به عنوان آدرس مقصد جایگزین شود. در مثال، در تمام بسته های پروتکل tcp که به آدرس 1.2.3.4 می رسند، این آدرس با 4.3.2.1 جایگزین می شود. iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -j DNAT --to-destination 4.3.2.1
LOG
---log-level برای تنظیم سطح ورود به سیستم (). در مثال، حداکثر سطح ثبت برای همه بسته های tcp در جدول فیلتر زنجیره FORWARD تنظیم شده است. iptables -A FORWARD -p tcp -j LOG --log-level debug
---log-پیشوند متن (پیشوند) را که قبل از همه پیام ها قرار می گیرد، مشخص می کند iptables. (بسیار راحت برای بعد) پیشوند می تواند تا 29 کاراکتر، از جمله فاصله، داشته باشد. در مثال، تمام بسته‌های tcp در جدول فیلتر زنجیره INPUT با پیشوند INRUT-filter به syslog ارسال می‌شوند. iptables -A INPUT -p tcp -j LOG --log-prefix "INRUT-filter"
--log-ip-Options به شما امکان می دهد اطلاعات مختلفی را از سربرگ بسته IP وارد کنید. iptables -A FORWARD -p tcp -j LOG --log-ip-options
و غیره...

این نظریه در مورد فیلتر شبکه netfilter/iptables به پایان می رسد. در مقاله بعدی مثال های کاربردی برای تسلط بر این نظریه خواهم آورد.

خلاصه

در این مقاله به طور خلاصه به مفاهیم اولیه فیلتر شبکه در لینوکس پرداختیم. بنابراین، زیر سیستم netfilter/iptables بخشی از هسته لینوکس است و برای سازماندهی طرح های مختلف فیلتر و دستکاری بسته های شبکه استفاده می شود. در این حالت، هر بسته بسته به اینکه برای یک سیستم محلی یا غیر محلی در نظر گرفته شده باشد، از رابط شبکه ای که به آن رسیده است و از مسیر زنجیره ای خاصی عبور می کند. هر زنجیره از مجموعه ای از جداول شامل مجموعه ای متوالی از قوانین تشکیل شده است. هر قانون شامل یک معیار/معیار خاص برای انتخاب یک بسته شبکه و برخی اقدامات با بسته ای است که این معیارها را برآورده می کند. مطابق با قوانین داده شده، هر عملی را می توان بر روی بسته انجام داد (به عنوان مثال، انتقال به زنجیره بعدی/دیگر، تنظیم مجدد بسته، اصلاح محتویات یا هدرها و غیره). هر زنجیره و هر جدول هدف، کارایی و جایگاه خاص خود را در مسیر بسته بندی دارد. به عنوان مثال، برای فیلتر کردن بسته ها، از جدول فیلتر استفاده می شود که در سه زنجیره استاندارد وجود دارد و می تواند در زنجیره های مشخص شده توسط کاربر قرار گیرد. مسیر بسته یا به رابط شبکه خروجی یا با تحویل به یک فرآیند/برنامه محلی خاتمه می یابد.

ادبیات

اطلاعات بسیار جالبی به زبان روسی در اینجا موجود است:

  • http://www.opennet.ru/docs/RUS/iptables/
  • http://ru.wikibooks.org/wiki/Iptables

مطالب عمیق تر به زبان بورژوایی در اینجا موجود است:

  • http://www.frozentux.net/documents/ipsysctl-tutorial/
  • http://www.netfilter.org/documentation/index.html

با احترام، مک سیم!

یک فایروال قابل اعتماد یکی از مهمترین جنبه های محافظت از هر سیستم عامل مدرن است. اکثر توزیع های لینوکس حاوی چندین ابزار مختلف فایروال هستند. این راهنما به یکی از محبوب ترین آنها - iptables اختصاص دارد.

بنابراین، iptables فایروال استانداردی است که به طور پیش‌فرض در اکثر توزیع‌های لینوکس گنجانده شده است (nftables برای جایگزینی آن در حال توسعه است). در واقع iptables یک رابط کاربری برای مدیریت سیستم netfilter است که به نوبه خود پشته شبکه لینوکس را مدیریت می کند. iptables هر بسته دریافتی را با مجموعه ای از قوانین تعیین شده مقایسه می کند و سپس تصمیم می گیرد که در مرحله بعد با آن چه کاری انجام دهد.

بحث در مورد این بود که iptables دقیقا چگونه کار می کند. این مقاله بر روی مثال‌های عملی تمرکز دارد که نشان می‌دهد چگونه یک مجموعه قوانین اساسی برای سرور اوبونتو 14.04 ایجاد کنید.

دستورات اولیه iptables

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

یاد آوردن: دستورات iptables باید با حقوق ریشه اجرا شوند. این بدان معنی است که شما باید یکی از موارد زیر را انجام دهید:

  • به عنوان کاربر ریشه وارد شوید.
  • از su یا sudo -i برای گسترش پوسته ریشه استفاده کنید.
  • همه دستورات را با sudo (روش توصیه شده در اوبونتو) شروع کنید.

این راهنما از گزینه دوم استفاده می کند.

بنابراین، ابتدا باید به لیست قوانین فعلی iptables نگاه کنید. برای انجام این کار، از پرچم -L استفاده کنید:

sudo iptables -L
ورودی زنجیره ای (خط مشی ACCEPT)


مقصد منبع گزینه prot target
Chain OUTPUT (خط مشی ACCEPT)
مقصد منبع گزینه prot target

همانطور که می بینید، لیست شامل سه زنجیره پیش فرض (INPUT، OUTPUT و FORWARD) است که هر کدام دارای یک مجموعه سیاست پیش فرض هستند (در حال حاضر ACCEPT). همچنین می توانید نام ستون ها را مشاهده کنید. اما این لیست شامل خود قوانین نمی شود، زیرا اوبونتو با مجموعه قوانین پیش فرض ارائه نمی شود.

با استفاده از پرچم -S، این لیست را می توان در قالب متفاوتی مشاهده کرد که منعکس کننده دستورات مورد نیاز برای فعال کردن قوانین و سیاست ها است:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

برای تکرار تنظیمات، فقط باید sudo iptables را در ابتدای هر خط نتیجه تایپ کنید. (بسته به تنظیمات شما، این روش ممکن است هنگام اتصال از راه دور کمی پیچیده تر باشد؛ اگر قوانینی که اجازه اتصال فعلی را می دهد هنوز تنظیم نشده است، نباید خط مشی DROP را تنظیم کنید.)

برای بازنشانی قوانین فعلی (در صورت وجود)، تایپ کنید:

sudo iptables -F

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

قبل از تنظیم مجدد قوانین برای اتصال از راه دور، باید مطمئن شوید که خط مشی ACCEPT در زنجیره های INPUT و OUTPUT تنظیم شده است. این کار به این صورت انجام می شود:

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

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

ایجاد قوانین iptables

همانطور که در بالا ذکر شد، این آموزش بر روی کار با زنجیره INPUT متمرکز است زیرا مسئولیت ترافیک ورودی را بر عهده دارد. ابتدا باید قاعده ای را که قبلا ذکر شد در نظر بگیریم - قانونی که اتصال SSH فعلی را امکان پذیر می کند.

به نظر می رسد این است:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

البته ممکن است در ابتدا بسیار پیچیده به نظر برسد. برای درک این قانون، خود را با اجزای آن آشنا کنید:

  • -یک ورودی: flag -A اضافه می کند ( ضمیمه) تا انتهای زنجیره حکومت کنید. این قسمت از دستور به iptable ها می گوید که یک قانون به انتهای زنجیره INPUT اضافه کنند.
  • -m contrack: علاوه بر مجموعه ای از توابع اساسی، iptables دارای مجموعه ای از افزونه ها یا ماژول ها نیز می باشد که مسئولیت قابلیت های فایروال اضافی را بر عهده دارند. این قسمت از دستور نشان می دهد که کاربر نیاز به دسترسی به عملکردهای ماژول conntrack دارد. این ماژول به شما اجازه می دهد تا از دستوراتی استفاده کنید که بر اساس رابطه آن با یک بسته با اتصالات قبلی، تصمیم می گیرند با آن چه کاری انجام دهید.
  • --ctstate: یکی از دستورات موجود هنگام فراخوانی ماژول conntrack. این دستور به شما امکان می دهد تا ارتباط بسته ها را با سایر بسته هایی که قبلاً مشاهده شده اند ردیابی کنید. روی ESTABLISHED (که بسته‌هایی را می‌پذیرد که بخشی از یک اتصال موجود هستند) و RELATED (بسته‌هایی را می‌پذیرد که با یک اتصال از قبل ایجاد شده مرتبط هستند) تنظیم شده است. این بخش از قانون است که مسئول جلسه فعلی SSH است.
  • jتایید کنید: عمل (هدف) را برای انجام روی بسته ای که با قانون مطابقت دارد مشخص می کند. در این صورت iptables بسته هایی را می پذیرد که معیارهای قبلی را داشته باشند.

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

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

sudo iptables -L
ورودی زنجیره ای (خط مشی ACCEPT)
مقصد منبع گزینه prot target
همه را بپذیرید - در هر کجا و هر کجا
Chain FORWARD (خط مشی ACCEPT)
مقصد منبع گزینه prot target
Chain OUTPUT (خط مشی ACCEPT)
مقصد منبع گزینه prot target

هنگامی که با نحو اصلی آشنا شدید، چند قانون دیگر ایجاد کنید که اتصال را می پذیرد.

پذیرش سایر ارتباطات مهم

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

دو پورت را باز بگذارید: پورت SSH (این راهنما از پورت پیش فرض 22 استفاده می کند؛ اگر این مقدار تغییر کرده است، حتما مقدار جدید را وارد کنید). علاوه بر این، فرض کنید در این رایانه وب سرور به طور پیش فرض روی پورت 80 اجرا می شود (اگر اینطور نیست، این قانون را اضافه نکنید).

بنابراین، خطوطی که برای ایجاد چنین قوانینی باید استفاده کنید به شکل زیر هستند:

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

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

  • پtcp: این گزینه به بسته هایی که از TCP (یک پروتکل جریان گرا که توسط اکثر برنامه ها استفاده می شود زیرا ارتباطات قابل اعتمادی را ارائه می دهد) استفاده می کنند اجازه عبور می دهد.
  • dport: این گزینه هنگام استفاده از پرچم -p tcp موجود است. پورت ورودی را که پورت بسته باید مطابقت داشته باشد را مشخص می کند. قانون اول بسته های TCP را به مقصد پورت 22 اجازه می دهد و قانون دوم ترافیک TCP را برای پورت 80 می پذیرد.

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

یعنی اگر سرویس 1 نیاز به برقراری ارتباط با سرویس 2 برای گوش دادن به اتصالات در پورت 4555 داشته باشد، سرویس 1 بسته ای را با استفاده از دستگاه Loopback به پورت 4555 ارسال می کند. این رفتار باید مجاز باشد زیرا برای عملکرد صحیح بسیاری از برنامه ها ضروری است.

برای انجام این کار، قانون زیر را اضافه کنید:

sudo iptables -I INPUT 1 -i lo -j ACCEPT

کمی با قوانین قبلی متفاوت است. نگاهی دقیق تر به آن بیندازید:

  • منورودی 1: پرچم -I به iptable ها می گوید که یک قانون درج کنند. این پرچم با پرچم -A متفاوت است (که به سادگی قانون را به انتهای زنجیره اضافه می کند). زنجیره ای که قانون باید در آن اضافه شود و مکان قانون در آن را مشخص می کند. در این مورد، قانون باید در همان ابتدای زنجیره INPUT درج شود، در نتیجه همه قوانین یک موقعیت را جابجا می کنند. این قانون باید در ابتدای زنجیره قرار گیرد، زیرا یکی از قوانین اصلی است و نباید به دیگران وابسته باشد.
  • مناینجا: این جزء قانون به بسته هایی که از رابط lo استفاده می کنند اجازه می دهد ("lo" نام دیگری برای دستگاه حلقه بک است). این بدان معنی است که هر بسته ای که از این رابط استفاده می کند باید پذیرفته شود.

برای مشاهده قوانین فعلی، از پرچم -S استفاده کنید، زیرا پرچم -L برخی از اطلاعات را خروجی نمی دهد (به عنوان مثال، رابطی که قانون به آن محدود شده است، که در مورد قانون آخر بسیار مهم است):

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

ایجاد قوانین DROP

بنابراین، در حال حاضر، 4 قانون ایجاد شده است که بسته ها را بر اساس معیارهای خاصی می پذیرد. با این حال، سرور در حال حاضر هیچ بسته دیگری را مسدود نمی کند.

اگر بسته ای از زنجیره INPUT عبور کند و با هیچ یک از چهار قانون مطابقت نداشته باشد، خط مشی پیش فرض (ACCEPT) اجرا می شود که بسته را به هر طریقی می پذیرد. حالا باید عوض بشه

این کار به دو روش قابل انجام است که تفاوت های کاملاً قابل توجهی دارند.

راه اول این است که خط مشی پیش فرض زنجیره INPUT را ویرایش کنید. برای انجام این نوع:

sudo iptables -P INPUT DROP

این خط‌مشی تمام بسته‌هایی را که با هیچ یک از قوانین زنجیره ورودی مطابقت ندارند، نظارت و رها می‌کند. یکی از پیامدهای این نوع طراحی این است که حتی پس از بازنشانی قوانین، بسته ها را رها می کند.

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

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

یک رویکرد جایگزین، اضافه کردن یک قانون در انتهای زنجیره است که همه بسته‌های غیر منطبق را کنار می‌گذارد، در حالی که خط مشی ACCEPT را حفظ می‌کند.

برای بازگرداندن خط مشی ACCEPT به زنجیره INPUT، تایپ کنید:

sudo iptables -P INPUT ACCEPT

اکنون می توانید یک قانون به انتهای این زنجیره اضافه کنید که تمام بسته های غیر منطبق را حذف می کند:

sudo iptables -A INPUT -j DROP

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

اساساً، رویکرد دوم زمانی استفاده می شود که لازم باشد خط مشی ACCEPT که ترافیک را می پذیرد حفظ شود. یعنی حتی اگر همه قوانین بازنشانی شوند، کاربر همچنان می‌تواند به دستگاه در شبکه دسترسی داشته باشد. این رویکرد به شما اجازه می دهد تا اقدامات پیش فرض را بدون نیاز به تغییر خط مشی اعمال شده در زنجیره خالی انجام دهید.

البته این بدان معناست که هر قانونی که باید به انتهای زنجیره اضافه شود باید قبل از قانون تنظیم مجدد باشد. این را می توان با حذف موقت قانون تنظیم مجدد انجام داد:

sudo iptables -D INPUT -j DROP
sudo iptables -A INPUT new_rule
sudo iptables -A INPUT -j DROP

یا با درج یک قانون جدید در انتهای زنجیره (اما قبل از قانون تنظیم مجدد)، با تعیین شماره خط. برای وارد کردن یک قانون در خط 4، تایپ کنید:

sudo iptables -I INPUT 4 new_rule

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

sudo iptables -L --line-numbers
ورودی زنجیره ای (قطع خط مشی)

1 همه را بپذیرید -- هر کجا و هر کجا
2 همه را بپذیرید -- در هر کجا و هر کجا ctstate مرتبط، تاسیس شده
3 ACCEPT tcp -- هر جا هر جا tcp dpt:ssh
4 ACCEPT tcp -- هر کجا و هر کجا tcp dpt:http
Chain FORWARD (خط مشی ACCEPT)
num target prot منبع انتخابی مقصد
Chain OUTPUT (خط مشی ACCEPT)
num target prot منبع انتخابی مقصد

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

ذخیره تنظیمات iptables

به طور پیش فرض، تمام قوانین ذخیره نشده تا راه اندازی مجدد سرور بعدی به قوت خود باقی می مانند. بلافاصله پس از راه اندازی مجدد، قوانین ذخیره نشده از بین خواهند رفت.

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

این را از راه های گوناگون می توان انجام داد؛ ساده‌ترین روش استفاده از بسته iptables-persistent است که می‌توان آن را از مخزن پیش‌فرض اوبونتو دانلود کرد:

به روز رسانی sudo apt-get
sudo apt-get install iptables-persistent

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

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

نتایج

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

برچسب ها: ,

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

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

با کمک این برنامه است که سیستم از نفوذهای خارجی، تغییر مسیر پورت و بسیاری از اقدامات دیگر با ترافیک محافظت می شود. اما نقطه ضعف آن این است که تنظیم آن کمی دشوار است. این مقاله به تنظیم iptables برای dummies می پردازد. امیدوارم پس از این بتوانید با اطمینان از قابلیت های اولیه iptables استفاده کنید.

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

انواع پکیج

همه بسته ها به سه نوع ورودی، خروجی و عبوری تقسیم می شوند. ورودی آنهایی هستند که به این رایانه ارسال شده اند، خروجی آنهایی هستند که از این رایانه به شبکه ارسال می شوند. و بسته های عبوری بسته هایی هستند که به سادگی باید بیشتر ارسال شوند، برای مثال اگر رایانه شما به عنوان روتر عمل می کند.

بر این اساس، در فیلتر iptables، تمام بسته ها به سه زنجیره مشابه تقسیم می شوند:

  • ورودی- بسته ها و اتصالات دریافتی را پردازش می کند. به عنوان مثال، اگر هر کاربر خارجی سعی کند از طریق ssh به رایانه شما متصل شود یا هر وب سایتی محتوای خود را در صورت درخواست مرورگر برای شما ارسال می کند. تمام این بسته ها به این زنجیره ختم می شوند.
  • رو به جلو- از این زنجیر برای عبور اتصالات استفاده می شود. این شامل بسته هایی است که به رایانه شما ارسال می شوند، اما برای آن در نظر گرفته نشده اند، آنها به سادگی از طریق شبکه به مقصد ارسال می شوند. همانطور که قبلاً گفتم ، این در روترها مشاهده می شود یا مثلاً اگر رایانه شما wifi توزیع می کند.
  • خروجی- این زنجیره برای بسته های خروجی و اتصالات استفاده می شود. این شامل بسته هایی است که هنگام تلاش برای پینگ کردن یک سایت یا زمانی که مرورگر خود را راه اندازی می کنید و سعی می کنید هر سایتی را باز کنید ایجاد شده اند.

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

قوانین و اقدامات

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

  • تایید کنید- اجازه دهید بسته در طول زنجیره قوانین بیشتر منتقل شود.
  • رها کردن- بسته را بردارید؛
  • رد کنید- رد بسته، پیامی به فرستنده ارسال می شود که بسته رد شده است.
  • LOG- یک رکورد در مورد بسته در فایل log ایجاد کنید.
  • صف- ارسال بسته به برنامه کاربر.

قوانین می‌توانند هر گونه تطابق را بررسی کنند، به عنوان مثال، از طریق IP، درگاه گیرنده یا فرستنده، هدر بسته‌ها و موارد دیگر. اگر بسته ای با هیچ یک از قوانین مطابقت نداشته باشد، عمل پیش فرض روی آن اعمال می شود که معمولاً ACCEPT است.

وقتی قوانین را فهمیدیم، می‌توانیم به زنجیره‌ها برگردیم. علاوه بر موارد ذکر شده در بالا، دو زنجیره دیگر از قوانین وجود دارد:

  • پیش از مسیریابی- بسته قبل از پردازش توسط iptables وارد این زنجیره می شود، سیستم هنوز نمی داند به کجا ارسال می شود، به ورودی، خروجی یا فوروارد.
  • postrouting- تمام بسته های عبوری که قبلاً زنجیره رو به جلو را پشت سر گذاشته اند به اینجا می روند.

اما این همه ماجرا نیست. ما همچنین جداول iptables را داریم که می خواهیم به آنها نیز بپردازیم.

جداول ipatables

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

  • خام- طراحی شده برای کار با بسته های خام قبل از پردازش.
  • خرد کردن- برای اصلاح بسته ها در نظر گرفته شده است.
  • nat- اگر می خواهید از رایانه خود به عنوان روتر استفاده کنید، عملکرد nat را ارائه می دهد.
  • فیلتر کنید- جدول اصلی برای فیلتر کردن بسته ها که به طور پیش فرض استفاده می شود.

تقریباً همه چیز با تئوری، اکنون بیایید به ابزار خط فرمان iptables نگاه کنیم، که با کمک آن سیستم iptables مدیریت می شود.

ابزار Iptables

زیرسیستم iptables و netfilter در هسته تعبیه شده اند، اما مجموعه ای از ابزارهای کمکی برای مدیریت همه اینها همیشه همراه با سیستم ارائه نمی شود. برای نصب ابزار در اوبونتو، تایپ کنید:

sudo apt نصب iptables

و در توزیع های مبتنی بر فدورا، نصب iptables کمی متفاوت انجام می شود:

sudo yum نصب iptables

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

-t جدول عمل زنجیره ای گزینه های اضافی

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

باقی مانده است که اقدامات اصلی را که iptables به شما امکان می دهد انجام دهید در نظر بگیرید:

  • - یک قانون به زنجیره اضافه کنید.
  • -با- تمام قوانین را بررسی کنید.
  • -دی- حذف قانون؛
  • -من- یک قانون با شماره مورد نظر وارد کنید.
  • - نمایش تمام قوانین در زنجیره فعلی.
  • - نمایش تمام قوانین؛
  • -اف- پاک کردن تمام قوانین؛
  • - ایجاد یک زنجیره؛
  • -ایکس- حذف زنجیره؛
  • - عمل پیش فرض را تنظیم کنید.

گزینه های اضافی برای قوانین:

  • - پروتکل را مشخص کنید، یکی از tcp، udp، udplite، icmp، icmpv6، esp، ah، sctp،
    mh
  • -s- آدرس IP دستگاه ارسال کننده بسته را مشخص کنید.
  • - نشانی IP گیرنده را نشان دهید.
  • -من- رابط شبکه ورودی؛
  • -o- رابط شبکه خروجی؛
  • -j- در صورت مطابقت قانون، اقدامی را انتخاب کنید.

اکنون می توانید به نمونه هایی از نحوه پیکربندی iptables نگاه کنید.

نمونه های پیکربندی Iptables

ما به چند مثال اساسی نگاه می کنیم تا بتوانید مطالبی را که در بالا خواندید تقویت کنید.

فهرست قوانین

ابتدا، بیایید نحوه مشاهده قوانین iptables را بررسی کنیم، گزینه -L برای این کار کافی است:

همچنین می توانید زنجیره مورد نظر را برای نمایش قوانین فقط برای آن مشخص کنید:

iptables -L INPUT

قوانین پاکسازی

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

یا فقط برای یک زنجیره خاص:

sudo iptables -F ورودی

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

قوانین پیش فرض

همانطور که قبلاً گفتم، اگر هیچ قانونی با یک بسته مطابقت نداشته باشد، عمل پیش فرض روی آن اعمال می شود. با استفاده از گزینه -p می توان آن را مشخص کرد:

sudo iptables -p INPUT ACCEPT
$ sudo iptables -p OUTPUT ACCEPT
$ sudo iptables -p FORWARD DROP

در این مثال، زنجیره های INPUT و OUTPUT را مجاز می کنیم، اما FORWARD را غیرفعال می کنیم.

مسدود کردن بسته ها

برای مسدود کردن بسته‌ها، می‌توانیم از اکشن DROP استفاده کنیم.

این دستور شبیه به این است که به شما امکان می دهد یک قانون iptables اضافه کنید تا تمام بسته های دریافتی از 10.10.10.10 مسدود شود:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

و اکنون بسته های خروجی به همان آدرس:

مسدود کردن محدوده IP به روشی مشابه انجام می شود. برای این کار باید از ماسک شبکه 10.10.10.0/24 استفاده کنید. اینها همه آدرس‌ها از 10.10.10.0 تا 10.10.10.255 خواهند بود:

sudo iptables -A INPUT -s 10.10.10.0/24 -j DROP

یا یک نسخه توسعه یافته از ماسک:

sudo iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

همچنین می توانید تمام اتصالات ssh ورودی را مسدود کنید:

sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

همانطور که می بینید، اضافه کردن یک قانون iptables بسیار ساده است.

حذف قوانین

حذف قوانین iptables مانند ایجاد قوانین جدید انجام می شود، فقط به جای گزینه A باید از گزینه D استفاده کنید. ابتدا به لیست قوانین نگاه کنید:

به عنوان مثال، به این صورت می توانید قانون iptables را که در مرحله دوم ایجاد شده است حذف کنید:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

همچنین می توانید iptable ها را با اجرای دستور با گزینه -F به طور کامل پاک کنید:

بهترین مقالات در این زمینه