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

openbsd ÀÇ pf ¸¦ ¸ðµâ·Î ºÐ¸®Çϴµ¥ À־ Áú¹®ÀÌ ÀÖ½À´Ï´Ù.



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

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


> 
> 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)을 
> 참조하세요. 

현재 openbsd 에서 pf 를 module 로 떼어 내 볼려고 합니다만 막히는 부분이 있습니다.
pf2freebsd 모듈 부분을 먼저 얘기 하겠습니다. FreeBSD의 RELENG_5_0
tag 의 kernel source중 ip_input.c 파일을 보면, PFIL_HOOKS 가 
커널 설정 파일에 등록이 되어 있으면, pfil_hook_get 함수를 이용하여 
등록된 리스트를 얻어와 해당 함수가 , 실행하도록 되어 있어서, 
pfil_add_hook 함수를 이용하여 등록하면,  실행 되는 것으로 
판단이 됩니다.  
 그런데 RELENG_4 tag 의 ip_input.c 부분을 보면, PFIL_HOOKS 부분이 
없습니다. 그렇다면, 어떻게 ipfilter 가 모듈로 등록이 되어서 패킷 
필터링을 수행하는지에 대한 의문이 생깁니다. 일단 ip_input.c 파일(releng_4)
을 보면, ipfw 를 테스트 하기 전에  "fr_check" 함수를 호출하여 ipfilter 의
상태  태이블을 검사하는 것으로 판단이 되는 부분이 있습니다. 하지만, 이 부분이
패킷이 들어 왔을 때 꼭 ipfilter를 거치게 하는 부분은 아니라고 판단이 됩니다.
 그래서 ipfilter 의 소스를 보니, ip_fil.c 라는 파일에 pfil_add_hook 함수가 있어 
이를  등록 하여 패킷이 ipfilter를 거치도록 하는 것으로 판단이 됩니다. 
위의 생각이 맞다면, 패킷이 ipfilter 를 거치는게 이해가 됩니다. 

 그런데 여기서 한가지 의문점은 pfil_add_hook 함수를 이용하여, 함수를 등록할 때
이 등록된 함수가 해당 구조체의 리스트들 중 가장 앞에 등록이 되는지 가장 뒤에 
등록이 되는지가 의아합니다.

또 다른 한가지 중요한 의문점은 이들 함수가 openbsd 에서는 보이질 않습니다.
man page 에도 없고, 커널 소스에서 아무리 찾아도 보이질 않는군요. 그렇다면,
현재로선 PFIL_HOOKS 같은 기능이 openbsd 커널에 들어 가기 전에는 pf 를
모듈로 떼어 내는 그런 일은 수행할 수 없다는 얘기인가요? 

아니면, hooking 과 같은 방법 말고 또 다른 방법이 있는건가요?

많은 조언 부탁드립니다.  그럼, 좋은 하루 되세요.

ps)커널 소스를 분석한다는건  정말 많은 지식을 필요로 하는 군요.   

>> 끝으로 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




--
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