Korea FreeBSD Users Group News, Internal, Projects, Home
Software, Support, Documentation

Re: module program ¹× pf2fre ebsd °ü·ÃÁú¹®.



[ ³¯Â¥¼ø »öÀÎ ] [ ´ñ±Û¼ø »öÀÎ ] [ ÃÖ»óÀ§ »öÀÎ]

[ÀÌÀü ±Û] [´ÙÀ½ ±Û] [ÀÌÀü ´ñ±Û] [´ÙÀ½ ´ñ±Û]


On Tue, Apr 15, 2003 at 01:58:00AM +0900, dreamer wrote:
 >> 
 >> 여지껏 단순히 방화벽(ipfw, ipfilter, pf) 들의 사용법에만 주로 관심을 
 >> 
 >> 가지고 있었습니다만, 단순히 사용법 만을 익힌 다는 것은 실제 소스를 들여다 본
 >> 
 >> 사람보다는 해당 프로그램에 대해서 훨씬 얕은 지식을 가지고 있다는 것을 깊이
 >> 
 >> 느끼고 있습니다. 그래서 일단은  다양한 기능이 있다는 pf(openbsd) 관련 소스를 
 >> 
 >> 들여다 보고 있는중 질문이 있어서 이렇게 메일을 보냅니다. 
 >> 
 >> netinet/ip_input.c 파일을 보면, 패킷이 들어 왔을 때, pf_test 함수를 호출해서
 >> 
 >> 통과할것인지 drop 할 것인지를 결정 하는 것으로 분석이 됩니다. 그래서 패킷이 
 >> 
 >> 꼭 pf_test함수를 거치게 되기 때문에 필터링을 수행할 수 있을 것이라 판단됩니다.
 >> 
 >> 허나 이것을 지금 활발히 발전하고 있는 FreeBSD용 모듈을 만드는 그런 일에서는
 >> 
 >> 어떻게 ip_input.c(pf_test함수를 거치도록 되어 있지 않은) 같은 파일에서 패킷이
 >> 
 >>  꼭 pf_test 들의 함수를 거치게 하는지 그게 의아합니다. 즉, 모듈을 올렸을 때 
 >> 
 >> 어떤 방식으로 ip_input.c 들의 파일에서 pf_test함수등을 
 >> 
 >> 거쳐 패킷을 검사하지 않도록 짜여져 있는 곳에서 pf 를 모듈로 로드시 pf_test함수를
 >> 
 >>  거치게 할 수 있는지가 궁금합니다.
 >> 
 >> 여기 저기 찾아 본 결과 hook(?) 이라는 개념과 연관이 있을 것 같습니다만. 
 >> 
 >> hook_establish 등의 man page 를 봐도 이해가 잘 되질 않습니다.
 >> 

FreeBSD의 코드는 ipfw를 참조하도록 하드코딩되어 있습니다. kernel 설정시
"option PFIL_HOOKS"를 추가하면 ip_input()/ip_output()에서 hook된 function 
이 있는지 검사하도록 되어 있습니다. 
hook의 사용법은 제가 포팅한 pf의 소스(http://pf4freebsd.love2party.net/index.html)
나 ipfilter를 보시기 바랍니다. man page에 가장 자세하게 설명되어 있습니다.

 >> 또 하나 pfsync 가 무슨 역할을 하는 모듈인지 이해가 되질 않습니다. 간단히 뭐하는 
 >> 
 >> 놈이라는 설명만 있어도 될 것 같습니다.

OpenBSD를 사용하시면 pfsync(4)를 참조하세요. tcpdump를 이용해서 state 변화를
monitor할 수 있습니다.

 >> 
 >> 또한 , pf 관련 코드를 수정해서 이런 저런 테스트를 해 보고 싶은데, 그럴려면
 >> 
 >> module 형식으로 짜서 테스트를 하는게 여러모로 편리할 거라고 생각합니다. 현재 
 >> 
 >> 활발히 개발되고 있는 pf4freebsd 용 말고, 실제 openbsd 에서 pf 를 모듈로 만든다고
 >> 
 >> 하면, 이게 쉽게 가능할지 경험 많은 여러분들의 조언이 듣고 싶습니다.
 >> 

제 생각으로는 큰 어려움은 없으리라 생각합니다. 이미 동작하는 pf가 있고 이를
module로만 변경하면 되니까요. module은 lkm(4)을 참조하세요.
 >> 끝으로 pf2freebsd 관련 파일을 다운 받아서 README.ko 파일을 보면 pfil(9) 인터페이스
 >> 
 >> 에 대한 언급이 있는데, 이게 무슨 역활을 하는 건지 간단한 답변이 듣고 싶습니다.
 >> 
 >> 

ip_input()/ip_output에서 패킷 처리시 등록된 hook가 있다면 이를 호출하기 위한
겁니다. 가장 큰 장점은 커널소스를 변경하지 않고도 패킷을 처리할 수 있는 새로운
모듈을 삽입/삭제 할 수 있다는 점입니다. 물론 TAILQ reference를 사용하기 때문에
직접 호출하는 방법을 사용하는 ipfw같은 것보다는 overhead가 있습니다.

 >> 쓰다 보니 freebsd메일링 리스트에 openbsd 용 질문이 되어 버린 것 같습니다만,
 >> 
 >> BSD에 관심 있는 분들이라면 두루두루 알고 계실 것 같아 이곳에 질문하는점 양해 
 >> 
 >> 바랍니다. 개발에 있어서는 아직 초보라 어색한 질문이 있지는 않았나 싶습니다.
 >> 
 >> 너그러운 마음으로 이해해 주시고, 많은 분들의 답변 부탁 드립니다.
 >> 
 >> 그럼 좋은 하루들 되십시오.
 >> 
 >> --
 >> Please look and take part in KFUG FAQ: <http://www.kr.freebsd.org/FAQ-kr/>
 >> To Unsubscribe: send mail to majordomo@xxxxxxxxxxxxxx
 >> with "unsubscribe questions" in the BODY of the message

-- 
============================================================
// Korea Telecom Internet Solutions, Inc.
//   FreeBSD/Linux Professional Consulting/Tech. Support
// 
// Pyun YongHyeon
//
// WWW: http://www.kt-is.co.kr/
//
// TEL: +82-2-597-0600
// FAX: +82-2-581-2983
============================================================
--
Please look and take part in KFUG FAQ: <http://www.kr.freebsd.org/FAQ-kr/>
To Unsubscribe: send mail to majordomo@xxxxxxxxxxxxxx
with "unsubscribe questions" in the BODY of the message



[ ³¯Â¥¼ø »öÀÎ ] [ ´ñ±Û¼ø »öÀÎ ] [ ÃÖ»óÀ§ »öÀÎ]

Copyright © 1998-2005 Korea FreeBSD Users Group.
All rights reserved. webmaster at kr.FreeBSD.org
$Date: 2003/04/30 23:01:23 $
Powered by FreeBSD