안녕하세요, 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<확장팩(?) 비슷한 개념>입니다.
yum install gcc gcc-c++ make automake unzip zip xz kernel-devel-`uname -r` iptables-devel
위의 패키지들을 먼저 설치하셔야지, 뒤에 추가로 설치하는 것들에 막힘이 없습니다.
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'" 입니다.
자세한 에러메시지는 아래의 링크를 클릭하시면 나옵니다.
<<<에러메시지 확인하기>>> <<<접기>>>
필요 없는 이야기이지만 TARPIT은 네트워크 연결을 의도적으로 지연시켜, 웜바이러스로부터 보호하기 위해 개발되었다고 합니다...
/usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c: In function 'tarpit_tcp4':
/usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:295:3: warning: passing argument 3 of 'NF_HOOK' from incompatible pointer type [enabled by default]
skb_dst(nskb)->dev, dst_output);
^
In file included from include/uapi/linux/netfilter_ipv6.h:11:0,
from include/linux/netfilter_ipv6.h:10,
from /usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:45:
include/linux/netfilter.h:245:1: note: expected 'struct sock *' but argument is of type 'struct sk_buff *'
NF_HOOK(uint8_t pf, unsigned int hook, struct sock *sk, struct sk_buff *skb,
^
/usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:295:3: warning: passing argument 6 of 'NF_HOOK' from incompatible pointer type [enabled by default]
skb_dst(nskb)->dev, dst_output);
^
In file included from include/uapi/linux/netfilter_ipv6.h:11:0,
from include/linux/netfilter_ipv6.h:10,
from /usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:45:
include/linux/netfilter.h:245:1: note: expected 'struct net_device *' but argument is of type 'int (*)(struct sk_buff *)'
NF_HOOK(uint8_t pf, unsigned int hook, struct sock *sk, struct sk_buff *skb,
^
/usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:295:3: error: too few arguments to function 'NF_HOOK'
skb_dst(nskb)->dev, dst_output);
^
In file included from include/uapi/linux/netfilter_ipv6.h:11:0,
from include/linux/netfilter_ipv6.h:10,
from /usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:45:
include/linux/netfilter.h:245:1: note: declared here
NF_HOOK(uint8_t pf, unsigned int hook, struct sock *sk, struct sk_buff *skb,
^
/usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c: In function 'tarpit_tcp6':
/usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:418:10: warning: passing argument 3 of 'NF_HOOK' from incompatible pointer type [enabled by default]
skb_dst(nskb)->dev, dst_output);
^
In file included from include/uapi/linux/netfilter_ipv6.h:11:0,
from include/linux/netfilter_ipv6.h:10,
from /usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:45:
include/linux/netfilter.h:245:1: note: expected 'struct sock *' but argument is of type 'struct sk_buff *'
NF_HOOK(uint8_t pf, unsigned int hook, struct sock *sk, struct sk_buff *skb,
^
/usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:418:10: warning: passing argument 6 of 'NF_HOOK' from incompatible pointer type [enabled by default]
skb_dst(nskb)->dev, dst_output);
^
In file included from include/uapi/linux/netfilter_ipv6.h:11:0,
from include/linux/netfilter_ipv6.h:10,
from /usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:45:
include/linux/netfilter.h:245:1: note: expected 'struct net_device *' but argument is of type 'int (*)(struct sk_buff *)'
NF_HOOK(uint8_t pf, unsigned int hook, struct sock *sk, struct sk_buff *skb,
^
/usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:418:10: error: too few arguments to function 'NF_HOOK'
skb_dst(nskb)->dev, dst_output);
^
In file included from include/uapi/linux/netfilter_ipv6.h:11:0,
from include/linux/netfilter_ipv6.h:10,
from /usr/local/src/xtables-addons-2.10/extensions/xt_TARPIT.c:45:
include/linux/netfilter.h:245:1: note: declared here
NF_HOOK(uint8_t pf, unsigned int hook, struct sock *sk, struct sk_buff *skb,
<<<접기>>>
5) xtables-addons 설치 < CentOS 7일 경우> - 1
./configure
make
make install
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<확장팩(?) 비슷한 개념>입니다.
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 perl-Text-CSV_XS
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
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. 국가코드 리스트
국가코드 리스트는 아래의 링크를 클릭하여 확인하시기 바랍니다.
<<<국가코드 확인하기>>> <<<접기>>>
국가코드 목록
'AD' - 'United Arab Emirates - '안도라'
'AE' - 'Afghanistan - '아랍 에미리트'
'AF' - 'Antigua and Barbuda - '아프가니스탄'
'AG' - 'Anguilla - '앤티가 바부 다'
'AI' - 'Albania - '앵 귈라'
'AL' - 'Armenia - '알바니아'
'AM' - 'Angola - '아르메니아'
'AO' - 'Asia/Pacific Region - '앙골라'
'AP' - 'Antarctica - '아시아 / 태평양 지역'
'AQ' - 'Argentina - '남극 대륙'
'AR' - 'American Samoa - '아르헨티나'
'AS' - 'Austria - '아메리칸 사모아'
'AT' - 'Australia - '오스트리아'
'AU' - 'Aruba - '호주'
'AW' - 'Aland Islands - '아루바'
'AX' - 'Azerbaijan - '알란드 제도'
'AZ' - 'Bosnia and Herzegovina - '아제르바이잔'
'BA' - 'Barbados - '보스니아 헤르체고비나'
'BB' - 'Bangladesh - '바베이도스'
'BD' - 'Belgium - '방글라데시'
'BE' - 'Burkina Faso - '벨기에'
'BF' - 'Bulgaria - '부키 나 파소'
'BG' - 'Bahrain - '불가리아'
'BH' - 'Burundi - '바레인'
'BI' - 'Benin - '부룬디'
'BJ' - 'Saint Bartelemey - '베냉'
'BL' - 'Bermuda - '생 바르 텔레 미'
'BM' - 'Brunei Darussalam - '버뮤다'
'BN' - 'Bolivia - '브루나이 다루 살람'
'BO' - 'Bonaire, Saint Eustatius and Saba - '볼리비아'
'BQ' - 'Brazil - '보네르 섬, 세인트 유스 타티 우스 섬 및 사바 섬'
'BR' - 'Bahamas - '브라질'
'BS' - 'Bhutan - '바하마'
'BT' - 'Bouvet Island - '부탄'
'BV' - 'Botswana - '부베 섬'
'BW' - 'Belarus - '보츠와나'
'BY' - 'Belize - '벨라루스'
'BZ' - 'Canada - '벨리즈'
'CA' - 'Cocos (Keeling) Islands - '캐나다'
'CC' - 'Congo, The Democratic Republic of the - '코코스 군도'
'CD' - 'Central African Republic - '콩고 민주 공화국'
'CF' - 'Congo - '중앙 아프리카 공화국'
'CG' - 'Switzerland - '콩고'
'CH' - 'Cote d'Ivoire - '스위스'
'CI' - 'Cook Islands - '코트 디부 아르'
'CK' - 'Chile - '쿡 제도'
'CL' - 'Cameroon - '칠레'
'CM' - 'China - '카메룬'
'CN' - 'Colombia - '중국'
'CO' - 'Costa Rica - '콜롬비아'
'CR' - 'Cuba - '코스타리카'
'CU' - 'Cape Verde - '쿠바'
'CV' - 'Curacao - '카보 베르데'
'CW' - 'Christmas Island - '큐라 소'
'CX' - 'Cyprus - '크리스마스 섬'
'CY' - 'Czech Republic - '키프로스'
'CZ' - 'Germany - '체코 공화국'
'DE' - 'Djibouti - '독일'
'DJ' - 'Denmark - '지부티'
'DK' - 'Dominica - '덴마크'
'DM' - 'Dominican Republic - '도미니카 공화국'
'DO' - 'Algeria - '도미니카 공화국'
'DZ' - 'Ecuador - '알제리'
'EC' - 'Estonia - '에콰도르'
'EE' - 'Egypt - '에스토니아'
'EG' - 'Western Sahara - '이집트'
'EH' - 'Eritrea - '서사하라'
'ER' - 'Spain - '에리트레아'
'ES' - 'Ethiopia - '스페인'
'ET' - 'Europe - '에티오피아'
'EU' - 'Finland - '유럽'
'FI' - 'Fiji - '핀란드'
'FJ' - 'Falkland Islands (Malvinas) - '피지'
'FK' - 'Micronesia, Federated States of - '포클랜드 제도 (말 비나 스)'
'FM' - 'Faroe Islands - '미크로네시아'
'FO' - 'France - '페로 제도'
'FR' - 'Gabon - '프랑스'
'GA' - 'United Kingdom - '가봉'
'GB' - 'Grenada - '영국'
'GD' - 'Georgia - '그레나다'
'GE' - 'French Guiana - '그루지야'
'GF' - 'Guernsey - '프랑스 령 기아나'
'GG' - 'Ghana - '건지 섬'
'GH' - 'Gibraltar - '가나'
'GI' - 'Greenland - '지브롤터'
'GL' - 'Gambia - '그린란드'
'GM' - 'Guinea - '감비아'
'GN' - 'Guadeloupe - '기니'
'GP' - 'Equatorial Guinea - '과들루프'
'GQ' - 'Greece - '적도 기니'
'GR' - 'South Georgia and the South Sandwich Islands - '그리스'
'GS' - 'Guatemala - '사우스 조지아 및 사우스 샌드위치 제도'
'GT' - 'Guam - '과테말라'
'GU' - 'Guinea-Bissau - '괌'
'GW' - 'Guyana - '기니 비사우'
'GY' - 'Hong Kong - '가이아나'
'HK' - 'Heard Island and McDonald Islands - '홍콩'
'HM' - 'Honduras - '허드 섬 및 맥도널드 제도'
'HN' - 'Croatia - '온두라스'
'HR' - 'Haiti - '크로아티아'
'HT' - 'Hungary - '아이티'
'HU' - 'Indonesia - '헝가리'
'ID' - 'Ireland - '인도네시아 공화국'
'IE' - 'Israel - '아일랜드'
'IL' - 'Isle of Man - '이스라엘'
'IM' - 'India - '아일 오브 맨'
'IN' - 'British Indian Ocean Territory - '인도'
'IO' - 'Iraq - '영국령 인도양 지역'
'IQ' - 'Iran, Islamic Republic of - '이라크'
'IR' - 'Iceland - '이란, 이슬람 공화국'
'IS' - 'Italy - '아이슬란드'
'IT' - 'Jersey - '이탈리아'
'JE' - 'Jamaica - '저지'
'JM' - 'Jordan - '자메이카'
'JO' - 'Japan - '요르단'
'JP' - 'Kenya - '일본'
'KE' - 'Kyrgyzstan - '케냐'
'KG' - 'Cambodia - '키르기즈스탄'
'KH' - 'Kiribati - '캄보디아'
'KI' - 'Comoros - '키리바시'
'KM' - 'Saint Kitts and Nevis - '코모로'
'KN' - 'Korea, Democratic People's Republic of - '세인트 키츠 네비스'
'KP' - 'Korea, Republic of - '북한 <조선 민주주의 인민 공화국>'
'KR' - 'Kuwait - '대한민국'
'KW' - 'Cayman Islands - '쿠웨이트'
'KY' - 'Kazakhstan - '케이맨 제도'
'KZ' - 'Lao People's Democratic Republic - '카자흐스탄'
'LA' - 'Lebanon - '라오스 인민 민주주의 공화국'
'LB' - 'Saint Lucia - '레바논'
'LC' - 'Liechtenstein - '세인트 루시아'
'LI' - 'Sri Lanka - '리히텐슈타인'
'LK' - 'Liberia - '스리랑카'
'LR' - 'Lesotho - '라이베리아'
'LS' - 'Lithuania - '레소토'
'LT' - 'Luxembourg - '리투아니아'
'LU' - 'Latvia - '룩셈부르크'
'LV' - 'Libyan Arab Jamahiriya - '라트비아'
'LY' - 'Morocco - '리비아 아랍 Jamahiriya'
'MA' - 'Monaco - '모로코'
'MC' - 'Moldova, Republic of - '모나코'
'MD' - 'Montenegro - '몰도바 공화국'
'ME' - 'Saint Martin - '몬테네그로'
'MF' - 'Madagascar - '세인트 마틴'
'MG' - 'Marshall Islands - '마다가스카르'
'MH' - 'Macedonia - '마샬 군도'
'MK' - 'Mali - '마케도니아'
'ML' - 'Myanmar - '말리'
'MM' - 'Mongolia - '미얀마'
'MN' - 'Macao - '몽골리아'
'MO' - 'Northern Mariana Islands - '마카오'
'MP' - 'Martinique - '북 마리아나 제도'
'MQ' - 'Mauritania - '마르티니크'
'MR' - 'Montserrat - '모리타니'
'MS' - 'Malta - '몬세 라트'
'MT' - 'Mauritius - '몰타'
'MU' - 'Maldives - '모리셔스'
'MV' - 'Malawi - '몰디브'
'MW' - 'Mexico - '말라위'
'MX' - 'Malaysia - '멕시코'
'MY' - 'Mozambique - '말레이시아'
'MZ' - 'Namibia - '모잠비크'
'NA' - 'New Caledonia - '나미비아'
'NC' - 'Niger - '뉴 칼레도니아'
'NE' - 'Norfolk Island - '니제르'
'NF' - 'Nigeria - '노퍽 섬'
'NG' - 'Nicaragua - '나이지리아'
'NI' - 'Netherlands - '니카라과'
'NL' - 'Norway - '네덜란드'
'NO' - 'Nepal - '노르웨이'
'NP' - 'Nauru - '네팔'
'NR' - 'Niue - '나우루'
'NU' - 'New Zealand - '니우에'
'NZ' - 'Oman - '뉴질랜드'
'OM' - 'Panama - '오만'
'PA' - 'Peru - '파나마'
'PE' - 'French Polynesia - '페루'
'PF' - 'Papua New Guinea - '프랑스 령 폴리네시아의'
'PG' - 'Philippines - '파푸아 뉴기니'
'PH' - 'Pakistan - '필리핀 제도'
'PK' - 'Poland - '파키스탄'
'PL' - 'Saint Pierre and Miquelon - '폴란드'
'PM' - 'Pitcairn - '생 피에르 미 클롱'
'PN' - 'Puerto Rico - '핏 케언'
'PR' - 'Palestinian Territory - '푸에르토 리코'
'PS' - 'Portugal - '팔레스타인 영토'
'PT' - 'Palau - '포르투갈'
'PW' - 'Paraguay - '팔라우'
'PY' - 'Qatar - '파라과이'
'QA' - 'Reunion - '카타르'
'RE' - 'Romania - '재결합'
'RO' - 'Serbia - '루마니아'
'RS' - 'Russian Federation - '세르비아'
'RU' - 'Rwanda - '러시아 연방'
'RW' - 'Saudi Arabia - '르완다'
'SA' - 'Solomon Islands - '사우디 아라비아'
'SB' - 'Seychelles - '솔로몬 제도'
'SC' - 'Sudan - '세이셸'
'SD' - 'Sweden - '수단'
'SE' - 'Singapore - '스웨덴'
'SG' - 'Saint Helena - '싱가포르'
'SH' - 'Slovenia - '세인트 헬레나'
'SI' - 'Svalbard and Jan Mayen - '슬로베니아'
'SJ' - 'Slovakia - '스발 바르와 얀 메이 엔'
'SK' - 'Sierra Leone - '슬로바키아'
'SL' - 'San Marino - '시에라 리온'
'SM' - 'Senegal - '산 마리노'
'SN' - 'Somalia - '세네갈'
'SO' - 'Suriname - '소말리아'
'SR' - 'South Sudan - '수리남'
'SS' - 'Sao Tome and Principe - '남 수단'
'ST' - 'El Salvador - '상투 메 프린시 페'
'SV' - 'Sint Maarten - '엘살바도르'
'SX' - 'Syrian Arab Republic - '신트 마르텐'
'SY' - 'Swaziland - '시리아'
'SZ' - 'Turks and Caicos Islands - '스와질란드'
'TC' - 'Chad - '터크 스 케이 커스 제도'
'TD' - 'French Southern Territories - '차드'
'TF' - 'Togo - '프랑스 남부 지역'
'TG' - 'Thailand - '가다'
'TH' - 'Tajikistan - '태국'
'TJ' - 'Tokelau - '타지키스탄'
'TK' - 'Timor-Leste - '토켈 라우'
'TL' - 'Turkmenistan - '동 티모르'
'TM' - 'Tunisia - '투르크 메니스탄'
'TN' - 'Tonga - '튀니지'
'TO' - 'Turkey - '통가'
'TR' - 'Trinidad and Tobago - '터키'
'TT' - 'Tuvalu - '트리니다드 토바고'
'TV' - 'Taiwan - '투발루'
'TW' - 'Tanzania, United Republic of - '대만'
'TZ' - 'Ukraine - '탄자니아 (유엔)'
'UA' - 'Uganda - '우크라이나'
'UG' - 'United States Minor Outlying Islands - '우간다'
'UM' - 'United States - '미국령 군소 제도'
'US' - 'Uruguay - '미국'
'UY' - 'Uzbekistan - '우루과이'
'UZ' - 'Holy See (Vatican City State) - '우즈베키스탄'
'VA' - 'Saint Vincent and the Grenadines - '성좌 (바티칸 시국)'
'VC' - 'Venezuela - '세인트 빈센트 그레나딘'
'VE' - 'Virgin Islands, British - '베네수엘라'
'VG' - 'Virgin Islands, U.S. - '영국령 버진 아일랜드'
'VI' - 'Vietnam - '미국령 버진 아일랜드'
'VN' - 'Vanuatu - '베트남'
'VU' - 'Wallis and Futuna - '바누아투'
'WF' - 'Samoa - '월리스 푸 투나'
'WS' - 'Yemen - '사모아'
'YE' - 'Mayotte - '예멘 아랍 공화국'
'YT' - 'South Africa - '마 요트'
'ZA' - 'Zambia - '남아프리카'
'ZM' - 'Zimbabwe - '잠비아'
'ZW' - ' - '짐바브웨'
<<<접기>>>
이 것으로 GeoIP 설치 방법에 대해서 설명드렸습니다.
다음 포스팅은 GeoIP 매치 사용법에 대해서 간단하게 알려드리겠습니다.
긴 글 읽어주셔서 감사합니다 ^^