'firewall'에 해당되는 글 1건
MACOSX waterroof, ipfw 를 이용한 ip, port 필터링 툴 :: 2008/05/02 15:41 by 한종원(18기)
/* 이 문서의 최신 버전은 addnull.tistory.com/325에서 가장 먼저 갱신됩니다. */
/* 이 문서는 maxosx leopard 10.5.2 에서 테스트 된 문서입니다. */
macosx 를 사용하다보면, 간혹 디테일한 설정을 하고 싶은데,
system preferences 에서 기본으로 지원되는 GUI 툴은 간단한 설정만 가능한 경우가 대부분이라 당혹스러울 때가 많다.
그중에 한가지가 security 패널의 firewall 설정인데,
다음과 같이 간단한 설정만 가능하다. (advanced 옵션을 선택한 상태)

물론, 대부분의 일반 사용자에게 그다지 필요없는 부분이라는 생각에 과감하게 디테일한 옵션을 뺀 것이고,
그런 설정을 원한다면, 콘솔을 열어서 설정하면 되지만,
그렇다 하더라도 GUI의 비쥬얼한 화면이 아쉽긴하다.
이런 상황에서 macosx의 system preferences를 보강해주는 여러 서드 파티 툴이 많이 개발되고 있는데,
firewall 같은 경우엔 hanynet에서 무상으로 배포하는 waterroof라는 좋은 툴이 있다.
waterroof는 BSD 시스템 ifpw(IP Firewall)를 기반으로 protocol, ip, port 별로 상세한 필터링이 가능하며, 패킷 통계 및 로깅, NAT, Bandwidth 등의 여러 설정을 할 수 있는 툴이다.
사실, 이 기능들은 기본 지원되는 firewall 로깅 기능과 ipfw 기능들을 한군데 모아서
GUI로 쉽게 설정해주게 해준 정도이지만, ipfw 명령어에 자신이 없는 사람일 경우엔 매우 유용할 것이다.
ipfw의 기능들을 일일히 설명하기엔 방대한 양이므로 여기선 바로 실전에 적용해보는 것으로 대신하고,
(웹서버라 가정하고, tcp 80 포트를 제외한 다른 모든 protocol, ip, port의 접근을 막는 설정)
자세한 기능들은 BSD firewall 페이지를 참고하길 바란다.
waterroof를 다운 받아서 실행 후에, "static rules"를 보자.

static rule은 일시적 적용되는 danamic rule과는 달리 지속적인 적용을 원하는 필터링을 등록할 때 쓰는 것으로
일반적으로 static rule을 주로 쓰게 된다.
static rules 창의 아이콘 이미지가 꽤 난해한데.. (제작자의 취향이..-_-;;)
각 아이콘의 기능은 다음과 같다.
[ + ] button to add a new firewall rule
[ - ] button to delete selected firewall rule
[ ↑ ] buttonto to move up selected rule
[ ↓ ] button to move down selected rule
[ ✍ ] button to edit selected rule
[ ↩ ] button to update rules table
[ ∅ ] to reset packets and bytes counters
[ ✗ ] button to flush current rules, pipes and queues
[ ♡ ] button to restore rules from startup configuration
[ + ] button을 눌러서 새로운 필터 추가 창을 열어보자

우선 rule number는 필터가 적용되는 우선 순위를 말한다. (숫자가 작을 수록 높은 우선 순위)
패킷 통신에 대한 필터링을 할 때, 높은 우선 순위의 필터 순으로에 해당 패킷이 적용되는지 확인한다.
rule number는 1~65535까지의 값을 가질 수 있고, 65535는 기본값으로
모든 protocol, ip, port 의 접근 허용으로 설정되어있다. (allow ip from any to any)
즉, 특정 패킷 통신 1~65534번의 rule에 모두 적용되지 않는다 하더라도
65535번 rule에는 반드시 적용되게 되어있다.
protocol 을 ip, tcp, udp, icmp, igmp 가 있으며, ip는 다른 4가지 protocol를 모두 포함한다는 의미다.
rule action 은 allow, deny, forward, divert, checkstate, pipe, queue 가 있으며, 우선은 allow와 deny만 사용한다.
(사실 나머지 5개는 써본 일이 없다.. '0';;)
source/destination address는 패킷의 헤더의 ip, port 를 비교하기 위한 정보이다.
한가지 특이한 점은 subnet mask를 표기법인데,
C 클래스를 표현한다면, "123.123.123.0/255.255.255.0"로 표현하는게 아니라 "123.123.123.0/24"로 표현한다.
24라는 의미는 subnet mask의 값이 '1'인 비트수를 나타낸 것이다.
즉, "255.255.255.0" -> "11111111.11111111.11111111.00000000"이므로 24로 표현한 것이다.
extra option에서 몇가지 추가 사항이 있긴 하지만, 우선은 크게 신경쓰지 말고,
"Network Interface"는 all, "in/out"으로 한다.
위의 예시 화면은 1000번 rule에 모든 ip 주소의 모든 port 에서 자신(서버)의 80번 port 접근을 허용하는 설정이다.
이런 식으로 추가해서 다음과 같이 설정한다.

하나씩 설명하자면,
1번은 추후 self port scan등의 관리 목적으로 자기(서버)가 자기자신(서버)에 대한 접근하는걸 모두 허용한다.
2번은 외부와 자신(서버) 간에 tcp protocol로 이미 연결된 상황(처음 연결 시도가 아닌 이미 연결 허용이 된 상태)에선 계속 접근을 허용한다. 이것은 서버 관리자가 세팅 변경 중에 실수로 인해 기존의 연결이 갑작스럽게 종료되는 걸 방지하기 위함이다.
1000번은 외부에서 자신(서버)의 tcp port 80 접근을 허용한다.
65534번은 모든 tcp로 접근 시도를 거부한다.
65545번은 기본값으로 모든 접근을 허용한다.
만약 외부에서 처음으로 서버의 tcp port 80 접근을 시도하면 1000번 rule에 의해 연결 시도가 받아들여지고,
연결 이후(established)에는 2번 rule에 의해 접근이 가능하게 된다.
그 외 모든 tcp 접근 경우에는 65534번 rule에 의해 접근이 차단된다.
추가로 각 rule에서 처리한 패킷 수와 바이트 수를 알 수 있으므로 외부에서 서버에 접근하는 경로 통계 추측에도 도움이 된다.
마지막으로 설정이 끝났으면, 설정값 백업 및 서버 재시작 후에도 지속적으로 적용되도록 설정하는 방법이다.
tools 메뉴에서 rule configuration 메뉴를 찾아간다.

설정값 백업은 "export rules to file"을 그리고 서버 재시작 후에도 설정이 계속 적용되도록 하는 설정은
"save to startup configuration"을 실행하면 된다.
Trackback Address :: http://blog.swssm.org/trackback/170
