|
News,
Internal,
Projects,
Home Software, Support, Documentation |
pf code를 살펴보지 않은 상태에서 보편적인 방법에 대해서 말씀드립니다. ----- Original Message ----- From: "dreamer" <dreamer@xxxxxxxxxxxx> To: <questions@xxxxxxxxxxxxxx> Sent: Tuesday, April 15, 2003 1:58 AM Subject: module program 및 pf2freebsd 관련질문. > > 여지껏 단순히 방화벽(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 를 봐도 이해가 잘 되질 않습니다. > 모듈을 수용한다는 의미는 kernel 자체가 모듈을 반영토록 구현되어 있어야 가능합니다. 따라서 일단 FreeBSD는 모듈 프로그래밍이 가능하니 조건은 됐다고 봅니다. 하지만 모든 기능들이 모듈 프로그래밍이 가능한것은 아닙니다. Linux나 FreeBSD의 경우 network device를 별도의 장치로(블록, 문자, 네트워크 디바이스) 구분합니다. 자세한한 것은 OS의 kernel device/module 관련 문서를 참고하는것이 좋겠지요. 일반적으로 패킷이 들어오면(IN) ethernet -> ip -> tcp -> App 순으로 처리됩니다. (물론 간략히 말해서..) 모듈 수용 이전에는 이 기능들이 직접 해당 function call 하도록 hard coding 되어 있습니다. 모듈 프로그래밍에서는 function name을 직접 call하도록 하는게 아니라 function pointer(*func) 를 사용합니다. 즉 외부(App) 에서 func 값을 바꿀수 있도록 되어 있습니다. 이정도 되면 return(func) 등으로 이동하고자 하는 위치로 패킷 처리를 옮기는것은 어렵지 않습니다. 이 방법 외에도 다른 방법이 존재합니다. FreeBSD의 경우(확인은 안됨) 커널내 패킷 필터 code에서 특정 룰에 맞는 패킷은 다른 device나 App로 전달가능토록 만들수 있습니다. natd가 이렇게 동작하는걸로 알고 있습니다. > 또 하나 pfsync 가 무슨 역할을 하는 모듈인지 이해가 되질 않습니다. 간단히 뭐하는 > > 놈이라는 설명만 있어도 될 것 같습니다. > > 또한 , pf 관련 코드를 수정해서 이런 저런 테스트를 해 보고 싶은데, 그럴려면 > > module 형식으로 짜서 테스트를 하는게 여러모로 편리할 거라고 생각합니다. 현재 > > 활발히 개발되고 있는 pf4freebsd 용 말고, 실제 openbsd 에서 pf 를 모듈로 만든다고 > > 하면, 이게 쉽게 가능할지 경험 많은 여러분들의 조언이 듣고 싶습니다. > 모듈 프로그래밍은 각 os별로 상이한 점이 많습니다. 원리는 비슷하겠지만 모듈 구조체, 초기화 function 들.. 그밖에 반드시 해줘야 하는 사항들.. openbsd 모듈 관련 문서를 참고하시는게 가장 확실합니다. 아님 비슷한 모듈의 source 를 참고하시는 것도 좋습니다. 쉽다... 쉽지 않다는 개인차가 많겠지요. 다만 응용프로그램 만드는 것보단 훨씬 어렵 습니다. 잘못하면 시스템 panic 나는 것도 자주 보실수 있습니다.(^-^) > 끝으로 pf2freebsd 관련 파일을 다운 받아서 README.ko 파일을 보면 pfil(9) 인터페이스 > > 에 대한 언급이 있는데, 이게 무슨 역활을 하는 건지 간단한 답변이 듣고 싶습니다. > > > 쓰다 보니 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 > -- 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 $ |
|