64bit O/S환경 GEOIP 모듈 적재

### 64bit O/S환경 GEOIP 모듈 적재

환경 : CentOS 5.3  64Bit

1. 먼저 YUM으로 커널을 업데이트 한다

[root@ns ~]# yum update kernel
[root@ns ~]# yum update kernel-devel

[root@ns ~]# yum install yum-utils

리부팅

yum의 서버를 국내서버를 이용하기 이용서 yum 리스트를 추가해 준다

[root@ns ~]# vi /etc/yum.repos.d/CentOS-Base.repo

추가
[centossrpm]
name=CentOS-$releasever – SRPMS
baseurl=ftp://ftp.daum.net/centos/$releasever/os/SRPMS/
#yum-fastestmirror를 사용하고 있다면 baseurl을 사용하지 말고 mirrorlist를 복사해 적당히 수정후
#사용해도 됩니다만 저의 경우 daum서버가 쾌적한 환경(?)을 제공해 직접 설정했습니다.
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

### iptables 소스 다운로드

[root@ns ~]# yumdownloader –source iptables

[root@ns ~]# cd /usr/src
[root@ns src]# wget http://mirror.koreaidc.com/kernel/patch-o-matic-ng-20071231.tar.bz2
[root@ns src]# tar xvfj patch-o-matic-ng-20071231.tar.bz2

[root@ns src]# cd /root

### iptables 소스를 푼다

[root@ns ~]# rpm -ivh iptables-1.3.5-5.3.el5.src.rpm

## 이 경로로 접속하면 소스 파일이 보인다 이 파일을 압축을 푼다

[root@ns ~]# cd /usr/src/redhat/SOURCES
[root@ns SOURCES]# tar xvfj iptables-1.3.5.tar.bz2
patch-o-matic-ng 패치를 가하기 위해 아래와 같이 kernel 소스와 iptables 소스가 위치한 곳을 심볼릭링크를 해준다
patch-o-matic-ng가 default로 찾는 커널과 iptables의 경로가 /usr/src 이기 때문에 하는 작업이죠.

[root@ns SOURCES]# cd /usr/src
[root@ns src]# ln -s /usr/src/redhat/SOURCES/iptables-1.3.5 /usr/src/iptables
[root@ns src]# ln -s /usr/src/kernels/2.6.18-164.6.1.el5-x86_64 /usr/src/linux

이제 커널과 iptables에 patch-o-matic-ng 패치를 한다

[root@ns src]# cd /usr/src/patch-o-matic-ng-20071231
[root@ns patch-o-matic-ng-20071231]# ./runme –download
y 엔터
y 엔터

[root@ns patch-o-matic-ng-20071231]# ./runme geoip

y엔터

위에서 압푹 푼 iptables의 extensions 경로에 geoip 패치파일이 있는지 확인한다
[root@ns patch-o-matic-ng-20071231]# ls -l /usr/src/iptables/extensions | grep geoip
-rw-r–r– 1 root  root   9518 11월 30 15:45 libipt_geoip.c
-rw-r–r– 1 root  root    817 11월 30 15:45 libipt_geoip.man

/usr/src/iptables 디렉토리 안에서 make 해준다

[root@ns patch-o-matic-ng-20071231]# cd /usr/src/iptables/
[root@ns iptables]# make
xtension 디렉토리에 들어가면 libipt_geoip.so 파일이 생성되어 있는 것을 확인한다

[root@ns iptables]# cd extensions/
[root@ns extensions]# ls -l | grep libipt_geoip.so
-rwxr-xr-x 1 root  root   9563 11월 30 15:48 libipt_geoip.so
libipt_geoip.so 파일을 /lib/iptables 디렉토리 안에 복사해 넣어주면 iptables 관련 작업은 끝난다

(복사할때 32bit o/s면 lib/iptables 에  64bit o/s면 lib64/iptables 에 복사하면 된다)

[root@ns extensions]# cp libipt_geoip.so /lib64/iptables/
이제 커널에 geoip모듈을 올리기 위한 작업을 한다

[root@ns extensions]# cd /usr/src/linux
[root@ns linux]# make oldconfig
여기서 기본 엔터를 입력한다

