ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home เปิด Port บน Windows Defender Firewall

เปิด Port บน Windows Defender Firewall

Windows Server เปิด Windows Defender Firewall ไว้ตั้งแต่ติดตั้ง และบล็อกการเชื่อมต่อขาเข้าทุกพอร์ตที่ไม่มีกฎอนุญาต เมื่อคุณติดตั้งโปรแกรมที่ต้องรับการเชื่อมต่อจากภายนอก เช่น เว็บแอปที่รันบนพอร์ต 8080, SQL Server ที่พอร์ต 1433 หรือโปรแกรมบัญชีที่ใช้พอร์ตเฉพาะ ต้องสร้างกฎ Inbound Rule เพื่อเปิดพอร์ตนั้นก่อน เครื่องภายนอกจึงจะเชื่อมต่อได้

บทความนี้แสดงสามวิธี คือผ่านหน้าจอ Windows Defender Firewall with Advanced Security, ผ่าน PowerShell และผ่านคำสั่ง netsh ทั้งหมดให้ผลแบบเดียวกัน เลือกวิธีที่ถนัดได้เลย

สิ่งที่ต้องเตรียม

  • Windows Server 2019 หรือ 2022 และบัญชีในกลุ่ม Administrators
  • ทราบหมายเลขพอร์ตและโปรโตคอล (TCP หรือ UDP) ที่โปรแกรมใช้ ดูได้จากเอกสารของโปรแกรมนั้น
  • ถ้าเป็นไปได้ ทราบ IP ต้นทางที่จะเชื่อมต่อเข้ามา เพื่อจำกัดกฎให้แคบที่สุด

หมายเหตุ: ห้ามปิด Firewall ทั้งหมดเพื่อแก้ปัญหาเชื่อมต่อไม่ได้ ให้เปิดเฉพาะพอร์ตที่จำเป็นเท่านั้น และถ้ากำลังแก้กฎที่เกี่ยวกับ Remote Desktop ให้เปิดหน้าต่าง RDP เดิมค้างไว้และทดสอบด้วยการเชื่อมต่อใหม่อีกหน้าต่างก่อนออกจากระบบ

วิธีที่ 1: เปิดพอร์ตผ่านหน้าจอ (GUI)

  1. กด Win + R พิมพ์ wf.msc แล้วกด Enter จะเปิดหน้าต่าง Windows Defender Firewall with Advanced Security
  2. ที่แผงซ้าย คลิก Inbound Rules แล้วที่แผงขวาคลิก New Rule...
  3. หน้า Rule Type เลือก Port แล้วกด Next
  4. หน้า Protocol and Ports เลือก TCP หรือ UDP แล้วเลือก Specific local ports ใส่หมายเลขพอร์ต เช่น 8080 ถ้ามีหลายพอร์ตคั่นด้วยจุลภาค เช่น 8080, 8443 หรือใส่เป็นช่วง เช่น 5000-5010
  5. หน้า Action เลือก Allow the connection
  6. หน้า Profile เลือกโปรไฟล์ที่ต้องการ (Domain, Private, Public) สำหรับเซิร์ฟเวอร์บนคลาวด์ที่ไม่ได้อยู่ใน Domain การ์ดเครือข่ายมักอยู่ในโปรไฟล์ Public ถ้าไม่เลือก Public กฎจะไม่มีผล
  7. หน้า Name ตั้งชื่อที่สื่อความหมาย เช่น App TCP 8080 แล้วกด Finish

กฎใหม่จะปรากฏในรายการ Inbound Rules พร้อมไอคอนเครื่องหมายถูกสีเขียว แปลว่าเปิดใช้งานแล้ว

ถ้าต้องการจำกัด IP ต้นทาง ให้ดับเบิลคลิกกฎที่สร้าง ไปที่แท็บ Scope ส่วน Remote IP address เลือก These IP addresses แล้วกด Add เพื่อใส่ IP หรือช่วง IP เช่น 203.0.113.0/24

วิธีที่ 2: เปิดพอร์ตด้วย PowerShell

เปิด Windows PowerShell แบบ Run as Administrator แล้วรัน

New-NetFirewallRule -DisplayName "App TCP 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile Any

ผลลัพธ์จะแสดงรายละเอียดของกฎ โดยมี Enabled : True, Direction : Inbound และ Action : Allow

ตัวอย่างเปิดหลายพอร์ตพร้อมจำกัด IP ต้นทาง

