Project/Firewall2010. 7. 5. 22:42
Netfilter Framework를 이용해서 만든 방화벽이다.

Packet Header들을 분석해서 원하는 정보를 추출 후 정책에 알맞게 Filtering할 수 있게 하였는데,
여기서는 IP와 Port 차단만 구현하였다. 이외 시험적으로 시험해 본것은 UPD에서 Word Filtering이 있다.

Netfilter에서 Packet를 얻어 오면 sk_buff 구조체로 들어온다. 이 구조체 안에 NIC를 통해 들어온 Raw 상태의 Packet 데이터가 들어 있다.

Packet에서 Header의 구조



즉 Packet의 Pointer는 IP Header의 Pointer와 같고, TCP/UDP Header의 Pointer를 얻으려면

 struct tcphdr *tcph = (struct tcphdr*)(char*)iph + sizeof(struct iphdr));

와 같이 IP Header의 크기만큼 Pointer를 이동시켜 주어야 한다. TCP/UDP Header 다음에는 Application Layer에서 생성한 데이터를 가리키는 Pointer가 있다.

이번에 제작한 방화벽의 구조는 다음과 같다.

방화벽 구조 1


방화벽 구조 2


일반적인 방화벽처럼 외부 네트워크로부터 Host를 보호하기 위해 네트워크 중간에 위치하여 동작하며, 방화벽의 Rule를 정하기 위하여 외부 Control PC가 존재한다. 

Control PC는 Control Client를 통해서 Host내부의 Daemon과 정보를 주고 받고, Daemon은 실제 방화벽 모듈과 정보를 주고 받는 구조로 되어 있다.

Client 프로그램

Client 프로그램은 서버에 접속 후 서버에서 현재 Filtering하고 있는 IP와 Port의 목록을 얻어와 표시한다. 관리자는 차단을 원하는 IP와 Port를 추가 할 수있다. 삭제도 필요하지만 추가와 구현방법이 다를 것이 없기에 추가만 구현하였다.

실행 결과는 다음과 같다.

IP 차단 테스트

Port 차단 테스트



첫 번째 그림은 방화벽이 설치된 PC의 IP를 차단하였다. 즉 이 PC로 들어오는 모든 Packet은 차단된다. 테스트로 Ping Test를 하였는데, 차단 전에는 잘 되다가 차단 후에는 막히는 것을 확인 할 수 있다.

두 번째 그림은 HTTP Port인 80번 Port를 차단해 보았다. 웹 브라우저를 통해서 접속 테스트를 해 보니 차단되어 접속이 되지 않음을 확인 할 수 있었다.

이번 방화벽 제작 프로젝트는 제작 자체는 그렇게 어렵지 않았지만 기초 지식을 쌓는 데 많은 어려움이 있었다. Packet Capturing을 하기 위해 Netfilter Framework가 필요하다는 사실을 알기까지도 꽤나 많은 시간이 들었고, Module Compile방법, Device Driver의 이해등도 만만치 않은 작업이였다. 또한 socket buffer를 얻고 난 후에 각각의 Header를 알아내는 법을 알기까지도 꽤 오래 걸렸다. 

그리고 처음 하는 단체 프로젝트인데, 이점에서는 완전히 실패하였다. 도중에 인원들이 지쳐서 나가버리고, 팀 간에 불화도 생겨서 많이 안타까웠다. 결국 마지막에는 둘이서 하다가 마무리는 내가 하였는데, 이끌고 있던 내가 좀 더 잘했으면 더 좋은 결과를 낳았을것을 하는 생각이 자꾸만 남는다.


Posted by 머리
Project/Firewall2010. 5. 16. 21:27
2010년 전반기 동아리 프로젝트로 Linux 기반에서 방화벽 제작을 하고 있다.

Fedora 12(Kernel 2.6) 위에서 제작하고 있고

네트워크 모듈로 올려서 패킷 필터링 하는 방식으로 동작하게 한다.

주요 기능은 패킷 필터링, 해킹 패턴 인식해서 막는 엔진 개발, 웹으로 원격 제어 가능한 UI 지원, 직접 만든 UI 뿐만 아니라 다른 프로그램에서도 사용할 수 있도록 라이브러리 지원 등.

인원은 나, 화경이, 익주, 지영이. 

나랑 화경이는 모듈 제작쪽이고, 익주랑 지영이는 QT로 UI 연동하는 쪽으로 인원 분배.

필요한 지식
네트워크 구조, 커널 이해, 모듈 개발(특히 Network Device Driver), QT, 소프트웨어 설계, 해킹 패턴, 최적화 등.
Posted by 머리
Study- MSC/Computer2007. 12. 19. 02:11
이번에 쿠분투를 설치하는데 성공하고 이것저것 만져 보는 중에 우연히 Wine라는 놈을 건들여 보게 되었다.

전에 어떤 커뮤니티 사이트에서 Wine라는걸 들어보기는 했는데 이게 어떤것인지는 전혀 몰랐었는데, 실수로 눌러서 실행시켜 보니 윈도우 어플을 띄워주는 것 같았다.

신기해서 한번 여러가지로 테스트해 보았다.

1. 알송
사용자 삽입 이미지

제대로 실행 되었고, 음악도 정상적으로 나왔다. 다만 소리가 좀 작게 나왔다. 최대로 음량을 높였는데도 겨우 들을 수 있었다. 그리고 종료시에 오류가 나는 듯 했다.

