본문으로 바로가기



안녕하세요, SATAz입니다.

IPTables에 대해서 소개를 드린지 벌써 열두 번째 포스팅입니다.



지난 포스팅은 IPTables에서 PREROUTING이라는 체인을 이용해서 SYN PROXY를 구현, DDOS를 방어하는 내용을 다루었습니다.

오늘의 포스팅은 IPTables의 GeoIP 모듈(매치)을 설치하는 내용을 다루려고 합니다.

GeoIP는 특정 국가의 아이피대역 허용 및 차단을 할 수가 있습니다. 



▣주의!!! : 이 블로그에 작성된 IPTables 포스팅들은 교육용으로 작성된 내용입니다. 

 서비스 중인 서버에 아래의 내용만 갖고 바로 적용하지 마시고, 서버에 적용 전에 반드시 테스트를 거치시기 바랍니다.  IPTables도 방화벽인지라, 무턱대고 서버에 적용했다가는 서비스 중단되는 사태가 발생할 수 있습니다. 필히 주의하셔야합니다!!!


#IPTables 설정를 위한 환경


- 테스트 머신 : VMware WorkStation 12 Player

- 운영체제 : CentOS/RHEL 7 - 64bit ( Minimal 설치 )

- 메모리 : 2GB

- IPTables Version : iptables v1.4.21

- 서버 아이피 : 192.168.0.18


- 테스트 머신 : VMware WorkStation 12 Player

- 운영체제 : CentOS/RHEL  - 64bit ( Minimal 설치 )

- 메모리 : 2GB

- IPTables Version : iptables v1.4.7

- 서버 아이피 : 192.168.0.18



1. GeoIP란 무엇인가?

 GeoIP는, MaxMind사에서 제공하는 국가별 아이피 목록을 이용한 오픈소스 라이브러리입니다. 이 모듈을 IPTables에 이용하면, 특정 국가의 아이피들을 차단할 수 있습니다. GeoIP의 이름 조합은, Geographic, Geolocation 등등.. 지리와 관련된 내용을 뜻한는 "Geo"에다가 "IP"를 붙여서 만든 것 같습니다. 이 모듈은 IPTables에 붙여서 사용하는 것 뿐만 아니라, 리눅스 웹서비스(Apache)에 붙여서 사용할 수도 있습니다.


GeoIP는 보안상으로, 다른 국가는 모두 차단하고 한국에서만 서비스하고 싶을 때 제일 유용하지 않을 까 싶습니다.


※참고

커널 버전 각각에 맞는 Xtables-addons를 설치해주셔야 해서, CentOS 6버전과 CentOS 7버전의 설치 방법을 나누어서 포스팅했습니다.

사용하시는 CentOS 버전에 맞추어서, 아래의 순서로 설치를 진행해주시기 바랍니다.



2. IPTables를 위한 GeoIP 설치 - CentOS 7일 경우.

GeoIP를 IPTables에 적용하기 위해서는 perl-Text-CSV_XS라는 패키지와, xtables-addons를 설치해야합니다.

"perl-Text-CSV_XS"는 쉼표(,)로 이루어진 값들을 구성하고, 분해하는 역할을 하는 패키지입니다. 엑셀 비슷하다고 보시면 됩니다.

"xtables-addons"는 커널/IPTables에서 제공하지 않는 기능을 추가적으로 지원해주는 Addons<확장팩(?) 비슷한 개념>입니다.


1) 필수 패키지를 설치합니다.

yum install gcc gcc-c++ make automake unzip zip xz kernel-devel-`uname -r` iptables-devel


위의 패키지들을 먼저 설치하셔야지, 뒤에 추가로 설치하는 것들에 막힘이 없습니다.


2) perl-Text-CSV_XS 설치

yum install perl-Text-CSV_XS


3) xtables-addons 설치 < CentOS 7일 경우> - 1

wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-2.10.tar.xz


tar -xvf xtables-addons-2.10.tar.xz

cd xtables-addons-2.10



4) xtables-addons 의 mconfig 파일 수정

vi mconfig


....

#build_TARPIT=m                                    <= 주석처리 진행

....


:wq                                                         <= 저장 후 나가기


build_TARPIT=m을 주석처리해주는 이유는... RedHat에서 지원하지 않는 기능을 사용하기 때문입니다.

주석처리하지 않을 경우 나타나는 에러메시지는, "xt_TARPIT.c:418:10: error: too few arguments to function 'NF_HOOK'" 입니다.

자세한 에러메시지는 아래의 링크를 클릭하시면 나옵니다.



5) xtables-addons 설치 < CentOS 7일 경우> - 1

./configure


make

make install


6) GeoIP 모듈 셋팅

cd geoip/

./xt_geoip_dl

./xt_geoip_build GeoIPCountryWhois.csv


mkdir -p /usr/share/xt_geoip/

cp -r {BE,LE} /usr/share/xt_geoip/


이렇게, CentOS 7버전에서의, IPTables를 위한 GeoIP 설치가 완료되었습니다.



3. IPTables를 위한 GeoIP 설치 - CentOS 6일 경우.

이제 CentOS 6버전의 GeoIP 설치 방법을 알려드리겠습니다.

CentOS 6의 커널버전이 조~끔 낮아서, xtables-addons 버전을 낮춰서 설치하셔야 합니다.


CentOS6버전도 마찬가지로, GeoIP를 IPTables에 적용하기 위해서 perl-Text-CSV_XS라는 패키지와 xtables-addons를 설치해야합니다.

