Study- MSC/Computer2010. 7. 17. 02:12
Operating System Concepts. Chapter 8 - Memory Management
Posted by 머리
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 머리
Study - Programming/C/C++2010. 6. 29. 17:41


우와..만들었다!!
Posted by 머리
Study- MSC/Computer2010. 6. 21. 19:43
Operating System Concepts - Chapter3. Process Concepts
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 머리
나의 이야기/Diary2010. 1. 8. 10:33
2010.01.08 (금) 맑음

올해 년도를 입력하는데 나도 모르게 2009를 입력고, 다시 2010으로 고친다.
2010년이구나.. 불과 2년전만 해도 안올것만 같은 해가 왔다.

2010년은 나에게 참 특별한 해가 될 것 같다.
이미 지난 일이라 말할수 있는 것이지만, 영원할것 같던 2008~2009년 군생활을 마치고 시작하는 첫 해이니까. 잃은 것도 많지만 또 얻은 것도 많은 2년이였다. 다양한 것들을 보고 듣고 느끼고 오고 나니 '잘 갔다 왔다'는 생각도 나혼자 몰래 하고, 피식 웃는다.

좀 더 달라진 나로서 처음 맞는 한 해인데, 아쉽게도 무언가 구체적인 목표 하나 정해 놓지 않았다. 아니 목표를 세워야지 하는 생각도 안했었다. 1월 4일에 교수님께서 '2010년도 3일이 지났습니다. 작심 삼일이라는데, 다시 한번 더 다짐한 목표를 마음잡아 보세요.' 라고 하시고 나서야 '아! 새해에는 보통 목표를 세우지..' 란 생각을 하였다.

조금 늦었지만, 뭐 어때? 천천히 한번 생각해보자.
Posted by 머리
나의 이야기/Note2009. 8. 1. 18:07
내가 인터넷에 적은 글이다.

현실을 생각해보자. 뭘 해야 하나?
Posted by 머리
나의 이야기/Note2009. 8. 1. 09:34
  얼마 전에 외할머니께서 돌아가셔서 외가에 갔었다. 그곳에서 겪었던 일이다.
  우리 외가에는 나랑 동갑인 외사촌이 두 명 있는데, 문제는 이 세명 다 별로 친하지는 않았다. 서울 사는 남자 사촌 한명은 안본지 10년이 넘어가고 여자 사촌 한명은 명절 때마다 보지만 서로 그냥 머쓱하게 지내고 그랬었는데, 이번에는 웬일인지 서로 말도 하고 나중에는 술도 같이 마셨다.
  덕분에 많이 친해지고 갔었는데, 묘하게 기분이 좋았다. 기분이 이상해서 뭐지? 하면서 생각해 봤었다. 
  나는 우리 부대에 내 동기가 없다. 처음에는 동기가 없어서 편하다고 생각했다. 그리고 지금도 그렇다. 나는 무슨 일이든 무엇을 할때 내가 모든것이 내 눈에 들어와서 내 스타일대로 행동하는 것을 좋아하는 편이라 다른 사람들과 일하면 일이 잘 안되곤 한다. 군에서는 선임이랑 하면 선임이 시키는대로 하면 되겠고 후임이면 내가 다 알아서 하면 되겠지만 동기랑 하면 같은 입장이라 괜히 불편해지고 또 '네 동기는 이런데 넌 왜이러냐' 이런 소리같은것도 듣기 싫어서 차라리 없는게 낫다고 생각했다.
  그렇게 군생활 1년 반정도 하다 보니 조금씩 외롭다라는 생각이 들었었다. 윗사람은 윗사람대로 아랫사람은 아랫사람대로 마음 놓고 말해도 어딘가 숨기고 절제해야 하는 구석이 있다. 처음에는 이게 별거 아닌 줄 알았다. 그런데 그게 오래가니까 생각보다 크더라. 좋은 일이 있거나 슬픈 일이 있거나 같이 나눌수가 없더라.
  그런 와중에 나랑 같은 나이의 사촌과 만나서 많은 이야기를 했었다. 덕분에 많이 친해졌었고. 상쾌해졌다고 할까? 위아래 상관 하지 않고 그렇게 이야기를 정말 오랫만에 했다. 그렇게 술 한잔 같이 하면서 즐겁게 이야기를 한게 얼마만인지..  마음놓고 말할수 있다는게 얼마나 좋은 것인가라는 것을 새삼 느끼게 하는 일이였다.
Posted by 머리
나의 이야기/Note2009. 7. 12. 19:41
웬만해서는 군대 생활 글을 블로그에 쓰지 말자고 생각했는데, 정말 열받는 일이 있어서 이렇게 쓴다.

우선 다음 글은 내가 학과 담벼락에 쓴 글이다
정말 화가 나서 적었었다. 뻔히 군복무 하느라 고생하는 사람 앞에서 군바리니, 아저씨라니 이딴 나라  싫다느니 그런 말을 대놓고 하는 정신머리 없는 사람이 내 주위에 있다는걸 알았을때 정말 순간 군생활에 대한 회의가 느껴졌었다. 정말 어이 없다. 그것도 나이 스물 하나, 둘 먹은 사람들이. 아직 어리다고 생각해야 하나? 참.. 짜증난다.
Posted by 머리
Study - Programming/C/C++2009. 6. 23. 19:50
In a graphical Microsoft Windows-based application, a window is a rectangluar area of the screen where the application displays output and receives input from the user.
- Microsoft Windows 기반의 그래픽 application에서 'window'는 결과물을 표시하고 사용자로부터 입력을 받는 스크린의 사각 영역이다.
Therefore, one of ther first tasks of a graphical Windows-based application is to create a window.
- 그러므로 Windows기반의 그래픽 application의 첫번째 작업은 'window'를 생성하는 것이다.

A window shares ther screen with other windows, including those from other applications. Only one window at a time can receive input from ther user.
- 다른 application들을 포함해서, 'window'는 다른 'window'와 스크린의 영역들을 공유한다. 사용자로부터의 입력은 오리지 하나의 'window'만 받을 수 있다.
The user can use the mouse, keyboard, or other input device to interact with this window and the application that owns it.
- 이 'window'와 그것을 소유한 application과 사용자는 마우스,키보드 등의 장치들로 상호 작용할 수 있다.

About Windows

This topic describes the programming elements that applications use to create and use windows; manage relationships between windows; and size, move, and display windows.
- 이 주제는 응용프로그램이 'window'들을 생성,사용, 다른 'window'들과의 관계 관리, 'window'들의 크기조정, 이동, 표시를 위한 프로그래밍 요소들을 기술한다.

Desktop Window

When you start the system, It automatically creates the desktop window. The desktop window is a system-defined window that paints  the background of the screen and serves as the base for all windows displayed by all applications.
- 당신이 시스템을 시작할 때, 시스템은 자동적으로 'desktop window'를 생성한다. 'desktop window'는 화면에 배경 화면을 그리고 모든 application들이 표시하는 'window'들의 기반을 제공해 준다.

The desktop window uses a bitmap to paint the background of the screen. The pattern created by the bitmap is called the desktop wallpaper.
- 'desktop window'는 바탕 화면을 그리기 위해 비트맵을 이용한다. 비트맵이 만드는 패턴을 'desktop wallpaper'이라고 한다.

-계속-
Posted by 머리