안녕하세요. ManVSCloud 김수현입니다.
오늘 포스팅은 이전 포스팅 주제였던 ACG(Access Control Group)에 이어 서버 내부 방화벽,
그 중에서도 GEOIP에 대해서 작성해보려합니다.


글로벌 사이버테러는 지속적으로 늘어나고 있고 공격 유형도 다양해지고 있습니다.
ACG는 Inbound Rule이 기본 차단이고 추가하는 IP/ACG에 대해서 허용하는 방식입니다.
또한 NACL을 이용한다고 하여도 한 국가가 사용하는 IP 대역을 전부 허용/차단 룰을 추가해주는 것도 힘들 것입니다.
주로 웹 서비스가 대표적인 케이스인데 해외 서비스를 하지 않는 경우 또는 특정 국가에서 서비스를 해야하는데 지속적인 공격으로 지역 기반 차단이 필요한 경우가 있습니다.
물론 Naver Cloud Platform의 Security Monitoring 서비스를 사용한다면 IDS/IPS, WAF, Anti-DDOS 등을 사용할 수 있으나 아직 보안 장비에 투자할 비용이 부족한 사용자에게는 부담스러울 수가 있어 비록 100% 완벽하지 않으나 어느정도 피해를 최소화하기 위해 GeoIP 모듈을 이용하여 내부 방화벽으로 서버를 지역 기반 차단하는 방법을 작성해보겠습니다.
Linux

Linux에서 지역 기반 차단을 진행해봅시다.
방화벽은 모두가 아는 iptables를 사용할 것입니다.
[Environment]
Naver Cloud Platform : centos-7.8-64
※ 기본 설정 및 설치 ?
[root@manvscloud-dev-pub-kr1 ~]# sestatus SELinux status: disabled [root@manvscloud-dev-pub-kr1 ~]# yum install -y iptables* yum install lrzsz libtool wget patch pcre-devel lua-devel libxml2-devel ncurses-devel zlib zlib-devel libtermcap-devel libc-client-devel bison gcc g++ cpp gcc-c++ curl curl-devel make automake unzip zip xz -y [root@manvscloud-dev-pub-kr1 ~]# yum install -y "kernel-devel-uname-r == $(uname -r)" [root@manvscloud-dev-pub-kr1 ~]# yum install -y yum install perl-Text-CSV_XS perl-NetAddr-IP perl-CPAN.noarch
※ Kernel-devel 확인 ?


kernel-devel이 정상적으로 설치되지 않으면 이후 설치할 xtables 컴파일이 정상적으로 되지않습니다. yum으로 현재 커널 버전에 맞는 kernel-devel이 설치되지 않을 경우 repo를 찾아 커널 버전에 devel을 설치해주어야합니다.
※ xtables 설치 ?
[root@manvscloud-dev-pub-kr1 ~]# cd /usr/local/src [root@manvscloud-dev-pub-kr1 src]# wget mirror.koreaidc.com/iptables/xtables-addons-2.10.tar.gz // https://sourceforge.net/projects/xtables-addons/files/Xtables-addons/ ← 접속 시 각 버전별 xtables가 있습니다. [root@manvscloud-dev-pub-kr1 src]# tar xvfz xtables-addons-2.10.tar.gz [root@manvscloud-dev-pub-kr1 src]# cd xtables-addons-2.10/ [root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# cat -n mconfig | grep TARPIT 12 build_TARPIT=m // build_TRIPIT=m은 redhat에서 지원하지않아 주석처리 해주었습니다. [root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# sed -i '12s/build_TARPIT=m/#&/' mconfig
(참고로 CentOS6 버전 이용 시 커널 버전이 낮아 xtables 버전 역시 낮춰서 설치하셔야합니다.
1.37버전 설치 권장드리며 mconfig에서 build_RAWNAT=m, build_SYSRQ=m, build_TARPIT=m, build_length2=m 총 4가지를 주석처리 해줘야합니다.)
[root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# ./configure [root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# make [root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# make install [root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# cd geoip [root@manvscloud-dev-pub-kr1 geoip]# ./00_download_geolite2 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: geolite.maxmind.com; Unknown error 00_download_geolite2를 실행해도 되지않기때문에 따로 GeoLite2-Country-CSV를 받아야합니다. https://maxmind.com/ 에 가입 후 라이센스 발급 및 GeoLite2-Country-CSV.zip 설치가 가능합니다. // 아래 MaxMind 링크를 추가해두었습니다. [root@manvscloud-dev-pub-kr1 geoip]# ll | grep GeoLite2 -rw-r--r-- 1 root root 1934768 May 29 08:25 GeoLite2-Country-CSV_20210525.zip [root@manvscloud-dev-pub-kr1 geoip]# ./10_download_countryinfo [root@manvscloud-dev-pub-kr1 geoip]# unzip GeoLite2-Country-CSV_20210525.zip [root@manvscloud-dev-pub-kr1 geoip]# perl -MCPAN -e shell cpan[1]> install NetAddr::IP cpan[2]> install Getopt::Long cpan[3]> quit [root@manvscloud-dev-pub-kr1 geoip]# cat GeoLite2-Country-CSV_20210525/GeoLite2-Country-Blocks-IPv{4,6}.csv | ./20_convert_geolite2 /tmp/CountryInfo.txt > GeoIP-legacy.csv [root@manvscloud-dev-pub-kr1 geoip]# ./xt_geoip_build GeoIP-legacy.csv [root@manvscloud-dev-pub-kr1 geoip]# mkdir -p /usr/share/xt_geoip [root@manvscloud-dev-pub-kr1 geoip]# cp -a {BE,LE} /usr/share/xt_geoip/ [root@manvscloud-dev-pub-kr1 geoip]# cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables_org [root@manvscloud-dev-pub-kr1 ~]# systemctl enable iptables [root@manvscloud-dev-pub-kr1 ~]# systemctl start iptables
/etc/sysconfig/iptables 수정하여 룰셋 적용해서 사용하시면 됩니다.
TIP & Personal Comments and Wrap-up

Windows에서 역시 국가 기반 차단이 가능합니다.
Powershell을 이용한 방화벽 컨트롤 및 IPSec 설정의 방법이 존재하는데 이번 편에서는 따로 다루지 않고 IPsec 편에서 추가적으로 설명하도록 하겠습니다.
또한 Apache와 Nginx 등 소프트웨어단에서 국가 기반 차단을 할 수도 있습니다.
이후 이러한 소프트웨어단에서 국가 기반 차단을 하는 방법도 포스팅할 것입니다.
위 링크는 WHOIS입니다.
서버내에서 공격성 접근 확인 시 해당 IP를 위 사이트에서 검색할 경우 어느 나라의 IP인지 확인이 가능합니다.
국가 기반 차단 시 필요한 국가 코드 및 WHOIS 조회 시 국가코드가 어느 나라인지 확인할 수 있는 국가 코드 조회 사이트도 참고하시면 좋을듯합니다.
긴 글 읽어주셔서 감사합니다.