"perl-Text-CSV_XS"는 쉼표(,)로 이루어진 값들을 구성하고, 분해하는 역할을 하는 패키지입니다. 엑셀 비슷하다고 보시면 됩니다.

"xtables-addons"는 커널/IPTables에서 제공하지 않는 기능을 추가적으로 지원해주는 Addons<확장팩(?) 비슷한 개념>입니다.


1) 필수 패키지를 설치합니다.

yum install gcc gcc-c++ make automake unzip zip xz kernel-devel-`uname -r` iptables-devel


위의 패키지들을 먼저 설치하셔야지, 뒤에 추가로 설치하는 것들에 막힘이 없습니다.


2) perl-Text-CSV_XS 설치를 위한, epel-release를 설치

yum install epel-release


3) perl-Text-CSV_XS 설치

yum install perl-Text-CSV_XS


4) 다시 epel-release 삭제

yum remove epel-release


CentOS 6버전의 기본 Yum base repo에서는 perl-Text-CSV_XS 패키지를 지원하지 않습니다.

따라서 epel-release를 먼저 설치하셔야지 perl-Text-CSV_XS 패키지 설치가 가능합니다.


제가 워낙 순정을 좋아해서, epel-release를 삭제합니다. yum 설치의 편리함이 좋으신 분들은 그냥 지우지 않으셔도 무관합니다 ^^


3) xtables-addons 설치 < CentOS 6일 경우> - 1

cd /usr/local/src

wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-1.37.tar.xz


tar xvf xtables-addons-1.37.tar.xz

cd xtables-addons-1.37/


4) xtables-addons 의 mconfig 파일 수정

vi mconfig


....

#build_RAWNAT=m                                    <= 주석처리 진행

....

#build_SYSRQ=m                                       <= 주석처리 진행

....

#build_length2=m                                      <= 주석처리 진행

....


:wq                                                         <= 저장 후 나가기


위와 같이 mconfig에서 저 내용들을 주석처리 하는 이유는, ./configure를 하고 make할 때 에러가 나기 때문입니다.

주석처리 안하고 make를 할 경우, 아래와 같은 에러메시지들이 확인되실 것입니다.

"make[4]: *** [/usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.o] Error 1" 

"make[4]: *** [/usr/local/src/xtables-addons-1.37/extensions/xt_SYSRQ.o] Error 1" 

"make[4]: *** [/usr/local/src/xtables-addons-1.37/extensions/xt_length2.o] Error 1" 


 지금 커널버전에서는 지원하지 않는 기능들이 필요하기 때문에, 에러가 발생하고 make를 중단하는 것 같습니다.


5) xtables-addons 설치 < CentOS 6일 경우> - 2

./configure


make

make install


6) GeoIP 모듈 셋팅

cd geoip/

./xt_geoip_dl

./xt_geoip_build GeoIPCountryWhois.csv


mkdir -p /usr/share/xt_geoip/

cp -r {BE,LE} /usr/share/xt_geoip/


이렇게, CentOS 7버전에서의, IPTables를 위한 GeoIP 설치가 완료되었습니다.



4. GeoIP가 잘 적용되었는지 확인하기

지금까지 CentOS 6버전과 7버전의 설치 방법을 알려드렸습니다. 이제 잘 적용되는지 한번 확인해보시죠.


# IPTables에서 GeoIP 매치 사용 명령어

iptables -I INPUT -d 192.168.0.18 -m geoip --src-cc CN -j DROP


위의 명령어는, 중국에서 들어오는 패킷들은 모두 차단하겠다는 의미입니다.

명령어 적용을 하시고 나서, VPN으로 중국 아이피 거쳐서 한번 들어와보세요.


# 명령어의 적용

[root@localhost ~]# iptables -I INPUT -d 192.168.0.18 -m geoip --src-cc CN -j DROP

[root@localhost ~]# iptables -nL

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

DROP       all  --  0.0.0.0/0            192.168.0.18         -m geoip --source-country CN 

ACCEPT     tcp  --  0.0.0.0/0            192.168.0.18         tcp dpt:80

ACCEPT     all  --  0.0.0.0/0            192.168.0.18         state RELATED,ESTABLISHED

ACCEPT     tcp  --  192.168.0.2          192.168.0.18         tcp dpt:22

ACCEPT     all  --  192.168.0.1          192.168.0.18        

ACCEPT     all  --  8.8.8.8              192.168.0.18        

DROP       all  --  0.0.0.0/0            192.168.0.18        


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination    



5. 국가코드 리스트

국가코드 리스트는 아래의 링크를 클릭하여 확인하시기 바랍니다.



이 것으로 GeoIP 설치 방법에 대해서 설명드렸습니다.

다음 포스팅은 GeoIP 매치 사용법에 대해서 간단하게 알려드리겠습니다.


긴 글 읽어주셔서 감사합니다 ^^




댓글을 달아 주세요

  1. ㅠㅠ 2017.11.16 11:48

    centos6의 xtables-addons를 설치하는 부분의 다운받은 파일버전과 압축푸는 파일버전이 다르네요..

    • SATAz 2017.11.26 11:55 신고

      앗, 정말 감사합니다.
      제가 최신버전으로 시도하다가... 안되는 것 같길레 stable 버전으로 바꾼 것이...
      잘못된 포스팅을 올리게 되었군요 ㅠㅠ

      파일 버전 다시 맞추었습니다 ^^
      관심가져주셔서 감사합니다 ^^