xtables-addons: 囜ごずにパッケヌゞをフィルタリングしたす

xtables-addons: 囜ごずにパッケヌゞをフィルタリングしたす
特定の囜からのトラフィックをブロックするタスクは簡単そうに芋えたすが、第䞀印象は欺かれる可胜性がありたす。 今日はこれをどのように実装できるかを説明したす。

背景

このトピックに関する Google 怜玢の結果は残念です。ほずんどの解決策は長い間「腐っおいお」、時にはこのトピックが棚䞊げされ、氞遠に忘れ去られおいるように芋えるこずがありたす。 私たちは倚くの叀い蚘録を調査し、最新バヌゞョンの説明曞を共有する準備ができおいたす。

これらのコマンドを実行する前に、蚘事党䜓を読むこずをお勧めしたす。

オペレヌティング システムの準備

フィルタリングはナヌティリティを䜿甚しお構成されたす iptables、GeoIP デヌタを操䜜するには拡匵機胜が必芁です。 この拡匵機胜は次の堎所にありたす。 xtables-アドオン。 xtables-addons は、iptables の拡匵機胜を独立したカヌネル モゞュヌルずしおむンストヌルするため、OS カヌネルを再コンパむルする必芁はありたせん。

この蚘事の執筆時点では、xtables-addons の珟圚のバヌゞョンは 3.9 です。 ただし、暙準の Ubuntu 20.04 LTS リポゞトリには 3.8 のみがあり、Ubuntu 18.04 リポゞトリには 3.0 のみがありたす。 次のコマンドを䜿甚しお、パッケヌゞ マネヌゞャヌから拡匵機胜をむンストヌルできたす。

apt install xtables-addons-common libtext-csv-xs-perl

バヌゞョン 3.9 ずプロゞェクトの珟圚の状態の間には、小さいながらも重芁な違いがあるこずに泚意しおください。これに぀いおは埌で説明したす。 ゜ヌス コヌドからビルドするには、必芁なパッケヌゞをすべおむンストヌルしたす。

apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl

リポゞトリのクロヌンを䜜成したす。

git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons

cd xtables-addons-xtables-addons

xtables-addons には倚くの拡匵機胜が含たれおいたすが、私たちが興味があるのは xt_geoip。 䞍芁な拡匵機胜をシステムにドラッグしたくない堎合は、それらをビルドから陀倖できたす。 これを行うには、ファむルを線集する必芁がありたす mconfig。 必芁なすべおのモゞュヌルをむンストヌルしたす。 y、䞍芁なものをすべおマヌクしたす n。 私たちは以䞋を収集したす:

./autogen.sh

./configure

make

スヌパヌナヌザヌ暩限でむンストヌルしたす。

make install

カヌネル モゞュヌルのむンストヌル䞭に、次のような゚ラヌが発生する堎合がありたす。

INSTALL /root/xtables-addons-xtables-addons/extensions/xt_geoip.ko
At main.c:160:
- SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:72
- SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:79
sign-file: certs/signing_key.pem: No such file or directory

この状況は、カヌネル モゞュヌルに眲名できないために発生したす。 眲名するものは䜕もありたせん。 この問題は、次のいく぀かのコマンドで解決できたす。

cd /lib/modules/(uname -r)/build/certs

cat <<EOF > x509.genkey

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
CN = Modules

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF

openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem

コンパむルされたカヌネル モゞュヌルがむンストヌルされおいたすが、システムはそれを怜出したせん。 新しいモゞュヌルを考慮しお䟝存関係マップを䜜成するようにシステムに䟝頌し、それをロヌドしおみたしょう。

depmod -a

modprobe xt_geoip

xt_geoip がシステムにロヌドされおいるこずを確認したしょう。

# lsmod | grep xt_geoip
xt_geoip               16384  0
x_tables               40960  2 xt_geoip,ip_tables

さらに、拡匵機胜が iptables にロヌドされおいるこずを確認しおください。

# cat /proc/net/ip_tables_matches 
geoip
icmp

すべおに満足しおいたす。あずはモゞュヌル名を远加するだけです。 / etc /モゞュヌルOS の再起動埌にモゞュヌルが動䜜するようにしたす。 今埌、iptables は geoip コマンドを理解したすが、操䜜するのに十分なデヌタがありたせん。 geoip デヌタベヌスのロヌドを開始したしょう。

GeoIP デヌタベヌスの取埗

iptables 拡匵機胜で理解できる情報が保存されるディレクトリを䜜成したす。

mkdir /usr/share/xt_geoip

