'프로젝트'에 해당되는 글 4건

  1. 2010.09.18 프로젝트 관리 - 채흥석 교수님께 보냈던 이메일 10
  2. 2010.07.05 Linux 방화벽 제작 완성 4
  3. 2010.05.16 Linux 기반의 방화벽
  4. 2008.01.17 File Backup 1
Study- MSC/Computer2010. 9. 18. 00:08

최근 프로젝트 관리에 대한 지식의 필요성을 많이 느꼈다.
그래서 어떻게 공부해야 할까 조언을 구하려고 채흥석 교수님께 메일을 보냈다.


그리고 그 답변



오타도 있는데, 수정하지 않았다.
잘 모르겠지만 뭔가 방향을 잡을 수 있을것 같다. 오늘 단번에 리팩토링 관련 책을 빌려서 읽고 있다. 

대단한건 새벽 두시 반에 보냈는데, 답변이 온 시각이 세시 반 조금 안되어서였다. 그때까지 작업하고 계신건가..

아무튼 제대로 공부해 보자. 
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 머리
Project/Firewall2010. 5. 16. 21:27
2010년 전반기 동아리 프로젝트로 Linux 기반에서 방화벽 제작을 하고 있다.

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

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

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

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

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

필요한 지식
네트워크 구조, 커널 이해, 모듈 개발(특히 Network Device Driver), QT, 소프트웨어 설계, 해킹 패턴, 최적화 등.
Posted by 머리
Project/FileBackup2008. 1. 17. 00:29

File Backup 프로그램

개발자 : 양희철
개발 기간 : 2007.12.17~2007.12.28
개발 환경
- 개발 운영체제 : Windows XP Pro
- 개발 IDE : Visual Studio 2005
- 사용 언어 : C#(.NET Framework 3.0)

  예전에 작은아버지께서 한번 있었으면 좋겠다고 말씀하셨었는데, 처음엔 안하려다가 시험 기간 끝나고 방학 시작하면서 뭘 할까 하다가 급하게 공부하면서 만들어 보았다.

  기능은 간단하다. 한 개 또는 복수 개의 파일을 다른 드라이브로 그 경로까지 똑같이 복사해주는 프로그램이다.
  예를 들면 C:\My Doc\abc.txt 파일을 D:\에다가 복사하고 싶으면 D:\My Doc\에 abc.txt라는 파일이 똑같이 복사된다.

 

사용자 삽입 이미지

메인 화면


메인 화면이다. 기본적으로 탐색기와 비슷한 형태를 가지고 있다. 위의 창에서 폴더 혹은 파일을 선택한 후 오른쪽 버튼을 눌러 나온 팝업 메뉴에서 백업을 누르면 백업 화면이 나온다.

사용자 삽입 이미지

  메인 화면에서 폴더 몇 개를 선택하였고, 백업할 드라이브로 F드라이브를 선택하였다. 참고로 반드시 드라이브일 필요는 없다. 폴더도 루트로 가능하다.

사용자 삽입 이미지

  특정한 파일만을 검색해서 백업하는 것도 가능하다.
 
  폼의 UI는 책을 보고 따라한 것이 대부분이다. 가장 중요한 핵심은 FileSystem 클래스인데, 이 클래스가 파일의 검색 및 백업을 가능하게 해 준다.
사용자 삽입 이미지
CopyAll() : 한 폴더의 내용을 카피한다.
FileCopy() : 파일을 카피한다.
FindFIle() : 지정한 경로에서의 파일을 검색한다.
MakeDir() : 디렉토리를 하위 디렉토리까지 만든다.

  다음은 FileSystem 클래스의 소스이다.


invalid-file

프로젝트의 소스

Posted by 머리