디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

방화벽 만들기(2)

양희철갤로그로 이동합니다. 2010.06.18 13:24:16
조회 251 추천 0 댓글 4





방화벽만들기 1

저번에 한번 글쓰고 다음꺼임.
이전 글에서 Netfilter이란 놈을 쓰면 패킷을 감시할 수 있다고 했고
이놈은 모듈로 움직이니까 모듈 프로그래밍을 해야 한다고 했음.
이번에는 간단히 넷필터 모듈 하나 만들어볼거임

우선 소오스

#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>

unsigned int main_hook(unsigned int hooknum,
                                                struct sk_buff *skb,
                                                const struct net_device *in,
                                                const struct net_device *out,
                                                int (*okfn)(struct sk_buff*))
{
        return NF_DROP;
}

int init_module()
{
        netfilter_ops.hook = main_hook;
        netfilter_ops.pf = PF_INET;
        netfilter_ops.hooknum = NF_INET_PRE_ROUTING;
        netfilter_ops.priority = 1; 
        nf_register_hook(&netfilter_ops);        //모듈 등록
        printk("<1>----drop module start!!\\n");
        return 0;
}

void cleanup_module()
{
        nf_unregister_hook(&netfilter_ops);        //모듈 해제
        unregister_chrdev(DROP_MAJOR,DROP_NAME);
        printk("<1>-----end!!----\\n");
}


좀 그렇네... 소스 이쁘게 올릴 줄 아는횽 좀 갈켜줘 ㅠㅠ

이정도는 적어줘야 모듈이 올라가서 Netfilter가지고 깔짝깔짝 될 수 있음.
컴파일이랑 실행시키는 방법은 조금 있다가 하고

우선 모듈이 올라가면 init_module이 실행되. 그럼 저기 netfilter_ops라는 구조체에다가 이것저것 초기화 시켜 주는데,
다른건 다 필용벗고 .hook = main_hook 넘기는거 봐봐.
이게 패킷 들어오면 실행시킬 후킹함수가 어떤넘이냐고 지정해 주는거임. main_hook이라는 함수포인터 넘겼는데, 이거 이해 못하면 C공부 다시하고.
나머진 뭐 저정도만 해놓아도 됨.

초기화 다했으면 nf_register_hook()함수로 구조체 넘겨서 등록시켜주면 됨. 
그리고 모듈 뺄때에는 cleanup_module()이 실행되는데, 이떄는 unregister 저렇게 시켜주면 됨.

젤 중요한건 역시 main_hook 함수인데, 함수 이름은 어차피 포인터 넘기는 거니까 상관없고, 모냥만 저렇게 해주면 됨. 스레드나, 시그널 다룰때랑 똑같음. 역시 함수포인터이기 때문.

보면 안에 내용은 return NF_DROP; 뿐인데
이게 NF_ACCEPT랑 NF_DROP랑 NF_FORWARD였나.. 이런게 있음. 세번째껀 포워딩하는거고 젤 잘쓰는건 앞에 두개인데, 
생긴거 마냥 NF_ACCPT하면 패킷 통과시켜주는거고 NF_DROP하면 패킷 떨구는거임. 
주의할건 NF_DROP는 아예 패킷을 없애버리는게 아니고 어딘가에 쌓아둠. 그래서  채팅같은거 할때 이렇게 해 두면 모듈 내려갔을 때 
한꺼번에 채팅 내용 쏟아진다고 하더라고 -_-;;

지금은 간단히 해본다고 저렇게 했음. 결국 저기서 깔짝깔짝 되면 다 됨.

다음은 Makefile
obj-m := firewall1.o
all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Makefile은 설명 안할게.
주의할건 obj-m의 내용이 파일 소스 이름이랑 일치해야 한다는거. 예를 들어 나는 firewall1.c로 했으니까 저기도 firewall1.o로 한거임.

make 하면 firewall1.ko가 생김. (첫번째 그림)

여기서 root 계정으로 insmod firewall1.ko 하면 모듈이 커널에 올라가는거임 lsmod하면 확인 가능(두번째 그림)

일단 아무런 변화도 안느껴 질텐데
인터넷 쓰는거 아무거나 해봐봐. 파폭을 켜 보던지 ping을 때려 보던지

아무것도 안될거야 -_-;; 별거 없음 이게 끝임 

끄는 방법은 rmmod firewall1 하면 됨. 바로 인터넷 될거임.

