Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows 10

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

มาพิจารณาวิธีบางอย่างในการบล็อกการเข้าถึงเว็บไซต์เฉพาะ, ชื่อโดเมน, URLs หรือที่อยู่ IP ใน Windows โดยไม่ใช้เครื่องมือของบุคคลที่สาม ในกรณีนี้ เราจะลองบล็อกเว็บไซต์บางแห่งโดยใช้เครื่องมือสร้างขึ้นใน Windows 10 และฟีเจอร์อัตโนมัติของ PowerShell

โดยปกติแล้ว การบล็อกเว็บไซต์บนเราเตอร์เครือข่าย (สวิตช์หรือ Wi-Fi access point ที่คุณใช้เข้าถึงอินเทอร์เน็ต) หรือใช้ซอฟต์แวร์บุคคลที่สาม (content filters, DNS filters, ฯลฯ) จะง่ายกว่า

การบล็อกเว็บไซต์โดยใช้ไฟล์ Hosts ใน Windows

วิธีที่นิยมที่สุดในการบล็อกเว็บไซต์เฉพาะบน Windows คือการแก้ไขไฟล์ hosts ปกติจะอยู่ในไดเรกทอรี %windir%\system32\drivers\etc\ โปรดทราบว่าไฟล์ hosts ไม่มีนามสกุล

เส้นทางไปยังไดเรกทอรีที่มีไฟล์ hosts ตั้งอยู่ในพารามิเตอร์ DataBasePath ภายใต้ registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters โดยค่าเริ่มต้นคือ %SystemRoot%\System32\drivers\etc วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

ไฟล์ hosts ใช้สำหรับกำหนดการแมประหว่างที่อยู่ IP และชื่อ DNS แบบแมนุแอล เมื่อ解析ชื่อ hosts มีความสำคัญสูงกว่า DNS servers ที่ระบุในการตั้งค่าการเชื่อมต่อเครือข่าย

เพื่อบล็อกเว็บไซต์เฉพาะ (เช่น facebook.com) ให้เปิดไฟล์ hosts (ด้วยสิทธิ์ผู้ดูแลระบบ) และเพิ่มสตริงแบบนี้เข้าไป:

127.0.0.1 facebook.com 127.0.0.1 www.facebook.com

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

บันทึกไฟล์และรีสตาร์ทคอมพิวเตอร์ (หรือล้าง DNS cache โดยคำสั่ง: ipconfig /flushdns)

หลังจากนั้น เมื่อพยายามเปิด facebook.com ในเบราว์เซอร์ใดๆ คุณจะเห็นข้อความ "Page not found" / "Page not available"

คุณสามารถเพิ่มบรรทัดใหม่ที่มี URLs ของเว็บไซต์ลงในไฟล์ hosts ของคุณโดยใช้ไฟล์ .bat แบบนี้:

@echo off
set hostspath=%windir%\System32\drivers\etc\hosts
echo 127.0.0.1 www.facebook.com >> %hostspath%
echo 127.0.0.1 facebook.com >> %hostspath%
exit

หรือคุณสามารถใช้ฟังก์ชัน PowerShell ต่อไปนี้เพื่อบล็อกเว็บไซต์เฉพาะในไฟล์ hosts ของคุณโดยอัตโนมัติ

Function BlockSiteHosts ( [Parameter(Mandatory=$true)]$Url) {
$hosts = 'C:\Windows\System32\drivers\etc\hosts'
$is_blocked = Get-Content -Path $hosts |
Select-String -Pattern ([regex]::Escape($Url))
If(-not $is_blocked) {
$hoststr="127.0.0.1 " + $Url
Add-Content -Path $hosts -Value $hoststr
}
}

Function UnBlockSiteHosts ( [Parameter(Mandatory=$true)]$Url) {
$hosts = 'C:\Windows\System32\drivers\etc\hosts'
$is_blocked = Get-Content -Path $hosts |
Select-String -Pattern ([regex]::Escape($Url))
If($is_blocked) {
$newhosts = Get-Content -Path $hosts |
Where-Object {
$_ -notmatch ([regex]::Escape($Url))
}
Set-Content -Path $hosts -Value $newhosts
}
}

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

เพื่อเพิ่มเว็บไซต์ลงในรายการ URLs ที่ถูกบล็อก ให้รันคำสั่ง:

BlockSiteHosts ("twitter.com")

เพื่อปลดบล็อกเว็บไซต์ ให้รัน:

UnBlockSiteHosts ("twitter.com")

บล็อกเว็บไซต์โดยใช้ DNS Filtering

หากไคลเอ็นต์ของคุณใช้ DNS server เดียวกัน คุณสามารถบล็อกเว็บไซต์บางแห่งได้โดยการสร้าง DNS entry ใน DNS นั้นและระบุค่าเช่น 127.0.0.1 โดยทางอ้อม ผลิตภัณฑ์ DNS content filters ทางการค้าส่วนใหญ่ (OpenDNS, SafeDNS, Cisco Umbrella, ฯลฯ) ใช้หลักการเดียวกัน

วิธีบล็อกที่อยู่ IP ของเว็บไซต์ใน Windows Defender Firewall

นอกจากนี้ คุณยังสามารถบล็อกเว็บไซต์บางแห่งโดยใช้ Windows Defender Firewall สร้างขึ้น ข้อเสียหลักของวิธีนี้คือ คุณจะไม่สามารถใช้ชื่อโดเมนหรือ URL ของเว็บไซต์ในกฎการบล็อกได้ Windows Defender Firewall อนุญาตให้คุณระบุที่อยู่ IP หรือ subnet เท่านั้นเป็น source/destination ก่อนอื่น คุณต้องได้ที่อยู่ IP ของเว็บไซต์ที่คุณต้องการบล็อก ทำได้ง่ายที่สุดด้วยคำสั่ง nslookup:

nslookup twitter.com

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

ตามที่เห็น คำสั่งคืนที่อยู่ IP หลายรายการที่กำหนดให้กับเว็บไซต์ คุณต้องบล็อกทั้งหมด

รัน snap-in การจัดการ Windows Defender Firewall (Control Panel\All Control Panel Items\Windows Defender Firewall\Advanced Settings หรือโดยรัน firewall.cpl)

ในส่วน Outbound Rules สร้างกฎใหม่ด้วยการตั้งค่าต่อไปนี้: วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

  • Rule Type: Custom
  • Program: All programs
  • Protocol Type: Any
  • Scope: ในส่วน "Which remote IP addresses does this rule apply to?" เลือก "These IP addresses" -> Add ในหน้าต่างถัดไป ให้ป้อนที่อยู่ IP, subnets หรือช่วงที่อยู่ IP ที่คุณต้องการบล็อก

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

คลิก OK -> Next -> Action -> Block the connection

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

ปล่อยตัวเลือกทั้งหมดไว้เหมือนเดิมในหน้าต่างที่มีโปรไฟล์ไฟร์วอลล์ที่กฎถูกนำไปใช้ จากนั้นระบุชื่อกฎและบันทึก

หลังจากนั้น Windows Defender Firewall จะบล็อกการเชื่อมต่อออกไปทั้งหมดไปยังที่อยู่ IP ของเว็บไซต์ที่ระบุ ข้อความต่อไปนี้จะปรากฏในเบราว์เซอร์ของคุณเมื่อพยายามเชื่อมต่อกับไซต์ที่ถูกบล็อก:

Unable to connect

หรือ

Your Internet access is blocked Firewall or antivirus software may have blocked the connection ERR_NETWORK_ACCESS_DENIED

ใน AD domain ของคุณ คุณสามารถปรับใช้นโยบาย Windows Firewall เพื่อบล็อกการเข้าถึงเว็บไซต์บนคอมพิวเตอร์ผู้ใช้โดยใช้ GPO อย่างไรก็ตาม ไม่สมเหตุสมผล ควรกรองเว็บไซต์บนเราเตอร์การเข้าถึงอินเทอร์เน็ต (gateway) แทน

ใช้ PowerShell สร้างกฎ Firewall เพื่อบล็อกเว็บไซต์ด้วยชื่อโดเมนหรือที่อยู่ IP

คุณยังสามารถสร้างกฎ Firewall ที่บล็อกการเชื่อมต่อกับเว็บไซต์โดยใช้ PowerShell:

New-NetFirewallRule -DisplayName "Block Site" -Direction Outbound –LocalPort Any -Protocol Any -Action Block -RemoteAddress 104.244.42.129, 104.244.42.0/24

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

สตริง "The rule was parsed successfully from the store" หมายความว่ากฎ Firewall ใหม่ถูกนำไปใช้สำเร็จ คุณสามารถค้นหาได้ในอินเทอร์เฟซกราฟิกของ Windows Defender Firewall

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

เพื่อไม่ต้อง resolve ชื่อเว็บไซต์เป็นที่อยู่ IP แบบแมนุแอล คุณสามารถใช้คำสั่ง Resolve-DnsName ของ PowerShell เพื่อได้ที่อยู่ IP ของเว็บไซต์:

Resolve-DnsName "twitter.com"| Select-Object -ExpandProperty IPAddress

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

ดังนั้น คุณสามารถแปลงชื่อเว็บไซต์เป็นที่อยู่ IP ของมันและเพิ่มกฎการบล็อกไปยังการตั้งค่าไฟร์วอลล์:

$IPAddress = Resolve-DnsName "twitter.com"| Select-Object -ExpandProperty IPAddress
New-NetFirewallRule -DisplayName "Block Site" -Direction Outbound –LocalPort Any -Protocol Any -Action Block -RemoteAddress $IPAddress

ดังนั้นตอนนี้คุณสามารถเพิ่มกฎการบล็อกไปยัง Windows Firewall สำหรับหลายเว็บไซต์พร้อมกันได้:

$SitesToBlock = "facebook.com","instagram.com","youtube.com"
$IPAddress = $SitesToBlock | Resolve-DnsName -NoHostsFile | Select-Object -ExpandProperty IPAddress
New-NetFirewallRule -DisplayName "Block Web Sites" -Direction Outbound –LocalPort Any -Protocol Any -Action Block -RemoteAddress $IPAddress

ผมเพิ่มพารามิเตอร์ –NoHostsFile ให้กับคำสั่ง Resolve-DnsName เพื่อไม่ให้ใช้ hosts file ในการ resolve

มาตรวจสอบให้แน่ใจว่ากฎ outbound block ได้ปรากฏในคอนโซล Windows Firewall

วิธีบล็อกโดเมนหรือเว็บไซต์บน Windows Defender Firewall ด้วย PowerShell

บทความนี้เป็นส่วนใหญ่เป็นการฝึกสมอง ในเครือข่ายองค์กร คุณต้องใช้การกรองเว็บไซต์บน gateway การเข้าถึงอินเทอร์เน็ต, เราเตอร์ หรือ proxy server การบล็อกระดับโฮสต์ไม่ได้มีประสิทธิภาพมาก