OS : CentOS 7.x
Centos 7.x 에서 iptables을 이용하여 Geoip를 이용한 국가별 차단을 이용하는 방법
xtables 이용하면 되는데 이게 내용이 최근에 수정되어 수정된 파일을 별도 압축해서 만들었다
1. 필요한 라이브러리 설치 및 xtables 다운로드 및 설치
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[root@xinet ~]# yum -y install perl-NetAddr-IP iptables-devel perl-Text-CSV_XS kernel-devel [root@xinet ~]# wget mirror.koreaidc.com/iptables/xtables-addons-2.10.tar.gz [root@xinet ~]# tar xvfz xtables-addons-2.10.tar.gz [root@xinet ~]# cd xtables-addons-2.10/ [root@xinet xtables-addons-2.10]# vi mconfig 주석처리 #build_TARPIT=m [root@xinet xtables-addons-1.47.1]# ./configure [root@xinet xtables-addons-1.47.1]# make [root@xinet xtables-addons-1.47.1]# make install |
2. GeoIP 데이터베이스를 다운받을수 있게 구성 (별도 수정한 파일 포함)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@xinet xtables-addons-2.10]# cd geoip/ [root@xinet ~/xtables-addons-2.10/geoip]# vi 00_download_geolite2 ###USR 주소 수정 GEOLITEURL='https://xinet.kr/data/geoip/GeoLite2-Country-CSV.zip' ### 저장후 [root@xinet geoip]# ./00_download_geolite2 [root@xinet geoip]# ./10_download_countryinfo [root@xinet geoip]# cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv | ./20_convert_geolite2 /tmp/CountryInfo.txt > GeoIP-legacy.csv Can't locate auto/NetAddr/IP/canon.al in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./20_convert_geolite2 line 63 (#1) Uncaught exception from user code: Can't locate auto/NetAddr/IP/canon.al in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./20_convert_geolite2 line 63. AutoLoader::AUTOLOAD('NetAddr::IP=HASH(0x5e027a8)') called at ./20_convert_geolite2 line 63 이렇게 에러가 발생되면 |
3. 만약 에러가 발생된다면 모듈이 없으면 cpan을 이용하여 설치를 해주면 된다
1 2 3 4 5 6 7 |
[root@xinet geoip]# yum install perl-CPAN.noarch [root@xinet geoip]# perl -MCPAN -e shell install NetAddr::IP install Getopt::Long quit |
4. 이제 다시 해당 폴더를 들어가 다시 파일을 만들어보자 ( 국가별code 정보를 가지고 만드는것이다)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
[root@xinet geoip]# cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv | ./20_convert_geolite2 /tmp/CountryInfo.txt > GeoIP-legacy.csv 10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 110000 120000 130000 140000 150000 160000 170000 180000 190000 200000 210000 220000 230000 240000 250000 260000 270000 280000 290000 300000 310000 320000 330000 340000 350000 360000 370000 380000 390000 400000 410000 420000 [root@xinet geoip]# ls -l GeoIP-legacy.csv -rw-r--r-- 1 root root 39082739 2019-06-18 15:38 GeoIP-legacy.csv [root@xinet geoip]# ./xt_geoip_build GeoIP-legacy.csv [root@xinet geoip]# ls -l 합계 38268 -rwxr-xr-x 1 root root 222 2019-01-15 05:19 00_download_geolite2 -rwxr-xr-x 1 root root 126 2019-01-15 05:19 10_download_countryinfo -rwxr-xr-x 1 root root 3247 2019-01-15 05:19 20_convert_geolite2 drwxr-xr-x 2 root root 16384 2019-06-18 15:39 BE -rw-r--r-- 1 root root 39082739 2019-06-18 15:38 GeoIP-legacy.csv drwxr-xr-x 2 root root 16384 2019-06-18 15:39 LE -rw-r--r-- 1 root root 16794 2019-06-18 15:30 Makefile -rw-r--r-- 1 root root 112 2012-10-16 04:29 Makefile.am -rw-r--r-- 1 root root 16308 2012-10-16 04:29 Makefile.in -rwxr-xr-x 1 root root 2951 2012-10-16 04:29 xt_geoip_build -rw-r--r-- 1 root root 1302 2012-10-16 04:29 xt_geoip_build.1 -rwxr-xr-x 1 root root 278 2012-10-16 04:29 xt_geoip_dl -rw-r--r-- 1 root root 582 2012-10-16 04:29 xt_geoip_dl.1 |
5. 이제 폴더를 만들고 복사해서 iptables 를 적용해보자
1 2 3 4 5 6 7 |
[root@xinet geoip]# mkdir -p /usr/share/xt_geoip [root@xinet geoip]# cp -a BE /usr/share/xt_geoip/ [root@xinet geoip]# cp -a LE /usr/share/xt_geoip/ [root@xinet geoip]# iptables -I INPUT -m geoip --src-cc CN -j DROP |
이상없이 적용이 된다면 정상적으로 적용완료