شبکه / میکروتیک

فایروال میکروتیک: filter، NAT و mangle

فایروال میکروتیک چطور کار می‌کند؛ جدول‌های filter، NAT، mangle و raw، زنجیره‌های input و forward، connection tracking، port forwarding و اشتباه‌های رایج.

نوشته‌ی تیم پیکوگاید آخرین بازبینی فنی: ۶ دقیقه مطالعه
در این صفحه
  1. جدول‌ها و زنجیره‌ها
  2. connection tracking
  3. قوانین پایه‌ی filter
  4. محدود کردن مدیریت روتر با address list
  5. NAT
  6. srcnat (masquerade)
  7. dstnat (port forwarding)
  8. mangle
  9. raw
  10. لاگ گرفتن
  11. بررسی قوانین
  12. اشتباه‌های رایج

فایروال میکروتیک از چهار جدول تشکیل شده است: filter تصمیم می‌گیرد بسته عبور کند یا نه، NAT آدرس‌ها را عوض می‌کند، mangle بسته‌ها را برای کارهای بعدی علامت گذاری می‌کند و raw پیش از connection tracking بسته‌ها را دور می‌ریزد. اگر فقط یک نکته از این مقاله بماند: هر قانون جدید را بالای قانون «drop everything» اضافه کنید، نه زیر آن.

جدول‌ها و زنجیره‌ها

جدول کاربرد زنجیره‌های مهم
filter اجازه یا رد ترافیک input، forward، output
nat تغییر آدرس و پورت srcnat، dstnat
mangle علامت گذاری (mark)، تغییر TTL و MSS prerouting، forward، postrouting و …
raw رد کردن ترافیک پیش از connection tracking prerouting، output

سه زنجیره‌ی جدول filter را باید دقیق بشناسید:

  • input: ترافیکی که مقصدش خود روتر است؛ Winbox، SSH، DNS روتر، ping به روتر.
  • forward: ترافیکی که از روتر عبور می‌کند؛ کاربر شبکه‌ی داخلی که به اینترنت می‌رود.
  • output: ترافیکی که خود روتر تولید می‌کند.

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

connection tracking

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

وضعیت معنی
new اولین بسته‌ی یک ارتباط
established بسته‌ای از ارتباطی که قبلاً پذیرفته شده
related ارتباط وابسته، مثلاً کانال داده‌ی FTP یا پیام ICMP مربوط به یک ارتباط
invalid بسته‌ای که به هیچ ارتباط معتبری تعلق ندارد
untracked بسته‌ای که در جدول raw از tracking خارج شده

فایروال خوب از همین استفاده می‌کند: established و related را اول می‌پذیرد (بیشتر ترافیک همین است و بقیه‌ی قوانین دیگر بررسی نمی‌شوند)، invalid را دور می‌ریزد و فقط برای new تصمیم می‌گیرد.

قوانین پایه‌ی filter

/ip firewall filter
add chain=input action=accept connection-state=established,related,untracked comment="input: accept established"
add chain=input action=drop connection-state=invalid comment="input: drop invalid"
add chain=input action=accept protocol=icmp comment="input: accept ICMP"
add chain=input action=accept in-interface-list=LAN comment="input: accept from LAN"
add chain=input action=drop comment="input: drop everything else"
add chain=forward action=fasttrack-connection connection-state=established,related hw-offload=yes comment="forward: fasttrack"
add chain=forward action=accept connection-state=established,related,untracked comment="forward: accept established"
add chain=forward action=drop connection-state=invalid comment="forward: drop invalid"
add chain=forward action=drop connection-state=new connection-nat-state=!dstnat in-interface-list=WAN comment="forward: drop new from WAN"

قانون آخر ارزش توضیح دارد: هر ارتباط جدیدی که از اینترنت می‌آید رد می‌شود، مگر این که قبلاً با یک قانون dstnat (port forwarding) به یک سرور داخلی هدایت شده باشد. به همین دلیل وقتی port forwarding اضافه می‌کنید، لازم نیست قانون filter جداگانه بنویسید.

این قوانین فرض می‌کنند فهرست‌های WAN و LAN را ساخته‌اید؛ روش کار در کانفیگ اولیه‌ی روتر میکروتیک آمده است.

محدود کردن مدیریت روتر با address list