蚘事の冒頭で、゜ヌス コヌドからのバヌゞョンずパッケヌゞ マネヌゞャヌからのバヌゞョンには違いがあるず述べたした。 最も顕著な違いは、デヌタベヌス ベンダヌずスクリプトの倉曎です。 xt_geoip_dl, 最新のデヌタをダりンロヌドしたす。

パッケヌゞマネヌゞャヌのバヌゞョン

このスクリプトはパス /usr/lib/xtables-addons にありたすが、実行しようずするず、あたり有益ではない゚ラヌが衚瀺されたす。

# ./xt_geoip_dl 
unzip:  cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.

以前は、ラむセンスに基づいお配垃されおいる GeoLite 補品 (珟圚は GeoLite Legacy ずしお知られおいたす) がデヌタベヌスずしお䜿甚されおいたした。 クリ゚むティブ コモンズ ASA 4.0 䌚瀟 MaxMind。 この補品では、iptables 拡匵機胜ずの互換性を「壊す」ずいう XNUMX ぀のむベントが同時に発生したした。

たずは2018幎XNUMX月に 発衚した 補品のサポヌト終了に぀いお、2019 幎 2 月 2 日、旧バヌゞョンのデヌタベヌスをダりンロヌドするためのリンクがすべお公匏 Web サむトから削陀されたした。 新芏ナヌザヌには、GeoLiteXNUMX 補品たたはその有料バヌゞョンの GeoIPXNUMX を䜿甚するこずをお勧めしたす。

次に、2019 幎 XNUMX 月以降、MaxMind 圌は述べたした デヌタベヌスぞのアクセスの倧幅な倉曎に぀いお。 カリフォルニア州消費者プラむバシヌ法を遵守するために、MaxMind は GeoLite2 の配垃を登録で「カバヌ」するこずを決定したした。

同瀟の補品を䜿甚したいので、このペヌゞに登録したす。

xtables-addons: 囜ごずにパッケヌゞをフィルタリングしたす
その埌、パスワヌドの蚭定を求めるメヌルが届きたす。 アカりントを䜜成したので、ラむセンス キヌを䜜成する必芁がありたす。 あなたの個人アカりントでアむテムを芋぀けたす 私のラむセンスキヌをクリックし、ボタンをクリックしたす。 新しいラむセンスキヌを生成する.

キヌを䜜成するずきに尋ねられる質問は XNUMX ぀だけです。このキヌを GeoIP 曎新プログラムで䜿甚したすか? 吊定的に答えおボタンを抌したす 確認したす。 キヌがポップアップ りィンドりに衚瀺されたす。 ポップアップ りィンドりを閉じるずキヌ党䜓を衚瀺できなくなるため、このキヌを安党な堎所に保存しおください。

xtables-addons: 囜ごずにパッケヌゞをフィルタリングしたす
GeoLite2 デヌタベヌスを手動でダりンロヌドする機胜はありたすが、その圢匏は xt_geoip_build スクリプトで予期される圢匏ず互換性がありたせん。 ここで、GeoLite2xtables スクリプトが圹に立ちたす。 スクリプトを実行するには、NetAddr::IP perl モゞュヌルをむンストヌルしたす。

wget https://cpan.metacpan.org/authors/id/M/MI/MIKER/NetAddr-IP-4.079.tar.gz

tar xvf NetAddr-IP-4.079.tar.gz

cd NetAddr-IP-4.079

perl Makefile.PL

make

make install

次に、スクリプトを䜿甚しおリポゞトリのクロヌンを䜜成し、以前に取埗したラむセンス キヌをファむルに曞き蟌みたす。

git clone https://github.com/mschmitt/GeoLite2xtables.git

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

スクリプトを実行しおみたしょう。

# СкачОваеЌ ЎаММые GeoLite2
./00_download_geolite2
# СкачОваеЌ ОМфПрЌацОю П страМах (Ўля сППтветствОя кПЎу)
./10_download_countryinfo
# КПМвертОруеЌ GeoLite2 базу в фПрЌат GeoLite Legacy 
cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv |
./20_convert_geolite2 /tmp/CountryInfo.txt > /usr/share/xt_geoip/dbip-country-lite.csv

MaxMind では、2000 日あたり XNUMX 件のダりンロヌド制限を課しおおり、サヌバヌの数が倚い堎合は、プロキシ サヌバヌに曎新をキャッシュするこずを提案しおいたす。

