Мануал по установке и использованию Iptables с GeoIP
Обновляемся:
apt-get update && apt-get upgrade
Устанавливаем необходимые модули:
apt-get install module-assistant module-assistant prepare module-assistant auto-install xtables-addons-source
Создаем каталог для данных GeoIP:
mkdir /usr/share/xt_geoip/ cd /usr/share/xt_geoip/
Скачиваем базу GeoIP:
wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
unzip GeoIPCountryCSV.zip
Создаем скрипт для конвертации из CSV в формат пригодный для iptables:
vi geoip_csv_iv0.pl
#!/usr/bin/perl # # Converter for MaxMind CSV database to binary, for xt_geoip # written by Jan Engelhardt <jengelh@computergmbh.de>, 2009 # This script is released into the Public Domain. # # Use -b argument to create big-endian tables. # use Getopt::Long; use IO::Handle; use Text::CSV_XS; # or trade for Text::CSV use strict; my %country; my %names; my $csv = Text::CSV_XS->new({binary => 0, eol => $/}); # or Text::CSV my $mode = "VV"; &Getopt::Long::Configure(qw(bundling)); &GetOptions("b" => sub { $mode = "NN"; }); while (my $row = $csv->getline(*ARGV)) { if (!defined($country{$row->[4]})) { $country{$row->[4]} = []; $names{$row->[4]} = $row->[5]; } my $c = $country{$row->[4]}; push(@$c, [$row->[2], $row->[3]]); if ($. % 4096 == 0) { print STDERR "\r\e[2K$. entries"; } } print STDERR "\r\e[2K$. entries total\n"; foreach my $iso_code (sort keys %country) { printf "%5u ranges for %s %s\n", scalar(@{$country{$iso_code}}), $iso_code, $names{$iso_code}; open(my $fh, ">".uc($iso_code).".iv0"); foreach my $range (@{$country{$iso_code}}) { print $fh pack($mode, $range->[0], $range->[1]); } close $fh; }
Обрабатываем им CSV файл:
chmod +x geoip_csv_iv0.pl ./geoip_csv_iv0.pl -b GeoIPCountryWhois.csv
После чего в каталоге будет большое кол-во файликов *.iv0
Теперь можно применять правила Iptables с функционалом GeoIP, например заблокируем доступ к 80 порту для всех IP адресов, кроме России, Украины и Белоруссии:
iptables -A INPUT -p tcp --dport 80 -m geoip ! --src-cc RU,UA,BY -j DROP iptables -A INPUT -p udp --dport 80 -m geoip ! --src-cc RU,UA,BY -j DROP
Комментариев нет:
Отправить комментарий