Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Windows 10

Chặn tên miền hoặc trang web trên Windows Defender Firewall bằng PowerShell

Hãy xem xét các cách chặn truy cập trang web cụ thể, tên miền, URL hoặc địa chỉ IP trong Windows mà không dùng công cụ thứ ba. Chúng ta sẽ thử chặn trang web bằng công cụ tích hợp Windows 10 và tính năng tự động hóa PowerShell.

Thường dễ hơn chặn trang web trên router mạng (switch hoặc Wi-Fi access point) hoặc dùng phần mềm thứ ba (bộ lọc nội dung, bộ lọc DNS, v.v.).

Chặn trang web dùng file Hosts trong Windows

Cách phổ biến nhất chặn trang web cụ thể trên Windows là chỉnh sửa file hosts. Thường nằm trong thư mục %windir%\system32\drivers\etc\. Lưu ý file hosts không có phần mở rộng.

Đường dẫn thư mục chứa file hosts được đặt trong tham số DataBasePath dưới khóa registry HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters. Mặc định là %SystemRoot%\System32\drivers\etc.

File hosts dùng để gán thủ công ánh xạ giữa địa chỉ IP và tên DNS. Khi phân giải tên, hosts có độ ưu tiên cao hơn DNS server trong cài đặt kết nối mạng.

Để chặn trang web cụ thể (ví dụ facebook.com), mở file hosts (với quyền admin) và thêm các dòng sau:

127.0.0.1 facebook.com
127.0.0.1 www.facebook.com

Lưu file và khởi động lại máy ( hoặc xóa cache DNS bằng lệnh: ipconfig /flushdns).

Sau đó, khi cố mở facebook.com trên bất kỳ trình duyệt nào bạn sẽ thấy thông báo "Page not found" / "Page not available".

Bạn có thể thêm dòng chứa URL trang web vào file hosts bằng file .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

Hoặc dùng hàm PowerShell sau để tự động chặn trang web cụ thể trong file 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
    }
}

Để thêm trang web vào danh sách URL bị chặn, chạy lệnh:

BlockSiteHosts ("twitter.com")

Để bỏ chặn trang web, chạy:

UnBlockSiteHosts ("twitter.com")

Chặn trang web dùng lọc DNS

Nếu client dùng cùng DNS server, bạn có thể chặn trang web bằng cách tạo bản ghi DNS trên DNS server đó và chỉ định 127.0.0.1. Đa số bộ lọc nội dung DNS thương mại (OpenDNS, SafeDNS, Cisco Umbrella, v.v.) dùng nguyên tắc tương tự.

Chặn địa chỉ IP trang web trong Windows Defender Firewall

Bạn cũng có thể chặn trang web bằng Windows Defender Firewall tích hợp. Nhược điểm chính: không thể dùng tên miền hoặc URL trong quy tắc chặn. Windows Defender Firewall chỉ cho phép chỉ định địa chỉ IP hoặc subnet làm nguồn/đích.

Trước hết, lấy địa chỉ IP của trang web muốn chặn. Dễ nhất dùng lệnh nslookup:

nslookup twitter.com

Như bạn thấy, lệnh trả về nhiều địa chỉ IP gán cho trang web. Bạn phải chặn tất cả.

Mở snap-in quản lý Windows Defender Firewall (Control Panel\All Control Panel Items\Windows Defender Firewall\Advanced Settings hoặc chạy firewall.cpl).

Trong mục Outbound Rules, tạo quy tắc mới với cài đặt:

  • Rule Type: Custom
  • Program: All programs
  • Protocol Type: Any
  • Scope: Ở mục "Which remote IP addresses does this rule apply to?" chọn "These IP addresses" → Add. Nhập địa chỉ IP, subnet hoặc dải IP muốn chặn.

OK → Next → Action → Block the connection.

Giữ nguyên các tùy chọn trong cửa sổ hồ sơ tường lửa áp dụng quy tắc. Sau đó đặt tên quy tắc và lưu.

Sau đó Windows Defender Firewall sẽ chặn tất cả kết nối ra tới địa chỉ IP của trang web. Thông báo sau sẽ xuất hiện trên trình duyệt khi cố kết nối trang bị chặn:

Unable to connect

Hoặc

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

Trong miền AD, bạn có thể triển khai chính sách Windows Firewall chặn truy cập trang web trên máy user dùng GPO. Tuy nhiên, điều này không hợp lý. Tốt hơn lọc trang web trên router gateway truy cập Internet.

Dùng PowerShell tạo quy tắc Firewall chặn trang web theo tên miền hoặc IP

Bạn cũng có thể tạo quy tắc Firewall chặn kết nối tới trang web bằng PowerShell:

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

Chuỗi "The rule was parsed successfully from the store" nghĩa là quy tắc Firewall mới đã áp dụng thành công. Bạn tìm thấy nó trong giao diện đồ họa Windows Defender Firewall.

Để không phải phân giải tên trang web thành IP thủ công, dùng cmdlet Resolve-DnsName PowerShell lấy IP trang web:

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

Vậy bạn có thể chuyển tên trang web thành địa chỉ IP và thêm quy tắc chặn vào cài đặt firewall:

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

Bây giờ bạn có thể thêm quy tắc chặn cho nhiều trang web cùng lúc:

$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

Tôi thêm tham số –NoHostsFile vào cmdlet Resolve-DnsName để không dùng file hosts phân giải.

Kiểm tra quy tắc chặn outbound đã xuất hiện trong console Windows Firewall.

Bài viết này chủ yếu là bài tập tư duy. Trong mạng doanh nghiệp, phải dùng lọc trang web trên gateway, router hoặc proxy server truy cập Internet. Chặn cấp host không hiệu quả lắm.