PowerShellとWindows Defenderファイアウォールでドメイン・Webサイトをブロックする方法
本記事では、サードパーティ製ツールを使わずに、特定のWebサイト、ドメイン名、URL、IPアドレスへのアクセスをブロックする方法を解説します。ここでは、Windows 10の標準機能とPowerShellの自動化機能を活用して、特定のWebサイトをブロックする手順を実際に試していきます。
なお、通常はネットワークルーター(インターネット接続に使用しているスイッチやWi-Fiアクセスポイント)や、コンテンツフィルター・DNSフィルターなどのサードパーティ製ソフトウェアを使ってWebサイトをブロックする方が簡単です。
Windowsのhostsファイルを使ってWebサイトをブロックする
Windowsで特定のWebサイトをブロックする最も一般的な方法は、hostsファイルを編集することです。このファイルは通常 %windir%\system32\drivers\etc\ ディレクトリにあり、拡張子は付いていません。
hostsファイルが格納されているディレクトリへのパスは、レジストリキー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters の DataBasePath パラメータで定義されています。デフォルト値は %SystemRoot%\System32\drivers\etc です。
hostsファイルは、IPアドレスとDNS名の対応関係を手動で割り当てるために使われます。名前解決の際、hostsファイルはネットワーク接続設定で指定されたDNSサーバーよりも優先されます。
特定のWebサイト(例:facebook.com)をブロックするには、管理者権限でhostsファイルを開き、以下のような行を追加します。
127.0.0.1 facebook.com 127.0.0.1 www.facebook.com

ファイルを保存したら、PCを再起動するか、ipconfig /flushdns コマンドでDNSキャッシュをクリアしてください。
その後、ブラウザでfacebook.comを開こうとすると、「ページが見つかりません」「ページを表示できません」といったメッセージが表示されるようになります。
新しい行を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ファイル内の特定のWebサイトを自動的にブロック・解除できます。
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
}
}

Webサイトをブロックリストに追加するには、次のコマンドを実行します。
BlockSiteHosts ("twitter.com")
ブロックを解除する場合は、こちらを実行します。
UnBlockSiteHosts ("twitter.com")
DNSフィルタリングによるWebサイトのブロック
クライアントが同じDNSサーバーを利用している環境であれば、そのDNSサーバーにエントリを作成し、127.0.0.1などを指定することでも特定のWebサイトをブロックできます。実はOpenDNS、SafeDNS、Cisco Umbrellaなどの商用DNSコンテンツフィルターも、同じ仕組みを応用しています。
Windows DefenderファイアウォールでWebサイトのIPアドレスをブロックする方法
標準搭載のWindows Defenderファイアウォールを使ってWebサイトをブロックすることも可能です。ただしこの方法には大きな制約があり、ブロック規則にドメイン名やURLを指定できず、送信元/送信先として指定できるのはIPアドレスまたはサブネットのみです。
まず、ブロック対象のWebサイトのIPアドレスを調べる必要があります。nslookup コマンドを使うのが最も簡単です。
nslookup twitter.com

ご覧のとおり、コマンドの結果にはWebサイトに割り当てられた複数のIPアドレスが返されます。これらすべてをブロック対象にする必要がある点に注意してください。
続いて、Windows Defenderファイアウォール管理スナップインを起動します(コントロールパネル > すべてのコントロールパネル項目 > Windows Defenderファイアウォール > 詳細設定、または firewall.cpl を実行)。
「送信の規則」セクションで、以下の設定内容の新規規則を作成します。
- 規則の種類:カスタム
- プログラム:すべてのプログラム
- プロトコルの種類:任意
- スコープ:「この規則はどのリモートIPアドレスに適用しますか?」のセクションで「次のIPアドレス」→「追加」を選択し、ブロックしたいIPアドレス・サブネット・IPアドレス範囲を入力します。

あとは OK → 次へ → 操作 と進み、「接続をブロックする」を選択します。

規則を適用するファイアウォールプロファイルの画面では、オプションは初期状態のままにしておきます。最後に規則名を入力して保存すれば完了です。
これにより、Windows Defenderファイアウォールは指定したWebサイトのIPアドレス宛てのすべての送信接続をブロックします。ブロックされたサイトに接続しようとすると、ブラウザには次のようなメッセージが表示されます。
Unable to connect
または
Your Internet access is blocked Firewall or antivirus software may have blocked the connection ERR_NETWORK_ACCESS_DENIED
ADドメイン環境では、GPOを使ってWindowsファイアウォールのポリシーを展開し、ユーザーのPC上でWebサイトへのアクセスをブロックすることも技術的には可能です。ただし、これは現実的とは言えません。Webサイトのフィルタリングは、インターネット接続用のルーター(ゲートウェイ)側で行うのが望ましいでしょう。
PowerShellでドメイン名・IPアドレス単位のブロック規則を作成する
ファイアウォール規則は、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ファイアウォールのGUI画面でも作成された規則を確認できます。

Webサイト名を手作業でIPアドレスに変換する手間を省くには、Resolve-DnsName コマンドレットを使ってIPアドレスを取得すると便利です。
Resolve-DnsName "twitter.com"| Select-Object -ExpandProperty IPAddress

こうして取得した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
さらに、複数のWebサイトに対して一括でブロック規則を追加することも可能です。
$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
ここでは、名前解決時にhostsファイルを参照しないよう、Resolve-DnsName コマンドレットに –NoHostsFile パラメータを指定しています。
最後に、Windowsファイアウォールの管理コンソールにブロック用の送信規則が登録されていることを確認しておきましょう。

なお、本記事の内容はあくまで学習・検証目的のものです。企業ネットワークにおいては、インターネット接続ゲートウェイ、ルーター、プロキシサーバー側でWebサイトフィルタリングを行うべきであり、端末(ホスト)レベルでのブロックは効果が限定的である点に留意してください。
-
Windows 10のファイアウォールでプログラムをブロックする方法を徹底解説
はじめに セキュリティ対策などの理由から、Windowsファイアウォールを使って特定のプログラムをブロックしたいケースがあります。ファイアウォールでプログラムをブロックすると、そのプログラムはインターネットやローカルネットワークへのアクセスが一切できなくなります。 Windows 10のDefenderファイアウォールは、どのプログラムやサービスがネットワークやインターネットと通信できるかを細かく指定できるため、デバイスの保護に役立ちます。例えば、特定のアプリに自動更新させたくない場合や、他のユーザーに勝手に使われたくない場合などに、この機能は非常に有効です。 本記事では、Windowsファイ
-
【保存版】Microsoft DefenderでPCを守る方法|スキャンからリアルタイム保護まで徹底解説
テクノロジーの世界は、まさに「西部開拓時代」と呼べる状況です。技術革新の加速に伴い、さまざまな新しい技術が次々と登場しています。しかし同時に、マルウェアによる被害も大幅に増加すると予想されており、悪意あるハッカーたちは日夜、新たな脆弱性を探し続けています。 これは決して大げさな話ではありません。Insight Enterprisesが委託したIDG Research Servicesの調査によると、「2020年に分散型ITや在宅勤務への対応のためITセキュリティ投資を増やしたにもかかわらず、上級ITおよびITセキュリティリーダーの約80%が、自組織のサイバー攻撃への防御が不十分だと考えている」