아마추어 팀블로그

[NetFilter] netfilter의 패킷 수집 API libnetfilter_queue 설치 방법 본문

리눅스

[NetFilter] netfilter의 패킷 수집 API libnetfilter_queue 설치 방법

탓치 2014. 6. 20. 11:13

libnetfilter_queue는 커널의 nfqueue에 쌓인 패킷을 userspace에서 사용할 수 있도록 netfilter 측에서 제공하는 API입니다. 예전에는 ip_queue가 사용되었으나 이는 deprecate되었습니다.


1. 설치 방법


Netfilter에 접속합니다. Netfilter의 공식 사이트는 다음과 같습니다.

설치해야하는 netfilter의 project는 아래와 같습니다.

libmnl 설치

libnfnetlink 설치

libnetfilter_queue 설치
우선 libnetfilter_queue 프로젝트 페이지(http://www.netfilter.org/projects/libnetfilter_queue/index.html)에 접속합니다. wget 명령어를 통해 현재 작업 디렉토리에 프로젝트를 내려받습니다. 이를 압축해제하고 대상 디렉토리에 들어간 뒤, configuer, make 등의 명령어를 통해 소스를 설치합니다.

[root@localhost ~]$ wget http://netfilter.org/projects/libnetfilter_queue/files/libnetfilter_queue-1.0.2.tar.bz2

[root@localhost ~]$ tar xvfjp libnetfilter_queue-1.0.2.tar.bz2

[root@localhost ~]$ cd libnetfilter_queue-1.0.2/

[root@localhost ~/libnetfilter_queue-1.0.2]$ ./configure ; make ; make install


libnetfilter_log 설치 (선택 사항)


2. 참고


[root@localhost ~]$ cat /proc/sys/net/nf_conntrack_max

[root@localhost ~]$ cat /proc/sys/net/netfilter/nf_conntrack_count

[root@localhost ~]$ cat /proc/net/netfilter/nfnetlink_queue

    0    671     0 2 65535     0     0        0  1

[root@localhost ~]$ cat /proc/net/netfilter/nf_queue

 0 NONE

 1 NONE

 2 NONE

 3 NONE

 4 NONE

 5 NONE

 6 NONE

 7 NONE

 8 NONE

 9 NONE

10 NONE

11 NONE

12 NONE

[root@localhost ~]$ cat /proc/net/netfilter/nf_log

 0 NONE ()

 1 NONE ()

 2 NONE ()

 3 NONE ()

 4 NONE ()

 5 NONE ()

 6 NONE ()

 7 NONE ()

 8 NONE ()

 9 NONE ()

10 NONE ()

11 NONE ()

12 NONE ()

[root@localhost ~]$ lsmod | grep nfnetlink

nfnetlink_queue        17912  1

nfnetlink              13984  2 nfnetlink_queue



nc_conntrack
1. conntrack 테이블 개수 (커널 메모리 상에서 netfilter 가 동시에 처리하는 세션의 수)
/proc/sys/net/nf_conntrack_max
/proc/sys/net/ipv4/netfilter/ip_conntrack_max
0인 경우 무제한
늘릴수록 서버에 무리가 발생하여 다른 문제가 발생할 수 있음
너무 적게 설정할 경우 웹 서비스가 안될 수 있음
이상적인 값: conntrack_max = ram size(byte 단위) / 16384 / (x / 32) (x = 32 bit 시스템인 경우 32, 64 bit인 경우 64)
2. hash size 변경
conntrack 엔트리의 리스트를 저장 할 해쉬 테이블 사이즈
/sys/module/ip_conntrack/parameters/hashsize
2의 배수 일 경우 최대 효율을 나타낸다고 함
기본 값: 8192
이상적인 값: hash size = conntrack_max / 8 = ram size(byte 단위) / 131072 / (x / 32) (x = 32 bit 시스템인 경우 32, 64 bit인 경우 64)
3. 확인
현재 접속 카운트 확인: /proc/sys/net/netfilter/nf_conntrack_count
접속 정보 확인: /proc/net/nf_conntrack
시스템 커널 변수 값: /proc/sys/net/netfilter/*
iptables 체인 별 패킷 및 바이트 정보 확인: iptables -vL



Comments