메뉴 닫기

GeoIP 적용하기 : Rocky Linux 8

“GeoIP 적용하기 : Rocky Linux 8”


GeoIP : MaxMind에서 제공하는 솔루션으로, 서버에 접근하는 IP를 국가별로 확인할수 있는 기능을 제공합니다.  GeoIP를 설치하여 서버에 접근 하는 IP를 국가별로 제한하거나 허용 할 수 있습니다. 

이 포스팅에서는 Rocky Linux 8 (Redhat 8)계열 이상에서 GeoIP를 적용하는 방법을 설명합니다.

[개 요]

✅종    류 : 엔지니어링 
✅난이도 : ⭐ 
✅내용요약 : GeoIP 를 Rocky Linux 8 (Redhat 8) 계열 이상에서 적용 방법 설명
✅테스트 환경 : Rocky Linux 8 (Redhat 8)
✅관련직무 : 시스템&클라우드 엔지니어

[기초이론&용어설명]

[관련 기술자료]


 

 

“시작하며”


 이 포스트는 GeoIP 를 Rocky Linux 8 (Redhat 8) 계열 이상에서 적용 방법 과 활용사례에 대해 아래 순서로 설명합니다.

    1. Rocky Linux8 기본환경 설치

    2.Rocky Linux8 iptables, xtables-addons 설치

    3.iptables geoip 실제 활용

 

1) Rocky Linux 8 기본 환경 설치&설정


GeoIP를 적용하기위해 iptable 설치합니다.

아래 작업을 수행한 후, SELINUX=enforcing 을 disabled로 변경합니다.

[root@localhost]# vi /etc/sysconfig/selinux

[ SELINUX=disabled로 변경한 후 출력되는 화면]

iptable를 사용하기 위해 타 방화벽 제외를 위한 작업을 아래와 같이 수행합니다.

[root@localhost]# systemctl disable firewalld

[ root@localhost ]# localectl set locale LANG=no_KR.utf8

리부팅을 해야 업데이트 적용내용을 확인할 수 있습니다.

💡유의사항

리부팅 명령어(아래)를 적용할 경우 현재 운영되고 있는 서비스들이 중단되는 장애가  발생하므로, 사용자(고객)에게 안내후 진행하시길 바랍니다

[root@localhost]# dnf install -y vim wget && dnf update -y && init 6

1️⃣ 저장소 추가 및 활성화

저장소를 추가하고 활성화 하기 위해 아래의 작업을 수행합니다.

[root@localhost]# dnf install -y epel-release

[root@localhost]# dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

[root@localhost]# dnf install -y rocky-release

[root@localhost]# dnf install -y https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm

[root@localhost]# sed s/enabled=0/enabled=1/g -i /etc/yum.repos.d/Rocky-Extras.repo

[root@localhost]# sed s/enabled=0/enabled=1/g -i /etc/yum.repos.d/Rocky-HighAvailability.repo

[root@localhost]# sed s/enabled=0/enabled=1/g -i /etc/yum.repos.d/Rocky-NFV.repo

[root@localhost]# sed s/enabled=0/enabled=1/g -i /etc/yum.repos.d/Rocky-Plus.repo

[root@localhost]# sed s/enabled=0/enabled=1/g -i /etc/yum.repos.d/Rocky-PowerTools.repo

[root@localhost]# sed s/enabled=0/enabled=1/g -i /etc/yum.repos.d/Rocky-RT.repo

[root@localhost]# sed s/enabled=0/enabled=1/g -i /etc/yum.repos.d/Rocky-ResilientStorage.repo

[root@localhost]# dnf update -y

2️⃣ 기존 환경 변수 설정

환경변수 설정을 위해 아래 작업을 수행합니다.

[root@localhost]# echo ” ” >> /etc/profile
[root@localhost]# echo “####default PATH#####” >> /etc/profile
[root@localhost]# echo “export PATH=/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin” >> /etc/profile [root@
localhost ]# echo “####################” >> /etc/profile

[root@localhost]# echo “” >> /etc/bashrc
[root@localhost]# echo “alias vi=’vim'”>> /etc/bashrc
[root@localhost]# echo “” >> /etc/ bashrc

3️⃣ 필요 패키지 설치

필요 패키지를 설치하기 위해 아래 작업을 수행합니다.

[root@localhost]# dnf install -y libdb-devel libxslt libxslt-devel net-snmp-devel readline-devel readline unixODBC unixODBC-devel libicu-devel icu libicu libc-client libc-client-devel libc-client-2007f freetype-devel freetype libXpm libXpm-devel libpng-devel libvpx libcurl libcurl-devel libzip environment-modules uw-imap-utils uw-imap-devel uw-imap uw-imap-static pam-devel libldb-devel bzip2-devel bzip2 bzip2-libs ncurses-libs ncurses-devel ncurses mysql-devel libjpeg-devel openssl openssl-devel openssl-libs libxml2 libxml2-devel libmcrypt libmcrypt-devel mhash mhash-devel libmhash libmhash-devel expat-devel expat gmp gmp-devel krb5-devel wget make cmake gdbm gdbm-devel libtiff libtiff-devel flex zlib-devel zlib gd gd-devel patch t1lib t1lib-devel libtidy libtidy-devel gcc gcc-c++ libtermcap-devel dialog sqlite-devel oniguruma mod_ssl postgresql-devel lcov systemtap-sdt-devel elfutils-devel libwebp-devel libwebp git gzip automake binutils gettext libaio libaio-devel perl redhat-rpm-config rpm-build rpm-sign cyrus-sasl cyrus-sasl-devel curl curl-devel libtirpc-devel libudev-devel libpng* freetype* krb5* libtool* gcc* pcre* gdbm* libtiff* libmcrypt* mhash* curl* zlib* libjpeg* expat* gmp* nghttp2 libnghttp2-devel glibc autoconf libtirpc* rpcgen numactl numactl-devel ncurses-compat-libs libevent-devel liblz4* libzmq* msgpack* gnutls-devel gnutls-utils gnutls* lz4* libxml2* java-1.8.0* zeromq zeromq-devel bison-devel bison bison* jemalloc* boost boost-devel zstd snappy snappy-devel Judy libzstd* libxml* enchant enchant-devel enchant2 enchant2-devel hash* libhash* mingw32-win-iconv mingw32* krb5* openldap* oniguruma* libedit* recode* json-devel mod_session net-snmp* xmlrpc* libzip* aspell-devel ImageMagick ImageMagick-devel libffi libffi-devel vim glibc-langpack-en glibc-langpack-ko zlib* patchelf gperftools-devel libssh-devel doxygen libvpx-devel valgrind-devel unzip perl-Net-CIDR-Lite perl-Text-CSV_XS perl-NetAddr-IP

 

