netfilter에서 후킹한 패킷에 대한 조작 내용입니다.
netfilter에서 NF_IP_LOCAL_IN과 NF_IP_LOCAL_OUT에서 후킹을 해서
모든 TCP 패킷에 대해서 변경을 해서 전송을 하고 있습니다.
그런데.. 코드를 작성하다 보니.. 프레그먼트에 대해서 문제가 있는 것 같아서..
도움을 요청하고자 합니다.
지금 하고 있는 것은 NF_IP_LOCAL_OUT에서 후킹한 패킷에 대해서 ip
tunneling과 비슷한 방법으로 ip header를 새로 작성해서 만들고 기존의 ip
header와 새로운 ip header사이에 데이터를 넣어서 보내려고 하는데요..
데이터의 크기가 약 4Kb 정도가 됩니다... 모든 패킷에 대해서 이렇게 보내는
것은 아니고 TCP connection에서 접속시에 데이터를 보내고 그 이후에는
적은 데이터를 보내려고 하는데요..
한 1024b 정도까지는 문제가 없이 잘 되는데..
2048b 정도가 되면.. 문제가 발생을 합니다... 이 역시 skb의 dst_entry를
변경해서 강제로 ip_fragment코드를 실행하도록 플래그를 바꿔줘서
전송이 되긴 합니다..
문제는.. telnet이나 ssh등의 프로토콜은 아무 이상이 없이 잘 됩니다..
(물론 속도가 좀 떨어지긴 합니다만..) 그런데.. ftp를 실행시키니까..
파일을 전송하는 중간에.. 서버와 클라이언트에서 버퍼 오버플로우가
많이 발생을 합니다...(급기야는 클라이언트에서 kernel panic까지..)
혹시 이런 문제에 대해서 해결할 수 있는 방법이나 관련된 자료를 알고
계신분이 계신다면.. 도움을 부탁드립니다..
읽어주셔서 감사합니다..
댓글 달기