참고: http://technet.microsoft.com/ko-kr/library/cc778925.aspx
- Netsh AAAA 명령
- DHCP에 대한 netsh 명령
- Netsh 진단(diag) 명령
- 인터페이스 IP에 대한 netsh 명령
- 인터페이스 IPv6의 Netsh 명령
- 인터페이스 Portproxy에 대한 netsh 명령
- 인터넷 프로토콜 보안에 대한 netsh 명령
- 네트워크 브리지용 Netsh 명령
- RAS(원격 액세스)용 Netsh 명령
- 라우팅에 대한 netsh 명령
- RPC의 Netsh 명령
- WINS에 대한 netsh 명령
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사업부 시큐리티엔지니어, 송진호주임
댓글