LoginSignup
2
3

More than 5 years have passed since last update.

Windows ServerのDHCPで、拒否フィルタを自動で設定する

Posted at

概要

社内LANに不正接続してくるPCを検知、通知するスクリプトを書いてみた。
自作スクリプトでLAN内に不正接続する端末がないか監視するではLinuxマシン上からARPを監視したが、今回はWindows Server上でDHCPを監視するものを作ってみた。

環境

  • Active DirectoryのドメインコントローラがDHCPサーバを兼ねる
  • DHCPサーバ2台は、2008R2 + 2012R2で、フェールオーバー機能は使っていない
  • DHCPのリース領域は192.168.10.0/24

スクリプト

以下のPowerShellスクリプトをタスクスケジューラで5分毎に実行する。

環境に応じてADドメイン名、DHCPサーバ名、DHCPスコープ、メールアドレス等を変更。

$dhcpservers = @("(DHCPサーバ1)", "(DHCPサーバ2)")

foreach($s in $dhcpservers){
    $illegals = Get-DhcpServerv4Lease 192.168.10.0 -ComputerName $s | Where-Object { $_.HostName -inotlike "*.(ADドメイン名)" }

    if(($illegals | Measure-Object).Count -gt 0){
        $message = $illegals | Format-List | Out-String

        Send-MailMessage -From "(送信元メールアドレス)" -To "(送信先メールアドレス)" -Subject "Illegal DHCP Client Found" -SmtpServer "(SMTPサーバアドレス)" -Body $message

        foreach($i in $illegals){
            Remove-DhcpServerv4Lease -ComputerName $s -IPAddress $i.IPAddress
            foreach($s2 in $dhcpservers){
                try{
                    Add-DhcpServerv4Filter -ComputerName $s2 -List Deny -MacAddress $i.ClientId -Description $i.HostName
                }catch{
                }
            }
        }
    }
}

自分のドメインでないホスト名を持つクライアントがDHCPでIPアドレスを取得すると、

  1. メールで通知
  2. アドレスのリースを削除
  3. 拒否フィルタに登録

という動作。

フェールオーバーを構成している環境の場合でも、
多分拒否フィルタの登録(Add-DhcpServerv4Filte)は別個に行う必要がある。

最後に、DHCPの拒否フィルタを有効にすればOK。

1回目はDHCPでIPアドレスを正常に取得できて接続されてしまうものの、2回目以降はDHCPではIPを取得できず、社内ネットワークへの侵入を少し減らせる・・・はず。

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3