Active DirectoryとGPOを使ってWindows 10端末のプロキシの設定を一括変更する方法

## はじめに

グループポリシーオブジェクト（GPO）を使用すると、ドメインに参加している複数のクライアント端末に対して、一括で設定を適用することができます。

前回の記事では、自宅環境でGPOを使って壁紙をペンギンさんに統一する検証を行っているので、そちらも参考にしてください。
[Active DirectoryとGPOを使ってWindows 10/11端末の壁紙を一括変更する方法](https://qiita.com/free-honda/items/62efadc861dd211a1062)

この記事では、GPOを使用して、Windows 10端末のインターネットオプションにおけるプロキシサーバー設定を自動的に構成する方法について解説します。

## 前提条件
今回の検証を進めるにあたり、以下の環境が必要です。

:::note info
**検証環境**
**AD兼DNSサーバー:**
Windows Server（ここでは Windows Server 2022）で構築され、ドメインが構成済みであること。

**Windows 10 端末:**
既にドメインに参加している状態。

**プロキシサーバー:**
自宅ネットワーク環境にプロキシサーバーが構築されていること。

**GPOの基本操作知識:**
GPOを使って設定を配布するための基本操作が理解されていること。
:::

GPOの操作には、ADサーバーに管理者権限を持ってログインする必要があります。管理者権限を持つユーザーの作成も忘れずに行ってください。

また、[プロキシサーバーの構築](https://qiita.com/free-honda/items/27a201413787414b0108)と[ADサーバーの構築](https://qiita.com/free-honda/items/2fcdc8343aa878c17d9e)については、過去の記事も参考にしてください。

**自宅のVirtualBox環境**

今回も VirtualBox 上で構築した検証環境を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/1663356f-58bd-af4c-7427-cb175f312ce7.png)

:::note info
※検証には実行中の「Windows Server 2022」「Windows 10端末」「AlmaLinux(プロキシサーバー)」を使用します。
:::

## 知識整理
今回の構築に必要な知識を簡単に整理します。

**・グループポリシーオブジェクト（GPO）**

GPOは、Active Directoryを通じてネットワーク内のコンピュータやユーザー設定を一元管理する仕組みです。ポリシーの適用により、セキュリティ設定や環境構成を効率的に統制できます。

設定はドメイン全体や特定のユーザー、コンピュータグループに対して行えます。

**・プロキシサーバー**
プロキシサーバーは、クライアントとインターネットの間に入ることで、アクセス制御やセキュリティ保護を提供します。

特に企業ネットワークで利用され、トラフィックの監視やセキュリティ強化に役立ちます。

**・プロキシ設定GPO**
Windowsの「インターネットオプション」でプロキシ設定を行います。GPOを使えば、すべてのクライアントに統一した設定を強制的に適用することができます。

:::note warn
さらに詳しく知りたい場合は、以下のリンクも参考にしてください。
**GPOについて**
公式サイト：https://learn.microsoft.com/ja-jp/windows-server/identity/ad-ds/manage/group-policy/group-policy-overview
公式サイト：https://learn.microsoft.com/ja-jp/training/modules/implement-group-policy-objects/
参考サイト：https://automationlabo.com/wat/?p=11644

**プロキシサーバーについて**
参考サイト: https://www.ntt.com/bizon/glossary/j-h/proxy-server.html

:::

## 構築の流れ
GPOを使ってプロキシ設定を強制適用する具体的な手順を、以下の3ステップで説明します。

**ステップ1：プロキシ設定GPOの作成**
**ステップ2：プロキシ設定の変更禁止GPOの作成**
**ステップ3：Windows 10 端末での適用と確認**

:::note info
今回のGPOは、私のドメインユーザー「honda test」にリンク(適用)して検証します。
:::

## ステップ1：プロキシ設定GPOの作成

前提として、検証環境がすでに構築されていることを想定しています。

過去の記事でも、Windows Server 2022でのADサーバー構築やドメイン参加についても解説していますので、参考にしてみてください。

:::note warn
**過去の記事**
[Windows Server 2022で自宅ネットワークにADサーバーを構築し、Windows 10端末をドメインに参加させる方法](https://qiita.com/free-honda/items/2fcdc8343aa878c17d9e)


[LinuxサーバーをWindows Server 2022のADドメインに参加させる手順と確認方法](https://qiita.com/free-honda/items/a7b4c6fec0ef6eef0247)
:::



大まかな手順は以下の通りです。

```
1. GPO管理ツールの起動
「グループポリシー管理」ツールをADサーバーで起動します。

2. 新しいGPOの作成
ドメイン名を右クリックし、「新しいGPOの作成」を選択。名前を「プロキシ設定ポリシー」とします。

3. GPOの編集
作成したGPOを右クリックして「編集」を選択。以下のパスに移動します。
パス先：コンピュータの構成またはユーザーの構成 > ポリシー > 管理用テンプレート > Windows コンポーネント > Internet Explorer > インターネット設定 > プロキシ設定

4. プロキシ設定の構成
「プロキシ設定」を開き、「LANにプロキシサーバーを使用する」にチェックを入れます。
アドレス欄に「10.0.1.1」、ポート欄に「3128」を設定し、他のチェックボックスは外します。

5. GPOのリンク
「プロキシ設定ポリシー」をドメインや特定のOU（組織単位）にリンクします。
```

:::note alert
「3. GPOの編集」について、私のWindows Server 2022環境では、「Internet Explorerのメンテナンス」オプションが非推奨となっており、プロキシの設定が直接行えなくなっていました（2024/9/15時点）。
:::

そのため、「3. GPOの編集」以降の手順として、レジストリ設定をGPOで配布する方法を採用しました。

※レジストリの編集は慎重に行ってください。

```
GPOの作成と編集: 
上記手順通りGPOを作成し、「ユーザーの構成 > 基本設定 > Windowsの設定 > レジストリ」に移動します。

新しいレジストリエントリを作成し、以下のキーを設定します。

1. プロキシ有効化
パス: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
値の名前: ProxyEnable
値のデータ: 1

2. プロキシサーバー設定
パス: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
値の名前: ProxyServer
値のデータ: 10.0.1.1:3128（例として）
```

**実際の設定中の画面**
 1.プロキシ有効化

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a9cfb568-dac5-ad58-128f-227bc65c673b.png)

 2.プロキシサーバー設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/99647126-259e-4168-24ed-a8677b4207eb.png)

今回はレジストリを直接編集してプロキシ設定をクライアントに適用しましたが、PowerShellスクリプトをGPOで配布する方法もあります。

少し長くなりますので、おまけとして記事の最後で手順をご紹介します。

## ステップ2：プロキシ設定の変更禁止GPOの作成
ここでは、ユーザーがプロキシ設定を変更できないようにするためには、GPO（グループポリシーオブジェクト）を使ってプロキシ設定をロックし、管理者以外が変更できないようにする方法を説明します。

以下の手順で設定を行っていきます。

```
1. GPO管理ツールの起動
「グループポリシー管理」ツールをADサーバーで起動します。

2. 新しいGPOの作成
ドメイン名を右クリックし、「新しいGPOの作成」を選択。名前を「プロキシ設定の変更禁ポリシー」とします。

3. GPOの編集
作成したGPOを右クリックして「編集」を選択。以下のパスに移動します。
パス先：コンピュータの構成またはユーザーの構成 > ポリシー > 管理用テンプレート > Windows コンポーネント > Internet Explorer > プロキシの設定を変更できないようにする

4. ポリシー設定
「接続タブを無効にする」を有効化にして適用して閉じる。

5. GPOのリンク
「プロキシ設定ポリシー」をドメインや特定のOU（組織単位）にリンクします。
```

**実際の設定中の画面**
 3. プロキシ設定の変更禁止

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ee9a9fbe-6064-baa5-9ca6-3c5258838986.png)



