Rockylinux
8.x 에서는 iptables geoip module 을 제공하고 있지 않고 있어 설치 방법을 기록한다.
Rockylinux 에서 iptables 외 firewalld, nftables 를 제공하고 있지만, 개인적으로 가장 익숙한 iptables에 geoip를 적용하는 방법을 알아보도록 한다.
iptables geoip module Install
dnf 레포지토리 추가
앞서 말한것처럼 Rockylinux 기본 레포지토리에서는 페키지를 제공하고 있지 않아 epel
과 rpmfusion
레포지토리를 추가해준다.
rpmfusion은 RHEL 계열 배포판에서 제공되지 않는 추가 패키지를 제공하는 저장소이다. 비상업적 패키지를 제공하는 rpmfusion-free 와 라이선스 제한이 있는 rpmfusion-nonfree 저장소를 제공해준다. 보다 자세한 내용은 https://rpmfusion.org/ 내용 확인을 해보자.
# epel 레포지토리 설치
sudo dnf install epel-release
# rpmfusion 레포지토리 추가
sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm
# powertools 레포지토리 활성화
sudo dnf config-manager --enable powertools
iptables 확장 모듈 설치
xtables-addons
는 geoip 외 추가 기능이 있다.
xt_geoip
: IP 주소의 지리적 위치를 확인하는 기능xt_quota2
: 사용자 또는 그룹의 네트워크 사용량을 제한하는 기능xt_recent
: 최근에 연결한 IP 주소를 추적하고, 일정 시간 동안 연결을 차단하는 기능xt_TARPIT
: TCP 연결을 늦추는 기능xt_osf
: OS Fingerprinting을 수행하여, 네트워크 트래픽을 분석하는 기능
# iptables 확장 모률 설치
## xtables-addons는 xt_geoip,xt_quota2,xt_recent,xt_TARPIT,xt_osf 기능을 제공한다.
sudo dnf install xtables-addons
geoip 적용
xt_geoip_dl
이라는 명령어로 csv 데이터베이스를 다운로드 후 xt_geoip_build
를 사용해서 csv 파일 dat 파일로 변환해준다.
# GeoIP DB 다운로드
sudo /usr/libexec/xtables-addons/xt_geoip_dl
# GeoIP DB 적용(오류시 perl 모듈을 설치 필요)
sudo /usr/libexec/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
xt_geoip_build 오류시
perl 모듈이 설치되어 있지 않았을때. 오류발생을 해결하기 위해선 perl cpanm
을 사용해서 perl 모듈을 설치해준다.
cpanm 은 perl 의 모듈을 설치하는 CPAN의 클라이언트로 모듈 설치시 필요한 의존성을 자동으로 처리해준다.
# 오류 메시지
Can't locate Net/CIDR/Lite.pm in @INC (you may need to install the Net::CIDR::Lite module) (@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 /usr/libexec/xtables-addons/xt_geoip_build line 9.
BEGIN failed--compilation aborted at /usr/libexec/xtables-addons/xt_geoip_build line 9.
Can't locate Text/CSV_XS.pm in @INC (you may need to install the Text::CSV_XS module) (@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 /usr/libexec/xtables-addons/xt_geoip_build line 12.
BEGIN failed--compilation aborted at /usr/libexec/xtables-addons/xt_geoip_build line 12.
# xt_geoip_build 사용을 위해 perl 모듈 설치
# perl cpanm 설치
sudo dnf install perl-App-cpanminus
# perl module 설치
sudo cpanm Net::CIDR::Lite
sudo cpanm Text::CSV_XS
iptables 에서 사용하는 방법
# iptables GeoIP 적용예시
sudo iptables -A SSHD -p tcp --dport 22 -m geoip --src-cc KR -j ACCEPT