رفتن به محتوا
بازگشت به وبلاگ
میکروتیک

Port Knocking روی MikroTik: مخفی‌کردن SSH و Winbox

Port Knocking روی MikroTik پیاده‌سازی کنید تا SSH و Winbox را پشت یک توالی Knock مخفی کنید — برای Scanner ها نامرئی.

اسفند ۱۴۰۵
۱۱ دقیقه مطالعه

Port Knocking در میکروتیک

Port Knocking روشی است برای باز کردن پورت‌ها روی فایروال با ارسال یک دنباله از تلاش‌های اتصال به پورت‌های بسته از پیش تعریف‌شده. تا زمانی که دنباله صحیح knock ارسال نشود، پورت‌های مدیریتی کاملاً بسته به نظر می‌رسند.

چطور Port Knocking کار می‌کند

۱. پورت مدیریتی شما (مثلاً SSH روی ۲۲) به‌طور پیش‌فرض مسدود است.

۲. یک دنباله از پورت‌ها را knock می‌کنید — مثلاً ۱۱۱۱، ۲۲۲۲، ۳۳۳۳.

۳. فایروال دنباله را دنبال می‌کند. اگر هر سه به ترتیب در یک پنجره زمانی زده شوند، IP شما به لیست "مجاز" اضافه می‌شود.

۴. سپس SSH برای IP شما برای مدت محدود باز می‌شود.

پیاده‌سازی Port Knocking در RouterOS

TEXT
/ip firewall filter

# قانون ۱: قبول SSH برای IPهایی که دنباله را کامل کرده‌اند
add chain=input protocol=tcp dst-port=22 src-address-list=knock_allowed action=accept comment="SSH open for knockers"

# قانون ۲: knock مرحله ۳ — knock نهایی به لیست مجاز اضافه می‌کند
add chain=input protocol=tcp dst-port=3333 src-address-list=knock_stage2 action=add-src-to-address-list address-list=knock_allowed address-list-timeout=30m

# قانون ۳: knock مرحله ۲
add chain=input protocol=tcp dst-port=2222 src-address-list=knock_stage1 action=add-src-to-address-list address-list=knock_stage2 address-list-timeout=15s

# قانون ۴: knock مرحله ۱ — اولین knock
add chain=input protocol=tcp dst-port=1111 connection-state=new action=add-src-to-address-list address-list=knock_stage1 address-list-timeout=15s

# قانون ۵: Drop SSH برای بقیه
add chain=input protocol=tcp dst-port=22 action=drop comment="Default drop SSH"

ارسال دنباله knock

از لینوکس:
BASH
knock 203.0.113.1 1111 2222 3333

یا با استفاده از nmap:

BASH
nmap -Pn --host-timeout 100 --max-retries 0 -p 1111 203.0.113.1
nmap -Pn --host-timeout 100 --max-retries 0 -p 2222 203.0.113.1
nmap -Pn --host-timeout 100 --max-retries 0 -p 3333 203.0.113.1
از ویندوز (PowerShell):
POWERSHELL
$ip = "203.0.113.1"
foreach ($port in 1111,2222,3333) {
    try { [System.Net.Sockets.TcpClient]::new($ip, $port) } catch {}
    Start-Sleep -Milliseconds 200
}

تأیید عملکرد

بعد از knock، بررسی کنید IP شما در لیست مجاز است:

TEXT
/ip firewall address-list print where list=knock_allowed

نکات مهم

  • Port knocking امنیت از طریق مبهم‌سازی است — مهاجمان را تأخیر می‌دهد اما جایگزین رمزهای قوی یا احراز هویت SSH با کلید نمی‌شود.
  • برای امنیت حداکثری آن را با احراز هویت کلید SSH ترکیب کنید.
  • در محیط تولید از شماره پورت‌های تصادفی بالا استفاده کنید (نه ۱۱۱۱ و ۲۲۲۲).