특정 국가나 해외에서 시스템에 악의적으로 접근하는 IP를 iptables 을 이용하여 국가별로 차단할 수 있습니다.
1. 참조 문서
The geoip match HOWTO (http://people.netfilter.org/peejix/geoip/howto/geoip-HOWTO.html#toc1)
2. 준비사항
1) patch-o-matic 최신버전 받기
http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/
2) geoip update 스크립트
http://people.netfilter.org/peejix/geoip/tools/geoip_update.sh
3. kernel 과 iptables에 geoip 패치 및 모듈 생성하기
1) patch-o-matic-ng-xxxxxxxx.tar.bz2 를 압축을 풀고,
2) ./runme --download 를 실행하여 geoip 소스를 가져와서
3) ./runme geoip 를 실행하면 kernel과 iptables에 geoip 모듈소스가 설치됩니다.
4) 이제 linux 디렉토리로 이동후 make menuconfig 실행하여
5) Networking options --> IP:Netfilter Configuration --> <M> geoip match support 선택후
6) make modules 실행하면 /usr/src/linux/net/ipv4/netfilter/ipt_geoip.o 모듈이 생성됩니다.
7) make modules_install 또는 ipt_geoip.o 을 /lib/modules/2.4.29/kernel/net/ipv4/netfilter/ 하에 복사합니다.
8) 또 한 가지 iptables 소스위치에서 make 실행하면 libipt_geoip.so 이 생성됩니다.
9) make install 또는 libipt_geoip.so 을 /usr/local/lib/iptables/ 하에 복사하면 방화벽 가동준비가 끝납니다.
4. geoip database 생성하기
1) geoip_update.sh 내용중 아래의 내용을
GEO_BIN="http://www.cookinglinux.org/geoip/db/geoipdb.bin"
GEO_IDX="http://www.cookinglinux.org/geoip/db/geoipdb.idx"
다음과 같이 수정합니다.
GEO_BIN="http://people.netfilter.org/peejix/geoip/database/20050410/geoipdb.bin"
GEO_IDX="http://people.netfilter.org/peejix/geoip/database/20050410/geoipdb.idx"
2) geoip_update.sh 을 실행하면 /var/geoip/에 geoipdb.bin geoipdb.idx geoipdb.last 파일이 생성됩니다.
3) 최신의 geoip database 는 아래 주소에서 얻을 수 있습니다.
http://www.maxmind.com/download/geoip/database/
4) cvs2bin 툴을 이용하여 매월1일 업데이트 되는 geoip database를 생성합니다.
(1) 툴 다운로드후 설치
http://people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz
(2) geoip database 생성후 /var/geoip/ 에 저장
cvs2bin GeoIPCountryWhois.csv
위의 명령 실행결과 geoipdb.bin geoipdb.idx 파일이 생성됩니다.
5. ipt_geoip.o 모듈올리기
1) insmod /lib/modules/XXXX/kernel/net/ipv4/netfilter/ipt_geoip.o
2) lsmod 로 모듈이 로딩되었는지 확인합니다.
6. iptables 구문의 적정 위치에 룰셋을 추가후 messages 기록이나 아파치로그를 통하여 모니터링해 봅니다.
1) 예로 국내를 제외한 모든 해외로부터의 시스템 접근 차단하기
iptables -A INPUT -m geoip ! --src-cc KR -j DROP
2) 중국 IP 대역으로부터 들어오는 ssh 접근 차단하기
iptables -A INPUT -p tcp --dport 22 -m geoip --src-cc CN -j DROP