본문 바로가기
운영체제 (LNX,WIN)

netsh를 사용한 네트워크 및 방화벽 구성

by 날으는물고기 2009. 10. 9.

netsh를 사용한 네트워크 및 방화벽 구성

참고: http://technet.microsoft.com/ko-kr/library/cc778925.aspx


1. netsh를 사용해보자 (CLI=Dos Commanand Mode, GUI=윈도우 화면)

GUI 로 친숙한 방화벽 정책 설정을 하면 되는 것을 왜 궂이 CLI로 하려고 하는지 묻는다면 설정에 대한 재미도 있을 수 있고 GUI로 보지만 가끔 시스템 상에 문제가 되었을 때 GUI가 열리지 않는다거나 숨겨진 방화벽 설정을 볼 때에는 이 netsh 를 이용하여 설정하는 방법도 매우 빠르며 유용 할 수 있다.

netsh 는 비단 방화벽만 설정 할 수 있는 것이 아닌 RAS, NAT, OSPF도 설정을 할 수 있다. 요즘 들어 MS 운영체제의 취약성을 이용하여 웜 감염 후 netsh를 이용하여 네트워크를 조작하는 수법도 존재한다. 그 이유는 GUI를 통하지 않고도 명령어를 통한 배치 파일로 DNS 조작도 시도 할 수 있으며, 악의적인 DNS 서버에 Domain Name 을 Query 할 때 악의적인 사용자가 미리 지정한 IP로 접속을 유도도 할 수 도 있기 때문이다. 이러한 기법은 파밍(Pharming) 기법으로도 응용할 수 있는 부분이다.

Window Support Tool 로 사용하는 ipseccmd 를 (GUI로는 secpol.msc) 사용하여 in, outbound 로 포트에 대한 차단을 할 수 있다면, netsh 는 윈도우 XP 방화벽은 IP및 포트에 대한 inbound 그리고 어플리케이션 프로그램에 대한 in, outbound에 대한 차단 및 허용이 가능하다. 엄밀히 따져보면 Stateful Inspection 방화벽이라고 말하지만 Outbound에 대한 IP 및 포트 정책이 없는 방화벽이 과연 데이터 스트림까지 지원하는 Stateful inspection 방화벽이라고 하기엔 조금 미흡한 점이 있지 않나 싶다.


netsh 를 사용하는 것은 위의 그림처럼 클릭 할 때의 설정과 그 결과값이 똑같다. CLI 를 싫어하시는 분들이 많을지 모르나 시간, 속도, GUI로 볼 수 없는 숨겨진 기능을 볼 수 있다는 장점이 있다. 즉 한눈에 일목요연하게 보고 싶거나 정보 수집용으로도 손색이 없을 것이다.

각 구문만 쉽게 눈에 들어오고 익힌다면 빠른 설정을 할 수 있을 것이다. 네트워크 방화벽처럼 윈도우 방화벽 설정시에 기본적인 정책은 Deny 이다. (방화벽을 enable 시켰을 때) 윈도우 시작->실행->cmd->netsh 를 TYPE 해 보자.

여기서는 CD (Change Directory)가 안 되므로, 각 디렉토리 이동은 (..) Double Dot 또는 (.) Single Dot 를 이용하여 이동하자. 또한 모든 명령어는 ? 로 확인한다. 이렇게 설정하지 않아도 직접적으로 명령어를 이어서 사용함으로써 한 번에 설정이 가능하다.

아래의 실제 방화벽 설정의 예제들을 보자.

2. netsh로 방화벽 설정 보기 및 방화벽 설정하기

다음의 명령어를 보자.

C:\>netsh firewall show ?
다음 명령을 사용할 수 있습니다.

이 컨텍스트에 있는 명령:
show allowedprogram - 방화벽 허용 프로그램 구성을 표시합니다.
show config - 방화벽 구성 정보를 표시합니다.
show currentprofile - 현재 방화벽 프로필을 표시합니다.
show icmpsetting - 방화벽 ICMP 구성을 표시합니다.
show logging - 방화벽 로깅 구성을 표시합니다.
show multicastbroadcastresponse - 방화벽 멀티캐스트/브로드캐스트 응답 구성을 표시합니다.
show notifications - 방화벽 알림 구성을 표시합니다.
show opmode - 방화벽 작동 구성을 표시합니다.
show portopening - 방화벽 포트 구성을 표시합니다.
show service - 방화벽 서비스 구성을 표시합니다.
show state - 현재 방화벽 상태를 표시합니다.

눈여겨 볼 만한 명령어는 위 굵은 글씨체를 참고하라.
그럼 방화벽 정책을 설정하기 위한 Steb-by-Step을 해보자.

■ 현재 열려져 있거나 열려져 있지 않은 포트를 상세히 보려면 아래의 명령어를 사용.

netsh firewall show portopening verbose = enable
netsh firewall show config verbose = enable
netsh firewall show state verbose = enable

netsh firewall show portopening verbose = enable | findstr VNC

특정한 부분이 열렸는지만 볼 때.

물론 verbose = disable 도 있지만, 궂이 상세하게 보지 않겠다는 옵션을 줄 필요는 없다.
이 중에서 한가지 기본 규칙만을 지킨다면 응용은 그렇게 어렵지만은 않다.

실제, netstat 로 확인한 결과 Listening 된 포트가 있다 하더라도, 실제 열려진 포트를 보려면 위의 세 가지 명령어를 통하여 확연히 구분 지을 수 있다. 중복되는 내용들이 많지만 정확한 설정 값 및 포트 오픈 및 현재의 방화벽 상태를 확인하려면, 위의 세 명령어를 사용해도 무방할 것 같다.

아래의 규칙을 기억하자. (순서는 바뀌어도 상관은 없지만 대부분 이런 수순)


Scope 이 생소하겠지만 여기서 Scope은 Subnet , Custom , All 이 있다. 보안상 이 부분 역시 좋은 부분인 것 같다. Netbios 같은 경우 인터넷 외부에서의 연결은 보안상 위험하다. 그래서 이러한 Netbios 포트는 기본적으로 자기 네트워크에 속한 대역(서브넷)만을 액세스 할 수 있게 설정하는 것이 좋다.

때론 Access List 처럼 작용하는 것으로 보일 수 있으나, subnet을 선택할 경우 자신의 속한 네트워크 브로드캐스트 영역을 보므로 자신의 전체 내부 네트워크에서는 이러한 프로그램 및 포트는 접근 가능할 수 있다. 그러므로 Custom 에서의 선택을 하여 일일이 네트워크 및 IP Address 및 네트워크 대역을 지정하는 것이 보안상 좋은 방법일 것이다.


- Subnet : 자신이 속한 네트워크 대역
- Custom : 일일이 접근 IP 또는 접근 네트워크 대역을 지정할 수 있다.
- All : 모든 IP 및 네트워크 주소
본격적으로 방화벽 정책을 설정해 보자. set 은 현설정에 대한 편집이거나 추가이며, add 는 추가만 할 수 있다. 아래 예들은 모두 set 으로 설정했다.

■ 포트 오픈 하기 ≠ 서비스 오픈 ( set portopening 또는 add portopening )
C:\>netsh firewall set portopening TCP 5900 VNC_ServerPort
확인됨.

아래 그림을 보면 생성이 되어져 있음을 볼 수 있다.
또한 findstr 구문을 통하여 현재 설정 상태도 확인을 할 수 있다.

- netsh firewall show portopening | findstr VNC


구체적으로 이러한 포트 오픈은 내가 속한 네트워크 대역 서브넷(subnet)안에서만 허용하고 싶다면 조금 다르게 옵션을 설정을 해 주어야 한다.
C:\>netsh firewall set portopening protocol = TCP port = 5800 name = VNC_HTTP scope = subnet mode = enable
확인됨


C:\>netsh firewall set portopening protocol = TCP port = 23456 name = Ahnlabcoconut_FTP scope = CUSTOM addresses = 192.168.1.3,LocalSubnet
확인됨
이것은 로컬 서브넷에서만 접근 가능하고, 외부 192.168.1.3 에서 이 서비스를 사용할 수 있다라는 뜻이다. GUI 에서는 아래와 같다.


참고
URL :http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/depfwset/wfsp2apb.mspx

■ 서비스 설정하기 ( set service 또는 add service)
서비스 종류는 아래와 같은 종류로 국한하기 때문에 서비스를 생성(포트 오픈)해야 할 필요성은 느끼지 못한다. (터미널 서비스 : TCP 3389 )

위에서 설명했듯이 이 netsh 의 포트 오픈과 서비스 오픈과는 약간의 차이가 있다.아래는 서비스 Open에 관련된 서비스 내용 들이다. 실제 이 서비스들도 설정해야 하고 시스템 등록 정보의 [원격] 탭에서 설정을 해야만 비로서 아래와 같은 서비스들을 정상적으로 사용 할 수가 있다.

FILEANDPRINT 파일 및 프린터 공유
REMOTEADMIN 원격 관리
REMOTEDESKTOP 원격 지원 및 원격 데스크톱
UPNP UPnP 프레임워크
ALL 모든 종류

이 윈도우 XP 방화벽에서의 서비스는 말 그대로 윈도우가 제공해 주는 서비스를 말하고 실제 포트 오픈은 이전에 Bulit-in 된 원격데스크톱 및 원격지원 서비스에 V 체크만 하면 된다.


그림에서 보듯이 원격 데스크탑 및 원격 지원은 Windows 방화벽에서 삭제(D) 버튼을 누를 수 없다. 이는 아래 그림처럼 [내컴퓨터] ▶ [오른쪽 마우스 클릭] ▶ [속성] ▶ [원격] 부분.


이 부분에 속해 있기 때문이다. 왜 이렇게 설정을 했는지는 잘 모르겠지만, 어쨌든 이 원격지원 부분과 원격 데스크톱 부분의 체크박스에 체크를 하지 않으면 아래 그림처럼


자동적으로 체크 박스에 v 체크가 없어지는 것을 볼 수 있다.
하지만 이는 역으로는 성립이 되지 않는다. 즉 이 윈도우 방화벽에서의 원격 데스크톱이나 원격지원을 v 체크를 한다 하더라도, 시스템 등록정보에서의 [원격] 탭에서는 v 체크가 되지 않으면 외부에서 접속을 하지 못하게 된다. 결론적으로 이러한 서비스를 사용하기 위해서는 당연히 RDP 서비스는 띄워져 있어야 하며, 우선적용이 되는 시스템 등록정보에 대한 체크박스에 V 체크가 되어져 있어야 하는 것이다. 이 시스템 등록정보에 V 체크가 되지 않으면 TCP 3389 포트에 대하여 Listening 이 보이지를 않는다.

그런 이유에서 만약 외부에서 RDP 를 사용할 수 없거나, 원격지원을 사용할 수 없을 경우에는 이러한 서비스들이 윈도우 방화벽에서는 열려 있음에도 불구하고 서비스가 안 되면 시스템 등록 정보에서 확인을 하면 될 것이다.

1. Remote Desktop 서비스를 사용하려면
netsh firewall set serv REMOTEDESKTOP enable 또는
netsh firewall set serv type = REMOTEDESKTOP mode = enable scope = all

2. 원격 접속 관리를 사용하기 위해서는
netsh firewall set REMOTEADMIN enable 또는
netsh firewall set serv type = REMOTEADMIN mode = enable scope = all

■ Application Program 오픈 하기 ( set allowedprogram 또는 add allowdprogram )

set allowedprogram program = C:\Temp\AhnSV.exe name = AntiVirus mode =
ENABLE scope = CUSTOM addresses = 192.168.1.1,LocalSubnet


1. netsh로 네트워크 설정하기
이러한 네트워크 설정은 여러 인터넷 검색 엔진 사이트에서 찾아 보며 참고하면 될 것 같다.네트워크 설정은 설명이 필요한 것 보단 이러한 환경이 필요한 곳에서 사용하면 더 할 나위 없이 유용하다. 같이 사용하는 IDC에서의 공유형 노트북(?)에서의 자신만의 고유 정적 IP가 있는 곳, 또는 DHCP로 사용해야만 하는 곳, 네트워크의 일부 GUI로 변경 없이 다음과 같은 명령어 행만으로 네트워크 설정을 쉽게 바꿀 수 있다.

■ 시스템 정보 및 네트워크 정보를 GUI로 결과를 보고 싶다!
netsh diag gui

■ IP 수동 변경 (Static)
netsh -c int ip set address name="AhnlabCoCoNut" source=static addr=192.168.1.2 mask=255.255.255.0 gateway=192.168.1.1 gwmetric=0
■ IP 수동 변경 (로컬)
netsh -c int ip set address localhost static 192.168.1.2 mask 255.255.255.0 1

■ IP 자동 변경 ( DHCP )
netsh -c int ip set address name="AhnlabCoCoNut" source=dhcp

■ DNS 수동 변경(Static)
netsh -c int ip set dns name="AhnlabCoCoNut" source=static addr=168.126.63.2 register=PRIMARY
add dns name="AhnlabCoCoNut" addr=168.126.63.2 index=2


■ DNS 자동 변경 ( DHCP )
netsh -c int ip set dns name="AhnlabCoCoNut" source=dhcp

■ 위와 같이 설정된 현재 네트워크 설정 저장
netsh -c interface dump > AhnlabCoCoNut.txt

■ 위 설정 그대로 사용
netsh exec AhnlabCoCoNut.txt

이러한 DOS Command 모드로써의 중요한 점은 GUI로 된 네트워크 설정의 마우스를 사용하지 못할 때 유용하다고 할 수 있다

[TIP 1]
1. 내 컴퓨터에서 과연 어떠한 트래픽이 들어오고 나가고 Drop이 되는가?
이벤트 뷰어(eventvwr.msc)에서도 보안 설정을 하면 볼 수 있지만 더욱 상세하게 보여주는 것은 이 방화벽 로그일 것이다.
방화벽의 로깅 기능을 사용한다.물론 GUI도 있지만 여기선 netsh 만을 위주로 말하겠다.

■ 현재 로깅 설정 현황 보기

netsh firewall show logging

■ 로깅 설정하기 ( Drop 패킷 및 Connection 패킷 모두)
(손실된 패킷 ,성공한 연결 이 두가지를 로깅한다.)
어떠한 패킷이 손실되는지만 본다면 droppedpackets = enable 옵션만 주면 될 것이다.

netsh firewall set logging droppedpackets = enable connections = enable filelocation = 2nd.txt 4096

■ 현재 로깅 되는 로그 보기

윈도우에서 로깅 되는 로그는 아래와 같다. 엑셀로 편집하여 나온 결과이다.
인바운드인지 아웃바운드 패킷인지의 구분은 없으며 단지 자신의 IP가 외부로 나가면 아웃바운드 자신의 IP가 Dst-IP로 로깅되어져 있으면 인바운드로 구분 할 수 밖에 없다.
(실제 로깅 정보를 볼 때는 구분이 좀 어렵다.) 



- 위에서 본 결과처럼 Action 부분에서 Open, Drop, Close 로 현재의 방화벽에서 패킷이 어떻게 취해지는가에 대한 판단을 할 수 도 있을 것이다. 특히 TCP 의 Flag 를 볼 경우 Syn 을 보냈음에도 ACK가 Drop이 되지 않는지 혹은 ACK 자체를 볼 수 없는지에 대하여 판단 할 때, 내 자체 윈도우 방화벽에서 막혔는지 혹은 그 앞단의 방화벽 및 네트워크 장비에서 막혔는지도 판단을 할 수 있을 것이다.

