“GeoIP 적용하기 : Rocky Linux 8”
GeoIP : MaxMind에서 제공하는 솔루션으로, 서버에 접근하는 IP를 국가별로 확인할수 있는 기능을 제공합니다. GeoIP를 설치하여 서버에 접근 하는 IP를 국가별로 제한하거나 허용 할 수 있습니다.
이 포스팅에서는 Rocky Linux 8 (Redhat 8)계열 이상에서 GeoIP를 적용하는 방법을 설명합니다.
[개 요]종 류 : 엔지니어링 |
[기초이론&용어설명] |
[관련 기술자료] |
“시작하며”
이 포스트는 GeoIP 를 Rocky Linux 8 (Redhat 8) 계열 이상에서 적용 방법 과 활용사례에 대해 아래 순서로 설명합니다.
1. Rocky Linux8 기본환경 설치 2.Rocky Linux8 iptables, xtables-addons 설치 3.iptables geoip 실제 활용 |
- CentOS 7 에서 GeoIP 를 적용하기 글을 참고하여 maxmind 가입까지 진행 후 , 아래 절차대로 수행하시기 바랍니다.
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 |
저장소 추가 및 활성화
저장소를 추가하고 활성화 하기 위해 아래의 작업을 수행합니다.
[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 |
기존 환경 변수 설정
환경변수 설정을 위해 아래 작업을 수행합니다.
[root@localhost]# echo ” ” >> /etc/profile [root@localhost]# echo “” >> /etc/bashrc |
필요 패키지 설치
필요 패키지를 설치하기 위해 아래 작업을 수행합니다.
[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 부분을 별도로 배포 설치할 필요가 없습니다.
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 표준화 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 |
[위 작업 수행 후 출력화면]
아래 작업을 계속 진행합니다.
[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 |
[위 작업 수행 후 출력화면]
[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 |
[위 작업 수행 후 출력 화면]
위 작업이 적용 되었는지 확인하기 위해 web서버를 설치해서 한국 대역으로 접속을 시도하여 결과를 확인합니다.
[root@localhost]# dnf install -y httpd* [root@localhost]# systemctl start httpd |
위 작업을 수행하여 access_log 와 접속하고 있는 IP의 정보를 확인할 수 있으며
아래 결과와 같이 Web 서버에서 access_log 와 접속하고 있는 IP가 Whois kisa 조회시 KT 한국망임을 알 수 있습니다.
[IP정보 출력내용]
웹브라우저에서 통신이 되지 않아 access_log가 더 이상 생성되지 않는 것을 아래와 같이 확인할 수 있습니다.
[ERR_CONNECTION_TIMED_OUT 부분 화면]
유의사항 방화벽을 재시작 할 경우 앞서 수행한 설정이 모두 삭제 되므로 현재 iptables 방화벽설정 파일을 해당 서버에 저장합니다. 명령어는 아래와 같습니다.
|