به جای این که همه‌ی شبکه‌ی داخلی به Winbox دسترسی داشته باشند، یک فهرست از آدرس مدیرها بسازید:

/ip firewall address-list add list=admins address=192.168.88.10 comment="IT laptop"
/ip firewall filter add chain=input action=accept protocol=tcp dst-port=8291,22 src-address-list=admins place-before=0 comment="input: admins to Winbox/SSH"

بعد قانون accept from LAN را طوری محدود کنید که فقط سرویس‌هایی مثل DNS و DHCP را برای کاربران باز بگذارد.

NAT

srcnat (masquerade)

ترافیک کاربران که به اینترنت می‌رود، با IP روتر جایگزین می‌شود:

/ip firewall nat add chain=srcnat out-interface-list=WAN action=masquerade

اگر IP ثابت دارید، action=src-nat to-addresses=203.0.113.10 کمی کارآمدتر از masquerade است؛ masquerade برای IP متغیر (DHCP و PPPoE) ساخته شده.

dstnat (port forwarding)

برای دسترسی از اینترنت به یک وب سرور داخلی:

/ip firewall nat add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=443 action=dst-nat to-addresses=192.168.88.20 to-ports=443 comment="HTTPS to web server"

mangle

mangle به تنهایی ترافیک را رد یا قبول نمی‌کند؛ روی بسته یا ارتباط علامت می‌گذارد تا بخش‌های دیگر (routing، queue) از آن استفاده کنند. نمونه: علامت زدن ترافیک یک کاربر تا از اینترنت دوم برود:

/ip firewall mangle
add chain=prerouting src-address=192.168.88.50 connection-mark=no-mark action=mark-connection new-connection-mark=via-isp2 passthrough=yes
add chain=prerouting connection-mark=via-isp2 action=mark-routing new-routing-mark=to-isp2 passthrough=no

routing-mark فقط وقتی کار می‌کند که یک جدول مسیریابی به همین نام ساخته باشید (در RouterOS 7 با /routing table add name=to-isp2 fib). همین ایده پایه‌ی load balancing با PCC است.

raw

جدول raw پیش از connection tracking اجرا می‌شود و برای دور ریختن ترافیک ناخواسته در حجم بالا ارزان‌تر است. نمونه: رد کردن هر ترافیکی از آدرس‌های یک فهرست سیاه:

/ip firewall raw add chain=prerouting in-interface-list=WAN src-address-list=blocklist action=drop

برای بیشتر شبکه‌های کوچک و متوسط، filter کافی است. raw را وقتی به کار ببرید که CPU روتر زیر بار ترافیک ناخواسته رفته است.

لاگ گرفتن

برای دیدن این که چه چیزی رد می‌شود، روی قانون آخر لاگ روشن کنید:

/ip firewall filter set [find comment="input: drop everything else"] log=yes log-prefix="DROP-IN "

بررسی قوانین

/ip firewall filter print stats
/ip firewall nat print stats
/ip firewall connection print count-only

شمارنده‌ی bytes و packets هر قانون نشان می‌دهد چه ترافیکی از آن عبور کرده است. قانونی که هرگز شمارنده‌اش بالا نمی‌رود یا اشتباه است یا زیر قانون دیگری قرار گرفته که زودتر همان ترافیک را می‌گیرد.

اشتباه‌های رایج

  • قانون جدید زیر drop نهایی: RouterOS قوانین را از بالا بررسی می‌کند؛ قانونی که زیر drop everything else باشد هرگز اجرا نمی‌شود. از place-before استفاده کنید یا در Winbox قانون را بالا بکشید.
  • DNS باز روی اینترنت: با allow-remote-requests=yes و بدون قانون drop در input، روتر به همه‌ی اینترنت جواب DNS می‌دهد.
  • محافظت از سرورها در input: ترافیک به سمت سرورهای داخلی از forward عبور می‌کند.
  • حذف قانون invalid: بسته‌های invalid بخش مهمی از اسکن‌ها و ترافیک خراب هستند؛ همیشه آن‌ها را رد کنید.

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

منابع

  1. MikroTik Documentation — Filter help.mikrotik.com
  2. MikroTik Documentation — NAT help.mikrotik.com
  3. MikroTik Documentation — Packet Flow in RouterOS help.mikrotik.com
  4. MikroTik Documentation — Building Your First Firewall help.mikrotik.com