## ステップ3：Windows 10 端末での適用と確認
**グループポリシーの適用前**
GPO適用前には、プロキシ設定がされておらず、自由に編集できる状態です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/4ccf50e5-9732-e160-cb99-f6a07b9cc70f.png)


**グループポリシーの適用後**
Windows 10端末で管理者権限のコマンドプロンプトを開き、以下のコマンドでGPOが適用されているか確認します。

```
gpupdate /force
gpresult /r
```

その後、「インターネットオプション」のLAN設定で、プロキシサーバーのアドレスが「10.0.1.1」、ポートが「3128」に設定され、編集できない状態（グレーアウト）であることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3067a781-1aa7-14a8-2fd0-3be2e68446be.png)


最後に、ブラウザを起動し、インターネットへの接続を確認します。プロキシ経由で正常に接続できれば検証は完了です。

```
[honda@HONDA-TEST ~]$ sudo tail -f /var/log/squid/access.log | grep yahoo
1726362394.067    842 10.0.1.2 TCP_TUNNEL/200 7982 CONNECT www.yahoo.co.jp:443 -
1726362394.100    851 10.0.1.2 TCP_TUNNEL/200 7982 CONNECT www.yahoo.co.jp:443 -
1726362399.555   4758 10.0.1.2 TCP_TUNNEL/200 46140 CONNECT www.yahoo.co.jp:443
```

**実際の検証画面**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a7fa4380-c133-50a2-d6a8-dd18f9a18def.png)

Windows 10端末から「yahoo.co.jp」にアクセスした際、自宅のプロキシサーバーを通してインターネットに接続できていることが確認できました。

なお、DNSサーバーも自宅で構築しており、名前解決の仕組みは内部DNS(外部DNSにフォワード)を通して行われます。

[自宅環境のWindows Server 2022を使ったDNSフォワードの設定と名前解決検証](https://qiita.com/free-honda/items/c19de4dd7930dd258c96)

## まとめ
この記事では、GPOを使ってドメインに参加している端末に、プロキシサーバーの設定を一括で適用する方法を紹介しました。

これにより、ネットワーク全体でプロキシ設定を簡単に管理し、統一することが可能です。

GPOを使えば、さらに高度な設定も実現できますが、まずは基本的な設定から技術検証を進めていきたいと思います。

これでGPOの基本操作はバッチリですね！

## おまけ
おまけ記事では、PowerShellスクリプトをGPOで配布する方法を紹介します。GPO管理が難しい場合や、管理テンプレートに設定がない場合には、スクリプトによる制御が有効です。

以下のPowerShellスクリプトを作成します。

```
Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyServer -Value "10.0.1.1:3128"
Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyEnable -Value 1
```

「ユーザーの構成 > ポリシー > スクリプト > ログオンスクリプト」にこのスクリプトを登録し、ユーザーがログオンするたびに適用されるように設定します。

## 参考記事
https://qiita.com/ktyubeshi/items/b9c9274dd027ffdbb931

https://qiita.com/Kamonasu21c/items/b570d7ce1e35b7436180

https://f-journey.com/it/setting_proxy_on_local_pc/

https://atmarkit.itmedia.co.jp/ait/articles/1501/05/news008.html

https://miyamon-se-exp.hatenablog.jp/entry/2016/10/15/214726