Apr 182012
 

예전부터 네트워크 프로그램을 많이 작성을 하면서 pcap 라이브러리를 이용해서 패킷캡쳐를 했었다.

http://luca.ntop.org/Ring.pdf

하지만 우연한 기회에 위의 논문에서 PF_RING이라는 방식으로 패킷을 캡쳐하면 패킷 캡쳐 효율이 보다 좋다는 것을 알게 되었다. 대부분 응용프로그램을 감시하는 프로그램에서는 기존의 방식으로도 충분하겠지만, 100M 이상의 네트워크를 처리하거나, 네트워크에서 모니터링을 목적으로 만든 장비에서는 중요한 항목이 될수 있으므로 관심을 가지게 되었다.
그래서 공개된 소스로 원리를 파악하고 기존의 프로그램을 업데이트의 필요성을 느끼게 되었다.

일단 아래의 사이트에서 PF_RING 커널 모듈을 따라서 설치하면 쉽게 설치를 할수 있다.

http://www.ntop.org/get-started/download/

kernel-devel 패키지가 설치가 되어 있는 경우라면 쉽게 컴파일을 해서 pf_ring.ko 파일 만들기가 되므로, insmod 명령어로 커널에 모듈로 올리면 된다.

[root@localhost PF_RING]# lsmod |grep pf_ring
pf_ring               365711  0

그리고 SVN 서버에서 usermode 프로그램 예제도 같이 들어가 있어서 소스도 확인을 할수 있고, 또한 샘플 프로그램도 확인이 가능하다. 그리고 pf_ring 을 사용하는 tcpdump 프로그램도 들어가 있는 것을 확인할 수 있다.

[root@localhost examples]# ./pcount
Capturing from eth0
=========================
Absolute Stats: [48 pkts rcvd][0 pkts dropped]
Total Pkts=48/Dropped=0.0 %
48 pkts [49.7 pkt/sec] - 2880 bytes [0.02 Mbit/sec]
=========================
=========================
Absolute Stats: [108 pkts rcvd][0 pkts dropped]
Total Pkts=108/Dropped=0.0 %
108 pkts [54.9 pkt/sec] - 6716 bytes [0.03 Mbit/sec]
=========================
Actual Stats: 108 pkts [1000.1 ms][107.98 pkt/sec]
=========================
=========================
Absolute Stats: [158 pkts rcvd][0 pkts dropped]
Total Pkts=158/Dropped=0.0 %
158 pkts [53.3 pkt/sec] - 10032 bytes [0.03 Mbit/sec]
=========================
Actual Stats: 50 pkts [1000.1 ms][50.00 pkt/sec]
=========================

소스를 확인해보면 기존의 라이브러리 대신에 소스에 포함되어 있는 pfring과 pcap 라이브러리를 사용해서 컴파일을 하면 된다.

[root@localhost userland]# ldd examples/pcount
        linux-vdso.so.1 =>  (0x00007fffaf179000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003664800000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003664000000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003663800000)
[root@localhost userland]# ls -al libpcap/libpcap.a
-rw-r--r-- 1 root root 401912 2012-04-18 18:19 libpcap/libpcap.a
[root@localhost userland]# ls -al lib/libpfring.a
-rw-r--r-- 1 root root 172836 2012-04-18 18:18 lib/libpfring.a

[root@localhost userland]# cd examples/
[root@localhost examples]# touch pcount.c
[root@localhost examples]# make
gcc  -O2 -Wall -I../../kernel -I../../kernel/plugins -I../lib -I../libpcap-1.1.1-ring  -D HAVE_ZERO -O2  -c pcount.c -o pcount.o
gcc  -O2 -Wall -I../../kernel -I../../kernel/plugins -I../lib -I../libpcap-1.1.1-ring  -D HAVE_ZERO -O2  pcount.o ../libpcap-1.1.1-ring/libpcap.a   ../lib/libpfring.a  -lpthread  -L../libpcap -lpcap   -o pcount
Apr 182012
 

Redhat의 RHEL4가 생산이 중단이 되었습니다. 즉 더이상 커널 패치 및 어플 패치를 제공하지 않는다는 것입니다.

https://access.redhat.com/support/policy/updates/errata/

같은 RPM을 사용하고 있는 CentOS4의 경우에는 같은 운명을 가지고 있습니다.
아래의 사이트에서 보면 http://vault.centos.org/4.9/ 에서 마지막 패키지를 제공하고 있습니다.

http://lists.centos.org/pipermail/centos-announce/2012-February/018462.html

하지만 아직도 여전히 많은 시스템들이 CentOS 4 기반으로 운영이 되고 있기 때문에 2012년 2월까지 만들어진 패키지를 이용해서 추가 설치를 할수 있어야 합니다. 하지만 기존의 설정을 그대로인 상태에서 패키지 관리자인 yum을 사용하게 되면 아래와 같은 에러로 사용을 할수가 없는 상황입니다.

[root@localhost ~]# yum list
Setting up repositories
not using ftp, http[s], or file for repos, skipping - 4 is not a valid release or hasnt been released yet
Cannot find a valid baseurl for repo: update
Error: Cannot find a valid baseurl for repo: update
[root@localhost ~]#

이런 경우에는 아래와 같이 /etc/yum.repos.d/CentOS-Base.repo 파일을 수정해서 사용하면 됩니다.
(참고: https://www.centos.org/modules/newbb/viewtopic.php?topic_id=36528&forum=27)

[localhost(root):/etc/yum.repos.d]# diff -Nu CentOS-Base.repo.120418 CentOS-Base.repo
--- CentOS-Base.repo.120418     2012-04-18 10:47:11.000000000 +0900
+++ CentOS-Base.repo    2012-04-18 10:50:12.000000000 +0900
@@ -13,8 +13,9 @@
 
 [base]
 name=CentOS-$releasever - Base
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
 #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
 priority=1
@@ -23,8 +24,9 @@
 #released updates
 [update]
 name=CentOS-$releasever - Updates
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
 #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
 priority=1
@@ -33,8 +35,9 @@
 #packages used/produced in the build but not released
 [addons]
 name=CentOS-$releasever - Addons
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
 #baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
 priority=1
@@ -43,8 +46,9 @@
 #additional packages that may be useful
 [extras]
 name=CentOS-$releasever - Extras
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
 #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
 priority=1
@@ -53,8 +57,9 @@
 #additional packages that extend functionality of existing packages
 [centosplus]
 name=CentOS-$releasever - Plus
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
 #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 enabled=0
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
@@ -64,8 +69,9 @@
 #contrib - packages by Centos Users
 [contrib]
 name=CentOS-$releasever - Contrib
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
 #baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
+baseurl=http://vault.centos.org/4.9/os/$basearch
 gpgcheck=1
 enabled=0
 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
[localhost(root):/etc/yum.repos.d]#

저는 이렇게 해서 기존의 CentOS에서 jar 파일을 생성하기 위해서 java-1.4.2-gcj-compat-devel-1.4.2.0-27jpp 패키지를 yum으로 설치하여 jar 프로그램을 사용할 수 있었습니다.

Plugin from the creators of Brindes :: More at Plulz Wordpress Plugins