PowerShell의 원격 관리를 이용하여 PC들을 인터넷 접속 못하게 하기


This slideshow requires JavaScript.

PowerShell의 원격 관리를 이용하면 다양하게 회사 컴퓨터를 관리할 수 있다. 특히 PC들의 routing table을 수정하여 특정한 네트워크 및 컴퓨터에 접속을 제한할 수 있다.

다음 상황을 생각해본다.

  • 직원들이 근무 시간에 인터넷 접속을 제한하고자 한다.
    이를 위해서는 Default root를 제거한다
    route delete 0.0.0.0
  • 인터넷 네트워크 접속이 가능한 상태에서 특정한 네트워크 접속만 차단하고자 한다.
    이를 위해서 특정한 네트워크로 가는 패킷을 사내 네트워크에 없는 컴퓨터(192.168.123.253)로 보내 버린다
    route add 221.147.82.0 mask 255.255.255.0 192.168.123.253
  • 사내 컴퓨터의 특정한 컴퓨터만 접속 못하게 하고자 한다.
    이를 위하여 특정한 컴퓨터(192.168.123.100)로 가는 패킷을 사내 네트워크에 없는 컴퓨터(192.168.123.253)로 보내 버린다
    route add 192.168.123.100 mask 255.255.255.255 192.168.123.253

위의 내용을 로컬 컴퓨터에서 가능하다면 원격 컴퓨터에서 PowerShell로 한꺼번에 적용을 시킬 수 있다.
참고로 관리를 하는 원격 컴퓨터는 직원들 컴퓨터와 동일한 네트워크에 있는 것으로 간주한다.

Invoke-command –computername (get-content c:\computers.txt) {route delete 0.0.0.0}

이렇게 하면 computers.txt 파일에 있는 모든 컴퓨터의 default root가 제거 되기 때문에 인터넷에 연결할 수 없게 된다.

마지막으로 이렇게 하더라도 클라이언트 컴퓨터를 재부팅하면 이러한 설정이 초기화된다. 그러므로 반영구적으로 routing table 설정을 수정하고자 할 때는 –p 옵션을 사용한다. Invoke-command –computername (get-content c:\computers.txt) {route –p delete 0.0.0.0}으로 하면 된다.

그리고 이러한 설정을 할 때마다 이렇게 입력하는 것이 귀찮으면 미리 이러한 것을 .ps1 파워셀 스크립트 파일로 만들어 사용하면 된다. 그래서 이.ps1 파일을 group policy를 통하여 적용할 수도 있고 아니면 그냥 수동으로 실행하여 적용해도 된다.

결론적으로 말하면, PowerShell의 Remote Management 기능과 각 컴퓨터의 routing table을 사용하면 쉽게 사용자 컴퓨터의 네트워크 접속을 차단 및 허용을 할 수 있다. 그래서 Proxy server 및 Firewall 기능을 일부 대체할 수 있다.

아래 그림은 직접 테스트한 것이다.

 

Hyper-V 3.0 in Windows 8 and Windows Server 2012의 기능 요약


<주요 내용>

  • PowerShell 지원
  • 상단한 성능 향상
  • VHD 및 VHDX 지원
  • 가상 컴퓨터의 메모리를 수동으로 지정하지 않는 Dynamic Memory 지원
  • Remote Management
  • Live Storage Migration

 <Hyper-V 클라이언트 주요 특징>

  • 32 Virtual CPUs
  • NUMA in VM
  • 512 GB RAM
  • Sleep, Hibernate
  • Management console
  • Manage Hyper-V Server from this console
  • Snapshots
  • Up to 1024 running VM’s
  • VHD, and VHDX (up to 16TB)
  • Dynamic disks, Differencing disks, pass through disks, fixedsize disks
  • 4K sector size
  • DMTF comliant WMI
  • Networking offloads
  • Live Storage Migration
  • Native VHD boot
  • Dynamic Memory
  • Remote Management
  • PowerShell
  • Export snapshots
  • Resource Pools
  • External, Internal and Private Networks
  • Bi-Direction audio
  • Enlightened IDE & SCSI controllers
  • Hyper-V on SMB
  • up to256 virtual drives
  • up to 12 virtual NICs
  • VLAN support
  • 3D Graphics (Software)
  • Mutli Touch
  • USB redirection (with RDP)
  • Wireless NICs
  • Export & Import VMs
  • Hyper-V Extensible Switch
  • VHDX Resiliency

<가상 컴퓨터의 운영체제>

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows Server 2003 R2 SP2
  • Windows Vista
  • Windows Server 2008
  • Windows 7
  • Windows Server 2008 R2
  • Windows Storage Server 2008 R2
  • Windows Home Server 2011
  • Windows SBS 2011
  • Windows 8
  • Windows Server 8
  • CentOS 5.2-5.6
  • CentOS 6.0
  • Red Hat Enterprise Linux 5.2-5.6, 6.0, 6.1
  • SUSE Linux Enterprise 10, 11

Windows 8에서 Hyper-V를 설치하여 VM을 생성한 후 VM으로 Host machine 부팅하기(Native VHD boot)


1) Hyper-V를 설치한다
2) VM을 생성한다
3) 원하는 OS를 설치한다
4) 탐색기에서 생성한 VM을 선택하여 마우스 우측 버튼을 사용하여 Mount한다
5) VM이 G드라이라면 cmd.exe에서 다음과 같이 작업한다.
bcdboot G:\windows