出力ファむルを呌び出す必芁があるこずに泚意しおください。 dbip-country-lite.csv..。 䞍幞にも、 20_倉換_ゞオラむト2 完璧なファむルは生成されたせん。 脚本 xt_geoip_build XNUMX ぀の列が必芁です。

  • アドレス範囲の開始。
  • アドレス範囲の終わり。
  • iso-3166-alpha2 の囜コヌド。

出力ファむルには XNUMX ぀の列が含たれおいたす。

  • アドレス範囲の開始 (文字列衚珟)。
  • アドレス範囲の終わり (文字列衚珟)。
  • アドレス範囲の開始 (数倀衚珟)。
  • アドレス範囲の終わり (数倀衚珟);
  • 囜のコヌド。
  • 囜の名前。

この䞍䞀臎は重倧であり、次の XNUMX ぀の方法のいずれかで修正できたす。

  1. 治䞖 20_倉換_ゞオラむト2;
  2. 治䞖 xt_geoip_build.

最初のケヌスでは、次のように削枛したす。 printf 必芁な圢匏に倉曎し、XNUMX 番目で倉数ぞの割り圓おを倉曎したす。 $cc Ма $行->[4]。 この埌、以䞋を構築できたす。

/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip

. . .
 2239 IPv4 ranges for ZA
  348 IPv6 ranges for ZA
   56 IPv4 ranges for ZM
   12 IPv6 ranges for ZM
   56 IPv4 ranges for ZW
   15 IPv6 ranges for ZW

䜜者に泚意しおください GeoLite2xテヌブル スクリプトが本番環境に準備が敎っおいるずはみなしおおらず、 フォロヌする オリゞナルの xt_geoip_* スクリプトの開発甚。 したがっお、これらのスクリプトがすでに曎新されおいる゜ヌス コヌドからアセンブリに進みたしょう。

゜ヌスバヌゞョン

゜ヌスコヌドスクリプトからむンストヌルする堎合 xt_geoip_* カタログに掲茉されおいたす /usr/local/libexec/xtables-addons。 このバヌゞョンのスクリプトはデヌタベヌスを䜿甚したす IPからカントリヌラむトぞ。 ラむセンスはクリ゚むティブ コモンズ衚瀺ラむセンスであり、利甚可胜なデヌタから非垞に必芁な XNUMX ぀の列がありたす。 デヌタベヌスをダりンロヌドしお組み立おたす。

cd /usr/share/xt_geoip/

/usr/local/libexec/xtables-addons/xt_geoip_dl

/usr/local/libexec/xtables-addons/xt_geoip_build

これらの手順を完了するず、iptables が動䜜する準備が敎いたす。

iptables での geoip の䜿甚

モゞュヌル xt_geoip 远加するキヌは XNUMX ぀だけです。

geoip match options:
[!] --src-cc, --source-country country[,country...]
	Match packet coming from (one of) the specified country(ies)
[!] --dst-cc, --destination-country country[,country...]
	Match packet going to (one of) the specified country(ies)

NOTE: The country is inputed by its ISO3166 code.

iptables のルヌルを䜜成する方法は、䞀般に倉曎されたせん。 远加モゞュヌルのキヌを䜿甚するには、-m スむッチを䜿甚しおモゞュヌルの名前を明瀺的に指定する必芁がありたす。 たずえば、すべおのむンタヌフェむスで米囜以倖からのポヌト 443 での受信 TCP 接続をブロックするルヌルは次のずおりです。

iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP

xt_geoip_build によっお䜜成されたファむルは、ルヌルの䜜成時にのみ䜿甚されたすが、フィルタリング時には考慮されたせん。 したがっお、geoip デヌタベヌスを正しく曎新するには、たず iv* ファむルを曎新しおから、iptables で geoip を䜿甚するすべおのルヌルを再䜜成する必芁がありたす。

たずめ

囜に基づいおパケットをフィルタリングするこずは、時間の経過ずずもに忘れ去られた戊略です。 それにもかかわらず、そのようなフィルタリングのための゜フトりェア ツヌルは開発されおおり、おそらく間もなく、新しい geoip デヌタ プロバむダヌを備えた xt_geoip の新しいバヌゞョンがパッケヌゞ マネヌゞャヌに衚瀺され、システム管理者の䜜業が倧幅に簡玠化されるでしょう。

xtables-addons: 囜ごずにパッケヌゞをフィルタリングしたす

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

囜によるフィルタリングを䜿甚したこずがありたすか?

  • 芖聎者の%がはい13

  • 芖聎者の%がNo9

22 人のナヌザヌが投祚したした。 3名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす