Windows2012. 4. 13. 11:16

출처 : http://www.snoopybox.co.kr/1627

 

방화벽에서 특정 포트를 오픈해야 하는 경우 물론 firewall.cpl 이나 wf.msc 등의 GUI 환경에서 설정할 수도 있지만, 대량으로 처리해야 하는 경우라면 커맨드로 작업하는게 훨씬 편리합니다.

간단히 예제를 보여드리겠습니다.

TCP 7777 포트를 오픈하고 싶다면

윈도우 2008 이상

netsh advfirewall firewall add rule name="test" dir=in action=allow protocol=tcp localport=7777


윈도우 2003

netsh firewall add portopening tcp 7777 "test"


위 예제는 가장 일반적인 TCP 포트 인바운트 허용 규칙을 추가하는 것이었고, 좀 더 상세한 작업을 원하신다면 도움말 참고해서 작업하시면 되겠습니다.

윈도우 2008 이상에서는 아래 명령어를 입력해보세요.

netsh advfirewall firewall add rule

아래는 도움말에 나오는 예제입니다.

messenger.exe에 대해 캡슐화 보안이 적용되지 않은 인바운드 규칙을 추가합니다.
netsh advfirewall firewall add rule name="allow messenger"
dir=in program="c:\programfiles\messenger\msmsgs.exe"
security=authnoencap action=allow
포트 80에 대한 아웃바운드 규칙을 추가합니다.
netsh advfirewall firewall add rule name="allow80"
protocol=TCP dir=out localport=80 action=block
TCP 포트 80 트래픽에 대해 보안 및 암호화를 요구하는
인바운드 규칙을 추가합니다.
netsh advfirewall firewall add rule
name="Require Encryption for Inbound TCP/80"
protocol=TCP dir=in localport=80 security=authdynenc
action=allow
messenger.exe에 대해 인바운드 규칙을 추가하고 보안을 요청합니다.
netsh advfirewall firewall add rule name="allow messenger"
dir=in program="c:\program files\messenger\msmsgs.exe"
security=authenticate action= allow
SDDL 문자열로 식별된 그룹 acmedomain\nscanners에 대해
인증된 방화벽 통과 규칙을 추가합니다.
netsh advfirewall firewall add rule name="allow scanners"
dir=in rmtcomputergrp=<SDDL 문자열> action=bypass
security=authenticate
UDP 연결에 사용되는 로컬 포트 5000-5010에 대해 아웃바운드 허용 규칙을 추가합니다.
Add rule name="Allow port range" dir=out protocol=udp localport=5000-5010 action=allow


윈도우 2003 에서는 아래 명령어를 입력해보세요.

netsh firewall add portopening

아래는 도움말에 나오는 예제입니다.

add portopening TCP 80 MyWebPort
add portopening UDP 500 IKE ENABLE ALL
add portopening ALL 53 DNS ENABLE CUSTOM
157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet
add portopening protocol = TCP port = 80 name = MyWebPort
add portopening protocol = UDP port = 500 name = IKE mode = ENABLE scope = ALL
add portopening protocol = ALL port = 53 name = DNS mode = ENABLE
scope = CUSTOM addresses =
157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet


어차피 모든 명령어의 사용법을 외울 수는 없습니다. 그리고 외울 필요도 없습니다. 그냥 윈도우에 이런 명령어가 있다는 사실만 알아두시면 되겠습니다. 나중에 필요할 때가 찾아오면 그 때 다시 검색해서 사용하면 되니까요.

※ 동우님 질문에 답변

2008 기준으로 예제 보여드리겠습니다.

O 2000-3000 포트 차단하는 방법
netsh advfirewall firewall add rule name="동우" dir=in action=block protocol=tcp localport=2000-3000

O 적용된 규칙 보기
netsh advfirewall firewall show rule name="동우"

O 삭제하는 방법
netsh advfirewall firewall delete rule name="동우"

적용된 규칙 보기나 삭제하는 방법에 name=all 값을 주면 모든 규칙을 불러오거나 삭제합니다. 자세한 사용법을 확인하려면 아래 명령어를 각각 입력해보세요.

netsh advfirewall firewall add rule
netsh advfirewall firewall delete rule
netsh advfirewall firewall show rule
netsh advfirewall firewall set rule

Posted by 배움나눔
Windows2012. 4. 13. 11:09

출처 : http://www.snoopybox.co.kr/1629

 

Active 모드 - 클라이언트가 서버에 접속하면서 DataChannel로 사용할 포트를 서버에 알려주면, 서버가 클라이언트의 해당 포트로 접속하는 방식

Passive 모드 - 클라이언트가 서버에 접속하면, 서버가 DataChannel로 사용할 포트를 클라이언트에 알려주고, 클라이언트는 다시 서버의 해당 포트로 접속하는 방식

설명이 허접해서 이해가 잘 안 되실 수도 있는데, 어쨌든 Active 모드는 서버가 클라이언트로 접속하는 조금 어색한 구조로 되어 있어서 여러가지 문제가 많으므로(특히 방화벽), 일반적으로 Passive 모드를 많이들 사용하실 것입니다.

그런데 이 Passive 모드에도 문제가 있습니다. 바로 NAT 환경일 때 문제가 발생합니다.(Active도 마찬가지) 그러니까 서버가 내부에서 사용하는 사설 IP와 실제로 외부에서 접속하는 공인 IP가 따로 존재하는 경우 문제가 발생합니다. 예를 들어 공유기를 사용하는 환경이라면 그렇고, 회사에서도(특히 클라우드 환경이라면) 비슷한 상황이 많이 발생할 것입니다.

무슨 말인지 잘 이해가 안 되실 수도 있으니, 실제 제 환경을 가지고 설명드리겠습니다.

회사에서 집에 있는 파일 서버로 FTP Passive 모드 접속을 시도한 경우

1. 회사 노트북에서 윈도우 탐색기 주소창에 ftp://175.197.xxx.xxx 를 입력했다.
2. 그랬더니 집에 있는 파일 서버가 반응을 하고 계정 정보를 묻는 창을 띄웠다.
3. 계정 정보를 입력했다.
4. 집에 있는 파일 서버가 192.168.0.3 IP의 55246 포트로 접속하라는 정보를 보냈다.
5. 하지만 회사 노트북은 192.168.0.3 IP의 55246 포트로 접속할 수 없다. 그래서 아무것도 안 보인다.

문제의 원인이 어디에 있는지 아시겠죠? 문제는 두가지입니다.

첫째는 집에 있는 파일 서버가 192.168.0.3 이라는 사설 IP를 알려줬다는 점이고
둘째는 55246 포트로 접속하라고 알려줬다는 점입니다.

첫번째 문제는 파일 서버가 회사 노트북한테 공인 IP를 알려주도록 설정해주면 해결될 것이고
두번째 문제는 공유기에서 55246 포트를 파일 서버로 포트포워딩 해주면 해결될 것입니다.

그런데 55246 포트는 1024 - 65535 사이에서 랜덤하게 생성된 포트입니다. 그러니까 Passive 모드로 접속시 서버는 DataChannel로 사용할 포트를 랜덤하게 정해서 알려줍니다. 따라서 공유기에서 파일 서버에 DMZ 설정을 걸어주든지, 아니면 Passive 모드에서 사용할 DataChannel의 특정 포트 범위를 한정해주고, 해당 범위를 공유기에서 포트포워딩 해주시면 되겠습니다.

이제 실전에 들어가겠습니다.

IIS에서 FTP 방화벽 지원 설정으로 들어가보시면


데이터 채널 포트 범위와 방화벽의 외부 IP 주소 설정하는 부분이 있습니다. 데이터 채널 포트 범위는 기본값 0-0으로 그냥 두신다면 1024 - 65535 범위를 사용하게 되므로, 공유기에서 DMZ 설정을 하시거나 또는 1024 - 65535 포트를 전부 포트포워딩 시켜줘야 합니다. 보안상 별로 안 좋으니 특정 범위를 지정해봅시다. 저는 예로 나온 5000-6000 범위를 지정하겠습니다.

그리고 방화벽의 외부 IP 주소 부분에 공인 IP 주소를 넣어주세요. 가장 중요한 부분이라 할 수 있습니다. Passive 모드에서 사설 IP를 알려주면 클라이언트가 접속을 못 하니까요.

값을 넣으셨다면 오른쪽에 있는 적용 버튼 눌러주시면 되구요.


그런데 이놈의 FTP 방화벽 지원 설정이 좀 거시기합니다. 방화벽의 외부 IP 주소 부분은 바로 적용이 되는데, 데이터 채널 포트 범위는 바로 적용되지 않습니다. FTP 서비스를 한번 재시작 해줘야 적용이 됩니다.

services.msc 들어가서 Microsoft FTP Service를 재시작 한번 해주시거나 아니면 관리자 권한으로 커맨드 창을 띄워서 아래 명령어로 서비스를 재기동 해주시면 되겠습니다.

net stop ftpsvc
net start ftpsvc



다음은 공유기의 포트포워딩 설정 부분인데 이 부분은 각자 사용하는 기종이 다르니 제가 설명하기 좀 그렇겠죠? 아무튼 저는 파일 서버에 5000-6000 포트를 포워딩 시켜주겠습니다. (21번 포트는 당연히 포워딩 해주셨겠죠 ^^;;)


마지막으로 윈도우 방화벽 부분을 생각해볼 필요가 있는데, 그냥 FTP 자체를 예외처리 해주시면 됩니다.


명령어로 하시려면 아래와 같이 하시면 됩니다.

netsh advfirewall firewall add rule name="FTP" service=ftpsvc action=allow protocol=TCP dir=in



이상입니다. 다시 과정을 정리하자면

1. IIS에서 FTP 방화벽 지원 설정
2. FTP 서비스 재기동하기
3. 공유기에서 포트포워딩 설정
4. 윈도우 방화벽 예외 처리

이렇게 작업해주시면 FTP Passive 모드 문제는 해결될 것입니다.

Posted by 배움나눔