مدت زمان مطالعه:
0

وقتی درباره Policy در FortiGate صحبت میکنیم، معمولاً ذهن ادمینها به سمت Firewall Policyهای معمولی میرود؛ همان Policyهایی که ترافیک کاربران، سرورها و اینترنت را از یک Interface به Interface دیگر عبور میدهند. اما بخشی از ترافیک اصلاً قرار نیست از FortiGate عبور کند؛ بلکه مقصد نهایی آن خود FortiGate است. اینجاست که Local-in Policy اهمیت پیدا میکند.
در FortiOS 7.6، Local-in Policy برای کنترل ترافیکی استفاده میشود که به Interfaceهای خود FortiGate میرسد؛ مثل HTTPS، SSH، PING، SNMP، IKE، SSL VPN و سایر سرویسهایی که روی خود فایروال پاسخ میدهند. بنابراین اگر FortiGate شما روی مرز شبکه قرار دارد، یا روی Interfaceهای آن Administrative Access فعال است، طراحی درست Local-in Policy یکی از پایههای Hardening محسوب میشود.
این مقاله بر اساس مستندات رسمی Fortinet برای FortiOS 7.6 نوشته شده و هدف آن این است که ادمین بداند Local-in Policy دقیقاً چه تفاوتی با Firewall Policy دارد، کجا باید استفاده شود، چطور باید Ruleها را مرتب کند، چه Logهایی بگیرد و چه اشتباهاتی میتواند باعث باز ماندن دسترسی به خود FortiGate شود.
مروری بر این مقاله
Local-in Traffic به ترافیکی گفته میشود که مقصد آن خود FortiGate است، نه شبکه پشت FortiGate. برای مثال وقتی ادمین از بیرون شبکه به IP یکی از Interfaceهای FortiGate با HTTPS وصل میشود، این ترافیک به خود FortiGate میرسد. وقتی یک سیستم به Interface فایروال Ping میزند، وقتی SNMP Collector از FortiGate مانیتورینگ میگیرد، یا وقتی IPsec VPN با FortiGate مذاکره IKE انجام میدهد، همه اینها نمونههایی از Local-in Traffic هستند.
Firewall Policy معمولی برای کنترل ترافیک Transit استفاده میشود؛ یعنی ترافیکی که از یک Interface وارد میشود و از Interface دیگر خارج میشود. اما Local-in Policy برای کنترل ترافیکی است که Destination آن FortiGate Interface است. همین تفاوت باعث میشود که نوشتن یک Firewall Policy معمولی برای Block کردن دسترسی به GUI یا SSH خود FortiGate کافی نباشد.
| مورد | Firewall Policy | Local-in Policy |
|---|---|---|
| نوع ترافیک | ترافیک عبوری از FortiGate | ترافیک ورودی به خود FortiGate |
| مثال | کاربر داخلی به اینترنت | اتصال SSH به IP Interface فایروال |
| کاربرد اصلی | کنترل ارتباط بین شبکهها | محافظت از سرویسهای خود FortiGate |
| Security Profile | قابل اعمال است | مثل Firewall Policyهای معمولی استفاده نمیشود |
| اهمیت امنیتی | محافظت از شبکهها و سرویسها | محافظت از Management Plane و سرویسهای فایروال |
هر سرویسی که روی خود FortiGate پاسخ میدهد، میتواند در حوزه Local-in Policy قرار بگیرد. بسته به سناریو، این سرویسها ممکن است مدیریتی، مانیتورینگ یا VPN باشند.
| سرویس | کاربرد | ریسک در صورت باز بودن روی Interface عمومی |
|---|---|---|
| HTTPS | دسترسی به GUI مدیریتی | افزایش سطح حمله روی صفحه Login و Management Plane |
| SSH | مدیریت CLI | Brute Force، اسکن، تلاش برای Exploit |
| PING | تست Reachability | شناسایی IP فعال و کمک به Reconnaissance |
| SNMP | مانیتورینگ | نشت اطلاعات مدیریتی یا سوءاستفاده از Community/String اشتباه |
| IKE/IPsec | راهاندازی VPN | اسکن، مذاکره ناخواسته و تلاش برای حمله به VPN Gateway |
| SSL VPN | دسترسی ریموت کاربران | Brute Force، Credential Stuffing و سوءاستفاده از آسیبپذیریها |
برای محافظت از دسترسی به خود FortiGate، سه لایه مهم وجود دارد: تنظیمات Administrative Access روی Interface، Trusted Host روی Administrator و Local-in Policy. این سه جایگزین کامل یکدیگر نیستند؛ بهتر است بهصورت مکمل استفاده شوند.
| مکانیزم | محل تنظیم | نقش | محدودیت |
|---|---|---|---|
| Administrative Access | Interface Settings | مشخص میکند FortiGate روی آن Interface به چه سرویسهایی مثل HTTPS، SSH یا PING پاسخ دهد | برای کنترل دقیق Source، Service و Rule Order کافی نیست |
| Trusted Host | Administrator Account | مشخص میکند یک Admin از چه Sourceهایی اجازه Login داشته باشد | برای همه مدلهای احراز هویت مثل SSO بهصورت مستقیم قابل اعمال نیست و قبل از رسیدن به مرحله Login، همه Local-in Traffic را پوشش نمیدهد |
| Local-in Policy | Policy & Objects | کنترل دقیق Source، Destination، Interface، Service، Schedule و Action برای ترافیک ورودی به خود FortiGate | اگر Ruleها درست مرتب نشوند یا Deny نهایی نوشته نشود، ممکن است دسترسی ناخواسته باقی بماند |
در FortiOS 7.6، Fortinet چند قابلیت مهم را برای Local-in Policy برجسته کرده که برای طراحی امن و عیبیابی دقیقتر مهم هستند.
در FortiOS 7.6 امکان ساخت و ویرایش Local-in Policy از مسیر GUI وجود دارد. در GUI میتوان بین Local-In Policy برای IPv4 و IPv6 Local-In Policy تفکیک قائل شد و Ruleهای مربوط به هرکدام را جداگانه ساخت.
در FortiOS 7.6.1، Fortinet یک Default Local-in Policy برای افزایش امنیت اضافه کرده است که از Internet Service Database برای منابعی مثل Malicious-Malicious.Server، Tor-Exit.Node و Tor-Relay.Node استفاده میکند. هدف این Rule جلوگیری از دسترسی منابع شناختهشده مخرب به Interfaceهای FortiGate روی هر سرویس و پورت است.
در FortiOS 7.6، میتوان Logging مربوط به Local-in Traffic را دقیقتر و بهصورت Per Policy فعال کرد. این قابلیت برای عیبیابی، بررسی تلاشهای دسترسی غیرمجاز و مستندسازی حملات روی Management Plane بسیار کاربردی است.
در Local-in Policy میتوان از Virtual Patching برای کاهش ریسک آسیبپذیریهایی استفاده کرد که خود FortiGate را هدف میگیرند. در این حالت، Ruleهای Vulnerability روی Local-in Traffic مربوط به Interface مشخص بررسی میشوند و ترافیک Match شده Drop میشود.
یکی از قابلیتهای مهم، امکان استفاده از Internet Service بهعنوان Source در Local-in Policy است. این موضوع برای سناریوهایی مثل Block کردن منابع Tor، منابع Malicious یا سرویسهای مشخصشده در ISDB کاربرد دارد.
طراحی Local-in Policy باید با دید Management Plane Protection انجام شود. هدف این نیست که فقط یک Rule بنویسیم؛ هدف این است که دقیقاً مشخص کنیم چه کسی، از کدام Interface، به کدام سرویس خود FortiGate دسترسی داشته باشد.
برای سرویسهایی مثل HTTPS، SSH، SNMP و PING بهتر است ابتدا Sourceهای مجاز را Allow کنید و بعد یک Rule عمومی برای Deny کردن بقیه Sourceها بسازید. اگر فقط Rule Allow داشته باشید ولی Deny نهایی ننویسید، ممکن است بسته به وضعیت Administrative Access و Ruleهای موجود، دسترسی ناخواسته همچنان برقرار بماند.
ریسک Interface داخلی با Interface اینترنتی یکسان نیست. روی WAN بهتر است هیچ دسترسی مدیریتی باز نباشد. اگر مجبور به باز کردن هستید، Source باید کاملاً محدود باشد. روی Management Interface داخلی هم بهتر است فقط Subnet ادمینها، Jump Server یا سامانه مانیتورینگ مجاز باشد.
برای HTTPS، SSH، PING، SNMP و VPN بهتر است Ruleهای جدا داشته باشید. این کار باعث میشود Logها واضحتر شوند، Troubleshooting سادهتر باشد و در زمان تغییرات، یک سرویس اشتباهی باز یا بسته نشود.
Local-in Policy باید در کنار کارهایی مثل غیرفعال کردن سرویسهای غیرضروری روی Interface، تغییر پورتهای مدیریتی در صورت نیاز، استفاده از Trusted Host، فعالسازی MFA برای ادمینها، محدود کردن Administrator Profile و بهروزرسانی FortiOS استفاده شود.
در این سناریو، FortiGate روی Interface مدیریتی یا داخلی به HTTPS و SSH پاسخ میدهد، اما فقط Subnet ادمینها مجاز است به آن وصل شود. سایر Sourceها باید Deny شوند.
اگر Ping روی Interface اینترنتی فعال باشد، FortiGate برای اسکنرها و مهاجمان راحتتر قابل شناسایی میشود. در این سناریو میتوان Ping را از همه Sourceها Deny کرد یا فقط برای IPهای مانیتورینگ مجاز نگه داشت.
SNMP معمولاً برای مانیتورینگ وضعیت FortiGate استفاده میشود. اما باز بودن SNMP برای همه Sourceها میتواند باعث نشت اطلاعات مدیریتی شود. بهتر است فقط IP سرور مانیتورینگ اجازه دسترسی داشته باشد.
اگر FortiGate نقش VPN Gateway دارد، بهتر است ترافیک مربوط به مذاکره VPN فقط از IPهای Peerهای معتبر مجاز باشد. این کار حجم تلاشهای ناخواسته، اسکن و مذاکرههای غیرضروری را کم میکند.
برای منابع شناختهشده مخرب مثل Tor Exit Node یا Malicious Serverها، میتوان از Internet Service Database در Local-in Policy استفاده کرد تا قبل از رسیدن به سرویسهای خود FortiGate، ترافیک آنها Drop شود.
برای ساخت Local-in Policy در FortiOS 7.6 از مسیر زیر استفاده کنید:
مراحل کلی به این شکل است:
در این مثال، شبکه ادمینها برابر با 10.10.10.0/24 در نظر گرفته شده است.
config firewall address
edit "ADMINS_10.10.10.0_24"
set subnet 10.10.10.0 255.255.255.0
next
end
این Rule اجازه میدهد فقط شبکه ادمینها روی Interface مشخصشده به HTTPS و SSH خود FortiGate وصل شوند.
config firewall local-in-policy
edit 10
set intf "port1"
set srcaddr "ADMINS_10.10.10.0_24"
set dstaddr "all"
set action accept
set service "HTTPS" "SSH"
set schedule "always"
set logtraffic enable
set comments "Allow admin access from trusted admin subnet"
next
end
بعد از Rule مجاز، یک Rule عمومی برای Deny کردن سایر Sourceها قرار میگیرد. این Rule باید بعد از Allow Rule قرار داشته باشد.
config firewall local-in-policy
edit 20
set intf "port1"
set srcaddr "all"
set dstaddr "all"
set action deny
set service "HTTPS" "SSH"
set schedule "always"
set logtraffic enable
set comments "Deny admin access from untrusted sources"
next
end
در این مثال فقط یک IP مانیتورینگ اجازه Ping دارد و سایر Sourceها برای PING Deny میشوند.
config firewall address
edit "MONITORING_10.20.20.10"
set subnet 10.20.20.10 255.255.255.255
next
end
config firewall local-in-policy
edit 30
set intf "port1"
set srcaddr "MONITORING_10.20.20.10"
set dstaddr "all"
set action accept
set service "PING"
set schedule "always"
set logtraffic enable
set comments "Allow ping from monitoring server"
next
edit 31
set intf "port1"
set srcaddr "all"
set dstaddr "all"
set action deny
set service "PING"
set schedule "always"
set logtraffic enable
set comments "Deny ping from other sources"
next
end
در FortiOS 7.6.1، Fortinet برای منابع شناختهشده مخرب یک Default Local-in Policy معرفی کرده است. اگر در سناریوی شما این Rule وجود ندارد و نسخه شما از ISDB بهعنوان Source پشتیبانی میکند، میتوان مشابه نمونه زیر عمل کرد.
config firewall local-in-policy
edit 1
set intf "any"
set dstaddr "all"
set internet-service-src enable
set internet-service-src-name "Malicious-Malicious.Server" "Tor-Exit.Node" "Tor-Relay.Node"
set service "ALL"
set schedule "always"
set action deny
set logtraffic enable
set comments "Block known malicious sources to FortiGate local services"
next
end
برای اینکه Logها بهصورت دقیق بر اساس Local-in Policy ثبت شوند، میتوان Logging را در Global Setting فعال کرد و سپس روی Ruleها Log را Enable کرد.
config log setting
set local-in-policy-log enable
end
config firewall local-in-policy
edit 20
set logtraffic enable
next
end
show firewall local-in-policy show firewall local-in-policy6
یکی از اشتباهات رایج این است که Local-in Policy نوشته میشود، اما Log کافی برای بررسی اثر آن فعال نیست. در FortiOS 7.6 میتوان Local Traffic Logging را Global یا Per Policy تنظیم کرد. برای سناریوهای امنیتی، Per Policy معمولاً دید دقیقتری میدهد.
در CLI نیز از این دستور استفاده میشود:
config log setting
set local-in-policy-log enable
end
اگر ترافیکی که باید Block شود همچنان عبور میکند، یا ترافیکی که باید Allow شود Drop میشود، میتوان از Debug Flow استفاده کرد. در خروجی Fortinet، Drop شدن توسط Local-in Policy معمولاً با عبارتی مشابه زیر دیده میشود:
diagnose debug reset diagnose debug flow filter addr 10.10.10.12 diagnose debug flow filter proto 1 diagnose debug enable diagnose debug flow trace start 10
در خروجی Debug ممکن است عبارتی شبیه این دیده شود:
fw_local_in_handler line=545 msg="iprope_in_check() check failed on policy 3, drop"
| مورد | وضعیت مطلوب |
|---|---|
| Interfaceهای اینترنتی | HTTPS و SSH روی WAN غیرفعال باشد یا فقط از Sourceهای مشخص مجاز باشد |
| Admin Access | Sourceهای مجاز با Address Object مشخص شده باشند |
| Trusted Host | برای ادمینهای Local و REST API تنظیم شده باشد |
| Local-in Policy | Allowهای محدود و Denyهای عمومی برای سرویسهای مدیریتی وجود داشته باشد |
| SNMP | فقط از IP سرورهای مانیتورینگ مجاز باشد |
| PING | روی WAN غیرفعال یا محدود به مانیتورینگ باشد |
| VPN | در صورت امکان فقط Peerها یا Sourceهای معتبر مجاز باشند |
| ISDB | Block منابع Malicious و Tor برای Local-in بررسی شده باشد |
| Logging | Local-in Policy Logging بهصورت Per Policy یا Global فعال باشد |
| تست بعد از تغییر | با Source مجاز و غیرمجاز تست شده و نتیجه در Log بررسی شده باشد |