맛집 여행 캠핑 일상 생활

[Linux] CentOS 7.x xtables-addons 설치 방법 본문

LINUX

[Linux] CentOS 7.x xtables-addons 설치 방법

영은파더♥ 2025. 4. 4. 16:36
728x90

CentOS 7.x 버전에서는 Rocky 리눅스와 달리 yum install 로 설치를 지원하는 않는군요~

yum install make gcc iptables-devel perl-Text-CSV_XS perl-App-cpanminus
cpanm NetAddr::IP
cpanm Getopt::Long
wget mirror.koreaidc.com/iptables/xtables-addons-2.10.tar.gz
tar xvfz xtables-addons-2.10.tar.gz
cd xtables-addons-2.10
sed -i '/build_TARPIT=m/ s/^/#/' mconfig
./configure
make && make install
mkdir /usr/share/xt_geoip
cd geoip
./00_download_geolite2
# https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip 다운로드가 안됩니다.
# 가입을 하면 될것 같은데 그냥 패스합니다.
./10_download_countryinfo
# countryinfo 파일이라도 다운로드 합니다.
cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv | ./20_convert_geolite2 /tmp/CountryInfo.txt > GeoIP-legacy.csv
# 위의 00_download_geolite2 에 다운로드가 되어야 위 명령어가 실행이 됩니다. 다른 방법으로 시도하겠습니다.
# Rocky 9 리눅스에서 사용하는 방법인 db-ip.com 에서 csv 파일을 다운로드 받습니다.
cd /usr/share/xt_geoip/
wget -O dbip-country-lite.csv.gz https://download.db-ip.com/free/dbip-country-lite-$(date '+%Y-%m').csv.gz
gzip -d dbip-country-lite.csv.gz
maxmind 와 db-ip csv 파일이 포맷이 달라서 원하는 포맷으로 변환해야 합니다.
# vi /root/xtables-addons-2.10/geoip/dbip_convert_geolite2 (아래 코드를 저장합니다.)
# chmod 700 dbip_convert_geolite2

#!/usr/bin/perl -w
use strict;
use diagnostics;
use NetAddr::IP;
use Getopt::Long;

my $quiet = 0;
GetOptions(
    'quiet' => \$quiet,
    ) or die("bad args");

unless(-s "$ARGV[0]"){
        print STDERR "Specify Country DB to use on the command line.\n";
        exit 1;
}

my $countryinfo;
$countryinfo->{'ZZ'}->{'code'} = 'ZZ';
$countryinfo->{'ZZ'}->{'name'} = 'ZZ private';

# Read the countryinfo file
open my $fh_in, "<", "$ARGV[0]" or die "Can't open $ARGV[0]: $!\n";
foreach my $line (<$fh_in>){
        chomp $line;
        next if ($line =~ /^#/);
        my @fields = (split "\t", $line);
        my $code = $fields[0];
        my $name = $fields[4];
        my $id   = $fields[0];
        $countryinfo->{$id}->{'code'} = $code;
        $countryinfo->{$id}->{'name'} = $name;
}
close $fh_in;

# Convert actual GeoLite2 data from STDIN
my $counter;
foreach my $line (<STDIN>){
        next unless ($line =~ /^\d/);
        chomp $line;
        $counter++;
        my @fields = (split ",", $line);
        my $country_id = $fields[2];
        my $start_ip = $fields[0];
        my $end_ip = $fields[1];
        my $start_int = NetAddr::IP->new($fields[0])->bigint();
        my $end_int = NetAddr::IP->new($fields[1])->bigint();
        my $code;
        my $name;
        if($countryinfo->{$country_id}){
                $code = $countryinfo->{$country_id}->{'code'};
                $name = $countryinfo->{$country_id}->{'name'};
        }else{
                print STDERR "ID: $country_id\n";
                exit 1;
        }

        printf "\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"\n",
                $start_ip, $end_ip, $start_int, $end_int, $code, $name;
        if (!$quiet && $counter % 10000 == 0) {
                print STDERR "$counter\n";
        }
}

# csv 파일이 포맷이 달라 20_convert_geolite2 가 안먹히기 때문에 응용해서 변환코드를 만들어봤습니다.

cat dbip-country-lite.csv | /root/xtables-addons-2.10/geoip/dbip_convert_geolite2 /tmp/CountryInfo.txt > Geoip-dbip-legacy.csv
/root/xtables-addons-2.10/geoip/xt_geoip_build -D /usr/share/xt_geoip/ Geoip-dbip-legacy.csv
이제 변환이 잘 될겁니다.

dbip_convert_geolie2.txt
0.00MB

위 변환코드 파일을 다운로드 받아도 됩니다.

 

728x90
반응형
Trackback : | Comments :