젤 간단하게 패킷 무조건 drop 시키는거 만들어 봤음. 편집이 좀 구리네 누가 좀 갈켜줘 ㅠㅠ

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 축의금 적게 내면 눈치 줄 것 같은 스타는? 운영자 24/11/11 - -
211274 프갤에서 연애 상담도 가능할까? Gromit갤로그로 이동합니다. 10.10.07 102 0
211273 어떡해횽 봅니다. 더더더갤로그로 이동합니다. 10.10.07 39 0
211272 C++ 언어가 지닌 보안성에 의해 어떠한 것에 이용되죠?? [6] 돌쇠갤로그로 이동합니다. 10.10.07 102 0
211271 프갤에서 연애 상담도 가능할까? [3] 막장갤신학생갤로그로 이동합니다. 10.10.07 98 0
211270 공비횽 봅니다 [10] 어떡해갤로그로 이동합니다. 10.10.07 168 0
211268 자바는 JVM이라는 것이 있고, 포인터 기능이 없다는 것에 의해서 [10] 돌쇠갤로그로 이동합니다. 10.10.07 150 0
211267 음......학자금나오는 게임회사 [1] 하지마데스(121.137) 10.10.07 106 0
211265 프로그래밍 잘 한다는 기준이 뭐라고 생각하냐? [26] testuser11(121.162) 10.10.07 264 0
211262 솔직히 플래쉬 언제 망할지 모르는데.. [2] 하하핳(58.180) 10.10.07 80 0
211261 형들 API 가지고 노는데 math.h에서 쓸만한것좀 알려줘 [1] 뿌잉(116.122) 10.10.07 63 0
211260 나 취업 고민이야 홍홍.(211.200) 10.10.07 56 0
211259 Objective CamL 이라는 언어 배우는사람있음? [1] ㅇㅇ(119.202) 10.10.07 64 0
211257 난 지금부터 플래쉬를 공부하겠다 [5] 116.44(116.44) 10.10.07 88 0
211256 컴퓨터를사랑하는 뉴비입니다 ^^ [4] openpc갤로그로 이동합니다. 10.10.07 87 0
211255 오랫만에 에너지 포션을 빨았더니... [1] 땡칠도사갤로그로 이동합니다. 10.10.07 123 0
211254 절대 하지말아야할것 두가지 [1] 에이스1번갤로그로 이동합니다. 10.10.07 122 0
211253 땡칠도사횽 디씨 복귀 하셨네요 ㅋ [2] 어떡해갤로그로 이동합니다. 10.10.07 103 0
211252 uC/OS-II 커널 소스 어디서 받나요? [1] 묻다(203.227) 10.10.07 93 0
211251 프리웨어중에서 애드웨어 배포하는 사람 수익 좋음? [1] (116.39) 10.10.07 91 0
211250 비베까지 배운 놈은 이제 뭘 배워야 함? [3] (116.39) 10.10.07 98 0
211249 원피스 스포일러 [4] Ordinary Day갤로그로 이동합니다. 10.10.07 90 0
211248 자바 고수님들 질문좀 ㅠㅠ 외계햏자(124.137) 10.10.07 78 0
211247 테트리스 만들때 바닥인식해서 그만떨어지게 하려면 어떻게 해야하나요? [2] ㅋㅋㅋㅋ(210.110) 10.10.07 110 0
211246 WSAGETSELECTEVENT 에서 0을 리턴하는 경우는 어떤경우임? [3] 햏햏했갤로그로 이동합니다. 10.10.07 160 0
211245 왜 자바 찬양글은 안뵈임?? [2] 고슬링(183.101) 10.10.07 116 0
211243 (주) 예수의 사진 [3] Vita500갤로그로 이동합니다. 10.10.07 233 0
211240 씨언어로 도스창에서 음악재생되게 하는 프로그램만들고싶은데 제발가르쳐줴영 [5] 제발갈켜줘용(211.104) 10.10.07 172 0
211239 형들 chdir 명령어 사용해서 이전디렉토리로 갈수있는 방법없나영? [9] ㅇㅇㄹ(210.93) 10.10.07 161 0
211238 시리얼 문제 답변좀 ㅡㅡ;; (학생아님) [5] RuMiNuSS갤로그로 이동합니다. 10.10.07 134 0
211237 거짓같지만 사실인 이야기 [3] Ordinary Day갤로그로 이동합니다. 10.10.07 139 0
211236 형들 asp 구문 질문좀 할게... [1] 천지왕(210.117) 10.10.07 72 0
211235 Beans가 맞음? Bean이 맞음? [1] Ordinary Day갤로그로 이동합니다. 10.10.07 88 0
211231 으엉엉엉엉엉, 내가 참 기가 막히는 일을 당했어 [10] 땡칠도사갤로그로 이동합니다. 10.10.07 239 0
211230 api책 그냥 소설책 읽듯이 읽는게 좋을지요?? [11] 컴돌이(203.246) 10.10.07 149 0
211229 자바 키이벤트리스터 질문좀.... ㅋㅋㅋㅋ(210.110) 10.10.07 81 0
211228 횽들 디스크 인식이 이상하게 되 [1] 살려줘(211.212) 10.10.07 71 0
211227 올레마켓에 안드롤이드 어플을 등록하려고 하는데요 개발문제에 대해서... [6] 춘춘(61.106) 10.10.07 322 0
211225 파이널 이레이저 이거 하드 섹터 완전 파괴해 버리냐? [3] ㄷㅈ(112.223) 10.10.07 710 0
211224 여기서 리눅스 잘하는 형님들 계시나여 [6] 헣읗헣(203.237) 10.10.07 157 0
211222 밥먹고 나니 졸린다. [2] rntjr갤로그로 이동합니다. 10.10.07 123 0
211221 적인걸 [2] 이모군(175.114) 10.10.07 91 0
211219 전에 다니던 회사를 망하게 할 수 있는 방법이 없나? [3] 악행(211.52) 10.10.07 155 0
211218 내안에 타오르는 뜨거운 코딩열정 [4] 개쉛기갤로그로 이동합니다. 10.10.07 184 0
211217 크롬쓰면 왜 goolgle.com에서 읽어온다는 메세지가 밑에 뜨는거임? ㅋㅋㅋㅋ(210.110) 10.10.07 79 0
211216 사자성어 좀 질문할께요. [2] 오메가(61.77) 10.10.07 96 0
211215 어셈블리 프로그래밍에 대해서 연애갤로그로 이동합니다. 10.10.07 104 0
211214 한달을 고심하고 고생하는 문제야 힌트좀 줘 (Serial 속도 문제) [7] RuMiNuSS갤로그로 이동합니다. 10.10.07 162 0
211213 자료구조 링크드리스트 예젠데 과정이 좀이해가안돼 ㅠㅠ [6] (211.217) 10.10.07 186 0
211212 아리가또고자이마스 [1] 발냄새맛캔디갤로그로 이동합니다. 10.10.07 84 0
211211 [1] 1(211.217) 10.10.07 38 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2