6) Windows 8을 재시작하면 지금 mount한 VM이 목록에 나타난다. 그것으로 부팅하면 된다.
이 결과로서 vm이 host os가 되는 것이다. (즉, Native VHD boot가 된다는 것이다)

** 물론 windows 8의 hyper-v 관리자에서 vm을 실행해도 된다.
** Windows 8의 Hyper-V에서는 Dynamic memory를 지원한다. 즉, 관리자가 vm이 사용하는 메모리를 지정해주지 않아도 자동으로 알아서 할당한다.
** Hyper-V 3.0에서는 Wireless NIC도 지원한다 . Hyper-V 3.0 in Windows 8 and Windows server 2012의 자세한 기능을 알려면 아래 링크를 참고한다.

**참고: http://goo.gl/qwwAV

Windows Server 2012에서 Hyper-v의 VM들의 메모리 한꺼번에 변경하기


1) PS로 시작하는 Virtual Machine들의 이름을 확인하기
Get
-VM -Name PS* | ft Name, MemoryMaximum

2) 이러한 VM들의 메모리를 8GB로 한꺼번에 설정하기
Get
-VM -Name PS* | Set-VM -MemoryMaximumBytes 8589934592

3) VM들의 메모리를 한꺼번에 4GB로 설정하기
Get
-VM -Name PS* | Set-VM -MemoryMaximumBytes 4GB

참고: http://goo.gl/umvuZ

PowerShell v3에서 Disk 관리하기


1) 모든 디스크 확인하기
Get-Disk

2) 모든 파티션 확인하기
Get-Partition

3) 첫 번째 디스크의 파티션 확인하기
Get-Partition -DiskNumber 0

4) 두 번째 디스크의 모든 데이터 삭제하기
Get-Disk 1 | Clear-Disk -RemoveData

5) 두번째 디스크에 파티션 생성하기
New-Partition -DiskNumber 1 -UseMaximumSize

6) 생성한 파티션에 포맷하기
Get-Partition -DiskNumber 1 -PartitionNumber 1 | Format-Volume -FileSystem NTFS

7) 생성한 파티션에 볼륨 이름을 붙여서 포맷하기
New-Partition -DiskNumber -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel USB

8) 드라이브 문자 T:로 변경하기
Set-Partition -DriveLetter E -NewDriveLetter T
9) 파티션 활성화하기
 Set-Partition -DriveLetter T -IsActive $ture
10) 파티션(T:) 삭제하기
Remove-Partition -DriveLetter T
11) 디스크 온라인 하기
Set-Disk 1 -isOffline $false  
12) 읽기전용 플래그 삭제하기
Set-Disk 1 -isReadOnly $false
13) GPT로 초기화하기
Initialize-Disk 1 -PartitionStyle GPT
============================================
diskpart.exe로 작업한 것과 powershell v3으로 작업한 것 비교하기

** diskpart.exe 작업
select
disk 1
clean

create partition primary
format fs=ntfs quick
active
assign letter=e

 ** PowerShell 작업
Get-Disk 1 | Clear-Disk -RemoveData

New-Partition -DiskNumber 1 -UseMaximumSize -IsActive -DriveLetter E | Format-Volume -FileSystem NTFS -NewFileSystemLabel USB
 참고: http://goo.gl/axUIB

자신이 입력한 cmdlet을 파일로 저장하기


하나의 세션에서 입력한 모든 명령어를 확인하여 파일로 저장할 수 있으면 좋을 것 같다. 이것을 가능하게 하는 것이 Get-History이다.
이렇게 하면 다시 그 cmdlet을 순서대로 다시 복습할 수 있기 때문이다.

Get-History로 최대 확인할 수 있는 개수는 64개까지이다. 그러므로 이 이상 되는 것을 확인할 수 없다는데 유의한다

  • 하나의 세션에서 많은 cmdlet을 입력하여 작업을 한다.
  • Get-History
    (이렇게 하면 최근 사용한 명령어를 기준으로 최대 32개까지만 확인이 가능하다)
  • Get-History –Count $MaximumHistoryCount
    (64개까지 cmdlet을 확인할 수 있다)
  • Get-History –Count 64
  • H –c 64
    (위의 3개 명령어는 모두 동일하다)
  • H –c 64 | Out-file c:\cmdletlist.txt
    (이렇게 하여 최근을 기준으로 하여 최대 64개까지의 명령어를 순서대로 기록하여 파일로 저장한다)

나이를 다양하게 표현하기- 전치사 At


창세기 17장 17절 말씀을 다양한 영어 성경 버전으로 나이 표현의 방법을 살펴보면 다음과 같다.

  • Will Sarah bear a child at the age of ninety?”
  • Will Sarah give birth at ninety?
  • And how can Sarah have a baby when she is ninety years old?”
  • Shall Sarah, who is ninety years old, bear a child?
  • Can Sarah, a ninety-year-old woman, give birth?
  • Will Sarah, at ninety years old, give birth?
전치사 At은 “딱 그것”을 말하기 때문에 [집중],[정확한 것],[순간적인 것]을 표현할 때 사용한다. 그래서 [at 나이/숫자]로 표현하면 “정확히 나이/숫자는~”로 이해하면 된다.
“정확한 것”을 표현할 때 사용하는 전치사 at은 나이뿐 아니라  [목표/방향, 거리, 눈금/비율, 가격,희생/대가]일 때도 사용한다 .