New-NetFirewallRule -DisplayName "SQL Server from Office" -Direction Inbound -Protocol TCP -LocalPort 1433 -RemoteAddress 203.0.113.10,198.51.100.0/24 -Action Allow

ตัวอย่างเปิดพอร์ต UDP

New-NetFirewallRule -DisplayName "App UDP 5060" -Direction Inbound -Protocol UDP -LocalPort 5060 -Action Allow

วิธีที่ 3: เปิดพอร์ตด้วย netsh

คำสั่ง netsh advfirewall ยังใช้ได้บน Windows Server ทุกรุ่นปัจจุบัน และสะดวกเมื่อต้องใส่ใน Batch Script เปิด Command Prompt แบบ Run as Administrator แล้วรัน

netsh advfirewall firewall add rule name="App TCP 8080" dir=in action=allow protocol=TCP localport=8080

ถ้าสำเร็จจะแสดงคำว่า Ok.

อนุญาตให้ Ping เซิร์ฟเวอร์ได้

Ping ใช้ ICMP ไม่ใช่พอร์ต TCP หรือ UDP Windows มีกฎสำเร็จรูปอยู่แล้วแต่ปิดไว้ เปิดได้ด้วย

Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In

ในหน้าจอ GUI กฎนี้ชื่อ File and Printer Sharing (Echo Request - ICMPv4-In) ชื่อที่แสดงอาจต่างเล็กน้อยตามภาษาและเวอร์ชันของ Windows

ตรวจสอบผลลัพธ์

  1. ดูว่ากฎถูกสร้างและเปิดใช้งาน
    Get-NetFirewallRule -DisplayName "App TCP 8080" | Get-NetFirewallPortFilter
    ควรเห็น Protocol : TCP และ LocalPort : 8080
  2. ตรวจว่ามีโปรแกรมรอรับการเชื่อมต่อที่พอร์ตนั้นจริง การเปิด Firewall ไม่ได้ทำให้พอร์ตทำงานเอง
    Get-NetTCPConnection -LocalPort 8080 -State Listen
    ถ้ามีผลลัพธ์ ให้ดูคอลัมน์ LocalAddress ถ้าเป็น 127.0.0.1 แปลว่าโปรแกรมรับเฉพาะในเครื่อง ต้องไปตั้งค่าที่โปรแกรมให้รับที่ 0.0.0.0 หรือ IP ของเครื่อง
  3. จากเครื่อง Windows ภายนอก ทดสอบการเชื่อมต่อ
    Test-NetConnection -ComputerName 203.0.113.25 -Port 8080
    TcpTestSucceeded : True แปลว่าเปิดสำเร็จ

แก้ไขและลบกฎ

ปิดกฎชั่วคราวโดยไม่ลบ

Disable-NetFirewallRule -DisplayName "App TCP 8080"

ลบกฎถาวร

Remove-NetFirewallRule -DisplayName "App TCP 8080"

ดูกฎขาเข้าทั้งหมดที่เปิดอยู่และอนุญาต

Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow | Select-Object DisplayName, Profile

ปัญหาที่พบบ่อย

เปิดกฎแล้วแต่ยังเชื่อมต่อไม่ได้

ตรวจตามลำดับนี้: (1) มีโปรแกรม Listen ที่พอร์ตนั้นจริงหรือไม่ (2) โปรแกรมรับที่ 127.0.0.1 อย่างเดียวหรือเปล่า (3) กฎครอบคลุมโปรไฟล์เครือข่ายที่ใช้อยู่หรือไม่ ดูโปรไฟล์ปัจจุบันด้วย Get-NetConnectionProfile (4) หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ตนั้นเพิ่มด้วย

มีกฎ Block ที่ขัดกัน

ใน Windows Firewall กฎ Block มีลำดับความสำคัญเหนือกฎ Allow ถ้ามีกฎ Block ที่ครอบคลุมพอร์ตเดียวกัน กฎ Allow จะไม่มีผล ตรวจด้วย Get-NetFirewallRule -Direction Inbound -Action Block -Enabled True

เลือกโปรโตคอลผิด

โปรแกรมบางตัวใช้ UDP เช่น VoIP, DNS หรือเกมเซิร์ฟเวอร์ ถ้าสร้างกฎเป็น TCP จะไม่มีผล ตรวจเอกสารของโปรแกรมและสร้างกฎให้ตรงโปรโตคอล หรือสร้างทั้งสองแบบถ้าโปรแกรมใช้ทั้งคู่

หากต้องการคำแนะนำเรื่องพอร์ตที่ควรเปิดสำหรับระบบของคุณ ติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security