2) Rocky Linux 8 iptables, xtables-addons 설치


Redhat 8 계열부터는 xtables-addons 부분에 대한 패키지들이 제공되므로  소스파일 tar 부분을 별도로 배포 설치할 필요가 없습니다.

1️⃣ iptables 와 xtables-addons 설치

[root@localhost]# dnf install -y iptables-services iptables-devel xtables-addons*

[root@localhost]# mkdir /usr/local/src/geoip

[root@localhost]# cd /usr/local/src/

[root@localhost]# git clone https://github.com/mschmitt/GeoLite2xtables

[root@localhost]# cd GeoLite2xtables/

[root@localhost]# cp -arp geolite2.license.example geolite2.license

[root@localhost]# vi geolite2.license

위 작업 수행 후 라이센스 키를 입력하고 작업을 계속 진행합니다.

 

[root@localhost]# cd ..

[root@localhost]# ./GeoLite2xtables/00_download_geolite2

[root@localhost]# ./GeoLite2xtables/10_download_countryinfo

[root@localhost]# cpan Net::CIDR::Lite

[위 작업 수행 후 출력 화면]

GeoIP Cpan 적용

2️⃣ GeoIP 표준화 csv 생성

GeoIP 표준화 csv 생성을 위해 아래 작업을 순차적으로 수행합니다.

[root@localhost]# cat /tmp/GeoLite2-Country-Blocks-IPv4.csv /tmp/GeoLite2-Country-Blocks-IPv6.csv | ./GeoLite2xtables/20_convert_geolite2 /tmp/CountryInfo.txt > GeoIP-legacy.csv

[위 작업 수행 후 출력화면]

GeoIP대역나열

아래 작업을 계속 진행합니다.

[root@localhost]# mv /usr/local/src/GeoIP-legacy.csv /usr/local/src/geoip

[root@localhost]# cd /usr/local/src/geoip

[root@localhost]# /usr/libexec/xtables-addons/xt_geoip_dl

[root@localhost]# /usr/libexec/xtables-addons/xt_geoip_build GeoIP-legacy.csv

[위 작업 수행 후 출력화면]

GeoIP 국가별 분류

[root@localhost]# mkdir /usr/share/xt_geoip/

[root@localhost]# mv ./*.iv4 /usr/share/xt_geoip/

[root@localhost]# mv ./*.iv6 /usr/share/xt_geoip/

[root@localhost]# systemctl start iptables

 

3) iptables geoip 활용하기


아래의 방법을 참고하여 특정국가 IP를 차단하는 방법을 숙지해 보시기 바랍니다. 

    👉국가별 국가코드 참고 사이트 바로가기

GeoIP 차단하기

💡 본 포스트는 차단 결과 확인를 위해 한국IP를 차단하는 방법으로 테스트 하였습니다.

현재 방화벽 정책을 확인하기 위해 아래 작업을 수행합니다. 

[root@localhost]# iptables -nL

[위 작업 수행 후 출력 화면]방화벽 적용전

방화벽에 KR 한국 대역 80포트 차단하기 위해 아래 작업을 수행합니다.

[root@localhost]# iptables -I INPUT -m geoip –src-cc KR -p tcp -m state –state NEW -m tcp –dport 80 -j DROP

[root@localhost]# iptables -nL

[위 작업 수행 후 출력 화면]

KR 80포트 차단 적용

위 작업이 적용 되었는지  확인하기 위해 web서버를 설치해서 한국 대역으로 접속을 시도하여 결과를  확인합니다. 

[root@localhost]# dnf install -y httpd*

[root@localhost]# systemctl start httpd

위 작업을 수행하여 access_log 와 접속하고 있는 IP의 정보를 확인할 수 있으며

아래 결과와 같이 Web 서버에서 access_log 와 접속하고 있는 IP가 Whois kisa 조회시 KT 한국망임을 알 수 있습니다.

[IP정보 출력내용]

GeoIP 한국망에서웹서버접속

웹브라우저에서 통신이 되지 않아  access_log가 더 이상 생성되지 않는 것을 아래와 같이 확인할 수 있습니다. 

 [ERR_CONNECTION_TIMED_OUT 부분 화면]

GeoIP 한국망차단후웹접속

 

💡 유의사항

방화벽을 재시작 할 경우 앞서 수행한 설정이 모두 삭제 되므로 현재 iptables 방화벽설정 파일을 해당 서버에 저장합니다. 명령어는 아래와 같습니다.

[root@localhost]# iptables-save > /etc/sysconfig/iptables
 
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x