2. 윈도우 XP에서의 트래픽 흐름을 전혀 볼 수 없고 알 수 없을 때 트러블 슈팅 할 때 가장 먼저 윈도우 자체 내장 방화벽을 Disable 한 상태로 확인을 한다.
netsh firewall set opmode enable [방화벽을 설정할 때]
netsh firewall set opmode disable [방화벽을 설정하지 않을 때]

그룹
명령
설명
Add
netsh firewall add allowedprogram Windows 방화벽에 허용된 프로그램 구성 추가
netsh firewall add portopening Windows 방화벽에 포트 구성 추가
delete
netsh firewall delete allowedprogram Windows 방화벽에서 허용된 프로그램 구성 삭제
netsh firewall delete portopening Windows 방화벽에서 포트 구성 삭제
reset
netsh firewall reset Windows 방화벽 구성을 기본값으로 다시 설정
Set
netsh firewall set allowedprogram Windows 방화벽의 허용된 프로그램 구성 편집
netsh firewall set icmpsettings Windows 방화벽의 ICMP 구성 편집
netsh firewall set logging Windows 방화벽의 로깅 구성 편집
netsh firewall set notifications Windows 방화벽의 알림 구성 편집
netsh firewall set opmode Windows 방화벽의 작동 구성 편집
netsh firewall set portopening Windows 방화벽의 포트 구성 편집
netsh firewall set service Windows 방화벽의 서비스 구성 편집
show
netsh firewall show allowedprogram Windows 방화벽에서 허용된 프로그램 구성 표시
netsh firewall show config Windows 방화벽 구성 표시
netsh firewall show currentprofile Windows 방화벽의 현재 프로필 표시
netsh firewall show icmpsettings Windows 방화벽의 ICMP 구성 표시
netsh firewall show logging Windows 방화벽의 로깅 구성 표시
netsh firewall show notifications Windows 방화벽의 알림 구성 표시
netsh firewall show opmode Windows 방화벽의 작동 구성 표시
netsh firewall show portopening Windows 방화벽의 포트 구성 표시
netsh firewall show service Windows 방화벽의 서비스 구성 표시
netsh firewall show state Windows 방화벽의 현재 상태 표시

[TIP 2]
■ TCP/UDP/ICMP Connection 및 통계 체크
우선 서비스에 Remote Access Service 가 시작되어 있어야 한다.
net start remoteaccess로 서비스를 시작 하자.

그런 후 아래와 같은 명령어로 현재의 연결 상태를 알아보자.

- netsh interface ip show tcpstat : TCP 통계를 표시 ( netstat -s -v -p tcp )
- netsh interface ip show udpstat : UDP 통계를 표시 ( netstat -s -v -p udp )
- netsh interface ip show tcpconn : TCP 연결을 표시 ( netstat -an -p tcp )
- netsh interface ip show udpconn : UDP 연결을 표시 ( netstat -an -p udp )
- netsh interface ip show config : 현재 네트워크 설정 상태 표시
( ipconfig /all 과 같은 결과)
- netsh interface ip show address : ipconfig 결과
- netsh interface ip show interface : 상세한 인터페이스 정보
- netsh interface ip show dns
- netsh interface ip show icmp :ICMP 통계 자료 ( netstat -s -p icmp )

- netsh interface dump : 인터페이스에 대한 현재 방화벽 설정 전체를 보여준다.


한글윈도우 XP Pro (SP2)에서의 netstat 와 netsh 의 차이점이 무엇이냐 하면, 결과를 보면 알겠지만 netstat 는 영문으로 결과를 보여주고 , netsh 는 친절하게도 한글로 보여준다는 것이다.


출처 : 안랩코코넛 시큐레터 2006년 5월호
저자 : ㈜안랩코코넛 SM사업부 시큐리티엔지니어, 송진호주임

728x90

댓글