2. 인터넷 익스플로러.
IE의 경우에는 따로 리눅스용 버전이 있어서 설치를 하였다.
사용자 삽입 이미지
뭐 윈도우에서 쓰는 IE랑 똑같다고 보면 된다. 익숙한 프로그램이라 사용은 편하겠지만 절대 사용안할거다. 왜냐하면 이미지까지는 괜찮은데 플래시가 있는 웹 페이지는 엄청나게 느렸다. 네이버 초기화면 로딩하다가 세월 다 가는줄 알았으니..

3. Mamelon
이번엔 게임을 한번 시도해 보았다. DirectX같은걸 이용할건데 제대로 되려나 싶었는데
사용자 삽입 이미지

Mamelon으로 KOF2002를 실행시킨 모습



놀랍게도 매우 깔끔하게 실행이 되었다. 윈도우에서 실행한것과 다름 없이 제대로 게임 실행이 가능했으며 속도 문제도 없었고, 소리도 말끔하게 났다.

4.Warcraft3
마메론도 동작했으니 Warcraft3는 어떨까하고 실행시켜 보았는데, 흠.. 제대로 실행 되지 않았다. 뭔가 전체화면으로 되긴 되는데 실행이 안되었다. 인터넷으로 검색해보니 가능하다고는 하는데.. 뭐 이놈한텐 별 관심이 없으니.. 나중에 스타나 하게 되면 알아봐야겠다.

이외에도 네이트온도 실행이 가능했었다. Microsoft사의 개발툴도 실행시켜 봤는데 VB,VC둘다 6,2005버전 모두 실행이 되지 않았다.

상당히 흥미로운 프로그램이였다. 한번 더 알아봐서 실행가능한 프로그램들을 확장시켜 나가봐야 겠다.

Posted by 머리
Study- MSC/Computer2007. 10. 26. 19:46
와.. 드디어 우분투를 성공적으로 설치하는데 성공하였다. 일단 스크린샷부터.
사용자 삽입 이미지


  멋지지 않은가? 인터넷도 완벽히 되고 한글도 완벽히 된다. 그리고 무엇보다 가장 좋은 것은 네이트온을 까는데 성공하였다!!


  이로써 노트북으로 게임을 잘 하지 않는 나로써는 윈도우를 사용할 이유가 거의 사라졌다.. 개발용은 이놈이 더 강력하고, 인터넷도 이놈으로 하면 되고 네이트온도 무리없이 되고.. 좋군. 아 참고로 이 글도 우분투에서 파이어폭스를 통해서 남기고 있는 것.

  참 까는데 고생 많이 했다. 한글도 제대로 안되고, 네이트온 깔때도 고생 많이 하고.. 그래도 지금 이렇게 되는 것 보니까 그동안 고생한것이 하나도 아깝지 않다. 또 배운것도 많았다. su랑 sudo가 어떤것인지 잘 몰랐는데 이제는 어렴풋히 잡히는 것 같고, 에러메세지 엄청 확인하고 이것 저것 해보면서 고쳐 나가면서 좀 익힐 수 있었다.

  참 이놈이 신기한건 멀티 데스크톱이라 해야 하나? 한번에 네 개의 화면이 사용 하능하다. 듀얼 모니터가 아니더라도 참 넓게 쓸 수 있다는 말이다. 좋구나.. 글꼴도 꽤 이쁘고..

  음.. X윈도우로 이걸 사용하면 실력이 안늘겠지? 웬만하면 콘솔로 놀아야겠지만, 아무튼 우분투 공부, 기대된다 얼른 개발환경 갖추고 공부해야지!!
Posted by 머리
Study- MSC/Computer2007. 9. 9. 01:40

  유닉스 공부 해보려고 도서관에서 책 빌려서 깔아 보려고 했는데.. 어제는 빌린 레드햇 책 부록 CD가 맛이 가서 CD 부팅이 안되길래 오늘 다시 빌리러 가니까 레드햇 책이 없더라.. 그래서 할수없이 페도라 책 아무거나 빌려서 거기걸로 깔아 보려고 했는데.. 정말.. 마소의 노예라는 말이 확실히 느껴지더라.

  파티션 하나 잡아 보는데 두시간이 걸렸다. 별 짓을 다해봐도 도저히 파티션이 두개 이상은 안잡히는 것이다. 이거 혼자서 끙끙대 본다고 한 두시간 있다가 논리파티션 나누면 간단히 되는걸 알았다. 그런데 문제는 이거 하다가 용량 잘못 계산해서 다시 파티션 나누고 다시 깔았다는거.. 젠장..

  어찌 어찌 설치 하니까 이번엔 무선랜이 안잡히네? 노트북이라 무선으로 인터넷 하는데 좀 치명적이다. 아직 지원 안하는가 보다 하면서(참고로 드라이버 이름은 Intel(R) PRO/Wireless 3945ABG Network Connect이더라) 그냥 콘솔에서 대충 갖고 놀면서 살자 하는 식으로 콘솔로 들어가보니 어랍쇼? 이상하다.. 이상한 에러메세지가 계속 뜨네..메세지를 굳이 C로 표현하자면

while(1)
{
printf("sky2 어쩌고 phy 어쩌고 read\n");
}

  에러 메세지 간단했는데 기억 하기 귀찮아서.. 뭐 아무튼 저런식으로 계속 에러 메세지가 뜬다. 겨우 겨우 X윈도우로 넘어와서 시스템 종료해도 저 메세지는 계속 뜨네.. 종료할 생각도 안하고..

  아 어떡하지.. 그냥 페도라 날릴까.. 레드햇 구해서 해버려? 으휴..

Posted by 머리