[root@ns linux]# make modules_prepare

[root@ns linux]# mv net/ipv4/netfilter/Makefile net/ipv4/netfilter/Makefile.orig
[root@ns linux]# vi net/ipv4/netfilter/Makefile

아래 내용 기입

obj-m := ipt_geoip.o

KDIR := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules
[root@ns linux]# make M=net/ipv4/netfilter
[root@ns linux]# cp net/ipv4/netfilter/ipt_geoip.ko /lib/modules/2.6.18-164.6.1.el5/kernel/net/ipv4/netfilter/
[root@ns linux]# chmod 744 /lib/modules/2.6.18-164.6.1.el5/kernel/net/ipv4/netfilter/ipt_geoip.ko
모듈인식 작업

[root@ns linux]# depmod -a

모듈이 인식되었는지 확인한다

[root@ns linux]# ls -l /lib/modules/2.6.18-164.6.1.el5/kernel/net/ipv4/netfilter | grep geoip
-rwxr–r– 1 root root 219869 11월 30 15:58 ipt_geoip.ko

[root@ns linux]# modprobe ipt_geoip

[root@ns linux]# lsmod | grep geoip
ipt_geoip              37000  0
x_tables               50505  7 ipt_geoip,ipt_REJECT,xt_state,ip_tables,ip6t_REJECT,xt_tcpudp,ip6_tables

### GEOIP DATABASE 추가

[root@ns linux]# cd /root
[root@ns ~]# wget http://mirror.koreaidc.com/kernel/csv2bin-20041103.tar.gz

[root@ns ~]# tar xvfz csv2bin-20041103.tar.gz
csv2bin/COPYING
csv2bin/csv2bin.c
csv2bin/Makefile
csv2bin/README

[root@ns ~]# cd csv2bin
[root@ns csv2bin]# make
gcc -g -c -Wall  -D_GNU_SOURCE csv2bin.c
gcc -g csv2bin.o -o csv2bin

[root@ns csv2bin]# cd /root
[root@ns ~]# wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
[root@ns ~]# unzip GeoIPCountryCSV.zip
Archive:  GeoIPCountryCSV.zip
 inflating: GeoIPCountryWhois.csv
 
[root@ns ~]# mv GeoIPCountryWhois.csv csv2bin
[root@ns ~]# cd csv2bin
[root@ns csv2bin]# chmod 755 GeoIPCountryWhois.csv
[root@ns csv2bin]# ./csv2bin ./GeoIPCountryWhois.csv

csv2bin을 이용하여 geoip 관련 파일이 생성되었다 이것을 경로를 만들어줘서 복사해준다

[root@ns csv2bin]# mkdir mkdir /var/geoip
[root@ns csv2bin]# cp geoipdb.* /var/geoip/
이제 모든 작업은 완료되었다
실제 geoip모듈이 정상적으로 올라왔는지 iptables 를 이용하여 명령어를 입력해본다

[root@ns csv2bin]# iptables -A INPUT -p tcp –dport 21 -m geoip –src-cc KR -j ACCEPT

아무런 에러가 발생되지 않으면 정상적으로 모듈을 올린것이다.

 여기서 중요한것이 나는 현재 Ooops Firewall를 사용한다 근데 이상하게 이 oops를 재시작하면
geoip모듈이 올라오지 않는것이다..
(32bit에서는 이상이 없으나 이상하게 64bit에서는 이 증상이 나타나네)

위 작업이 모두 도루묵되나 싶었다 젠장 ㅠㅠ

하지만 엔지니어라면 뭔가 다른 방법을 찾아야 하지 않나.
소스를 분석해 보았으나 아직 그정도의 실력은 아니라 패스…
그래서 해결한 것이 oops-firewall 을 좀 더 높은 버전으로 설치하면 된다

내가 설치한 버전은 oops-firewall-6.2.6-1 이 버전으로 설치하면 위 증상이 없어진다.


코멘트 쓰기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

다음의 HTML 태그와 속성을 사용할 수 있습니다:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



배송정보
배송조회를 하시려면 송장번호를 클릭하세요
배송조회
상품명
주문번호
택배사
송장번호