2010. 9. 15. 18:10
안녕하세요. 엉스데브 입니다.

이번에는 PowerShell 로 윈도우 내장 방화벽을 다루는 방법에 대해 알아보겠습니다.

0. PowerShell 에서 내장 방화벽을 다루기 위한 방법.
PowerShell 에 내장 된 관련 명령어는 없지만, "HNetCfg.FwMgr" Com 개체를 이용해서 다룰 수 있습니다.
아래 명령어를 통해 Com 객체를 만들 수 있습니다.

$FireWallMgr = New-Object -ComObject HNetCfg.FwMgr

1. 현재 방화벽이 켜져 있는지 꺼져 있는지 확인 및 켜기/끄기.
아래 명령어로 현재 방화벽이 켜저 있는지 꺼져 있는지를 확인 할 수 있습니다.
$FireWallMgr.LocalPolicy.CurrentProfile.FirewallEnabled
리턴 값이 True 이면 켜져있는 상티이고, False 이면 꺼져있는 상태입니다.

방화벽이 켜거나 끄려면 아래와 같이 하면 됩니다.

$FireWallMgr.LocalPolicy.CurrentProfile.FirewallEnabled = $True  # 방화벽 켜기
$FireWallMgr.LocalPolicy.CurrentProfile.FirewallEnabled = $False  # 방화벽 끄기

2. 현재 방화벽 설정 조회하기
현재 열려있는 포트(룰)을 조회 하려면 다음과 같이 입력하면 됩니다.

$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts

3. 특정 룰이 있는지 확인 및 선택하기.
만약, 21번 포트가 방화벽에서 열려있는지(여는 룰이 존재하는지) 확인 해 보려면 아래와 같이 하면 됩니다.

$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Port -eq "21"}

만약, 이름에 SNMP 라는 키워드가 포함되는 이름을 가진 룰을 찾아보려면, 아래와 같이 하면 됩니다.

$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Name -Like "*SNMP*"}

4. 룰 추가 하기.

$FireWallRule = New-Object -ComObject HNetCfg.FwOpenPort;
$FireWallRule.Name = "룰 이름"
$FireWallRule.Port = "열 포트(0-65535))"
$FireWallRule.Enabled = "활성화 여부($True or $False)"
$FireWallRule.Protocol = "프로토콜 지정. TCP 일 경우 6, UDP 일 경우 17)"

$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add($FireWallRule)

5. 룰 삭제하기.
만약, 이름이 Test 인 룰을 삭제하고자 한다면, 아래와 같이 하면 됩니다.

$toDeleteFireWallRule = $FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Name -Like "Test"} # 룰을 선택하고,

$toDeleteFireWallRule | %{$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove($_.Port, $_.Protocol)} #파이프로 넘겨서 삭제 메소드 호출.


6. 룰 활성화/비활성화 하기
만약, 이름에 SNMP 라는 키워드가 포함되는 이름을 가진 룰을 비활성화 하려면, 아래와 같이 하면 됩니다.

($FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Name -Like "*SNMP*"}).Enabled = $False

활성화 하려면, 아래와 같이 실행 하면 됩니다.

($FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Name -Like "*SNMP*"}).Enabled = $True


오늘은 여기까지 입니다.

감사합니다.
Posted by 알 수 없는 사용자
:

BLOG main image
Windows Server를 공부 하는 사람들의 팀블로그 by 마성민

카테고리

분류 전체보기 (76)
Windows (2)
Powershell (56)
AD (0)
Exchange (6)
System Center (9)
IIS (0)
SQL (3)
Sharepoint (0)

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

Total :
Today : Yesterday :