본문 바로가기
네트워크 (LAN,WAN)

iptables GeoIP 및 connlimit를 이용한 국가별 접속 차단 및 관리

by 날으는물고기 2009. 4. 2.

iptables GeoIP 및 connlimit를 이용한 국가별 접속 차단 및 관리

728x90

Limits Connections Per IP

리눅스 기반 시스템에서 GeoIP 모듈과 connlimit 모듈을 설치하고 구성하여 특정 국가에서 오는 접근을 효과적으로 차단하거나 제한하는 방법입니다.

적용 환경 및 전제 조건

  • OS 버전 : CentOS 4.x / 5.x
  • Kernel : Linux Kernel 2.6.x (예시: 2.6.18.4)
  • iptables : iptables 1.3.x 또는 1.4.x 버전
  • 주요 소스 및 패치 : linux, iptables, patch-o-matic-ng, GeoIP Database

전체 설치 절차 및 명령어

1. 소스 및 필요한 파일 다운로드

# 커널 소스
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.4.tar.bz2

# iptables 소스
wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.3.5.tar.bz2

# patch-o-matic-ng
wget ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-2023xxxx.tar.bz2

# GeoIP DB 및 변환 스크립트
wget https://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
wget http://people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz

2. 소스 압축 해제 및 심볼릭 링크 생성

cd /usr/src
tar xvjf linux-2.6.18.4.tar.bz2
tar xvjf iptables-1.3.5.tar.bz2
tar xvjf patch-o-matic-ng-2023xxxx.tar.bz2

ln -s linux-2.6.18.4 linux
ln -s iptables-1.3.5 iptables

3. kernel 및 iptables에 GeoIP, connlimit 패치 적용

cd /usr/src/patch-o-matic-ng-2023xxxx
IPTABLES_DIR=/usr/src/iptables KERNEL_DIR=/usr/src/linux ./runme --download
IPTABLES_DIR=/usr/src/iptables KERNEL_DIR=/usr/src/linux ./runme geoip connlimit

오류 발생시 추가로 Makefile.ladd 적용:

cat patchlets/geoip/linux-2.6/net/ipv4/netfilter/Makefile.ladd >> /usr/src/linux/net/ipv4/netfilter/Makefile

4. 커널 컴파일 준비 및 GeoIP, connlimit 활성화

cd /usr/src/linux
make menuconfig

설정항목 위치

Networking --->
    [*] Networking support
    Networking options --->
        [*] Network packet filtering (replaces ipchains) --->
            IP: Netfilter Configuration --->
                <M> geoip match support
                <M> Connection limit match support (connlimit)

5. 커널 컴파일 및 설치

make bzImage
make modules
make modules_install
make install

6. iptables 컴파일 및 설치

cd /usr/src/iptables
make && make install

7. 최신 GeoIP Database 적용

unzip GeoIPCountryCSV.zip
tar xvzf csv2bin-20041103.tar.gz
cd csv2bin
make
./csv2bin ../GeoIPCountryWhois.csv
mkdir -p /var/geoip
cp geoipdb.bin geoipdb.idx /var/geoip/

8. GeoIP 모듈 로드

insmod /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/ipt_geoip.o
lsmod | grep geoip

iptables GeoIP 활용 규칙 예시

  • 한국 이외 모든 국가 접근 차단
    iptables -A INPUT -m geoip ! --src-cc KR -j DROP
  • 특정 국가 차단 (예: 중국, 미국, 일본에서 웹 접근 차단)
    iptables -A INPUT -p tcp --dport 80 -m geoip --src-cc CN,US,JP -j DROP
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • 한국만 FTP 접속 허용
    iptables -A INPUT -p tcp --dport 21 -m geoip --src-cc KR -j ACCEPT
    iptables -A INPUT -p tcp --dport 21 -j DROP

connlimit 활용 예시 (연결 제한 설정)

  • 특정 국가 IP가 동시에 10개 이상의 TCP SYN 접속 시도 시 차단
    iptables -A INPUT -p tcp --syn -m geoip --src-cc CN -m connlimit --connlimit-above 10 -j DROP

운영 및 점검 포인트

  • 주기적 업데이트
    • 매월 1회 이상 GeoIP Database 최신화
  • 로그 분석 및 모니터링
    • /var/log/messages, Apache 로그 등을 활용하여 차단된 접근 모니터링
  • 모듈 및 커널 버전 업그레이드 시 모듈 재빌드 필수
  • 운영 룰 변경 전 반드시 테스트 환경에서 사전 검증
  • connlimit 설정은 서비스 영향 없도록 적정값 설정

국가코드 주요 예시

국가 코드
대한민국 KR
중국 CN
일본 JP
미국 US
독일 DE
싱가포르 SG
네덜란드 NL

 

이를 통해 GeoIP와 connlimit을 iptables와 함께 운영하여 보안성을 높이고 특정 국가 및 IP 대역의 무차별 공격 시도를 효과적으로 차단할 수 있습니다.

728x90
그리드형(광고전용)

댓글