xtables-addons: φιλτράρετε πακέτα ανά χώρα

xtables-addons: φιλτράρετε πακέτα ανά χώρα
Το έργο του αποκλεισμού της κυκλοφορίας από ορισμένες χώρες φαίνεται απλό, αλλά οι πρώτες εντυπώσεις μπορεί να είναι απατηλές. Σήμερα θα σας πούμε πώς μπορεί να εφαρμοστεί αυτό.

Ιστορικό

Τα αποτελέσματα μιας αναζήτησης στο Google σχετικά με αυτό το θέμα είναι απογοητευτικά: οι περισσότερες από τις λύσεις είναι εδώ και καιρό «σάπιες» και μερικές φορές φαίνεται ότι αυτό το θέμα έχει μείνει στο ράφι και ξεχασμένο για πάντα. Έχουμε χτενίσει πολλούς παλιούς δίσκους και είμαστε έτοιμοι να μοιραστούμε μια σύγχρονη εκδοχή των οδηγιών.

Σας συνιστούμε να διαβάσετε ολόκληρο το άρθρο πριν εκτελέσετε αυτές τις εντολές.

Προετοιμασία λειτουργικού συστήματος

Το φιλτράρισμα θα ρυθμιστεί χρησιμοποιώντας το βοηθητικό πρόγραμμα iptables, το οποίο απαιτεί επέκταση για να λειτουργήσει με δεδομένα GeoIP. Αυτή η επέκταση βρίσκεται στο xtables-addons. Το xtables-addons εγκαθιστά επεκτάσεις για iptables ως ανεξάρτητες λειτουργικές μονάδες πυρήνα, επομένως δεν χρειάζεται να γίνει εκ νέου μεταγλώττιση του πυρήνα του λειτουργικού συστήματος.

Τη στιγμή της γραφής, η τρέχουσα έκδοση των xtables-addons είναι 3.9. Ωστόσο, μόνο 20.04 μπορεί να βρεθεί στα τυπικά αποθετήρια Ubuntu 3.8 LTS και 18.04 στα αποθετήρια Ubuntu 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. Εάν δεν θέλετε να σύρετε περιττές επεκτάσεις στο σύστημα, μπορείτε να τις εξαιρέσετε από το build. Για να γίνει αυτό πρέπει να επεξεργαστείτε το αρχείο 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 / modulesέτσι ώστε η μονάδα να λειτουργεί μετά την επανεκκίνηση του λειτουργικού συστήματος. Από εδώ και πέρα, το 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, που διανέμεται κατόπιν άδειας, χρησιμοποιήθηκε ως βάση δεδομένων Creative Commons ASA 4.0 компаний MaxMind. Δύο γεγονότα συνέβησαν με αυτό το προϊόν ταυτόχρονα που «έσπασαν» τη συμβατότητα με την επέκταση iptables.

Πρώτον, τον Ιανουάριο του 2018 ανακοίνωσε σχετικά με τον τερματισμό της υποστήριξης για το προϊόν και στις 2019 Ιανουαρίου 2, όλοι οι σύνδεσμοι για τη λήψη της παλιάς έκδοσης της βάσης δεδομένων αφαιρέθηκαν από τον επίσημο ιστότοπο. Συνιστάται στους νέους χρήστες να χρησιμοποιούν το προϊόν GeoLite2 ή την επί πληρωμή έκδοση GeoIPXNUMX.

Δεύτερον, από τον Δεκέμβριο του 2019 MaxMind δήλωσε για μια σημαντική αλλαγή στην πρόσβαση στις βάσεις δεδομένων τους. Για να συμμορφωθεί με τον νόμο περί απορρήτου των καταναλωτών της Καλιφόρνια, η MaxMind αποφάσισε να «καλύψει» τη διανομή του GeoLite2 με εγγραφή.

Εφόσον θέλουμε να χρησιμοποιήσουμε το προϊόν τους, θα εγγραφούμε σε αυτή τη σελίδα.

xtables-addons: φιλτράρετε πακέτα ανά χώρα
Στη συνέχεια θα λάβετε ένα email που θα σας ζητά να ορίσετε έναν κωδικό πρόσβασης. Τώρα που δημιουργήσαμε έναν λογαριασμό, πρέπει να δημιουργήσουμε ένα κλειδί άδειας χρήσης. Στον προσωπικό σας λογαριασμό βρίσκουμε το αντικείμενο Τα κλειδιά άδειας χρήσης μου, και μετά κάντε κλικ στο κουμπί Δημιουργία νέου κλειδιού άδειας χρήσης.

Κατά τη δημιουργία ενός κλειδιού, θα μας τεθεί μόνο μία ερώτηση: θα χρησιμοποιήσουμε αυτό το κλειδί στο πρόγραμμα GeoIP Update; Απαντάμε αρνητικά και πατάμε το κουμπί Επιβεβαιώνω. Το κλειδί θα εμφανιστεί σε ένα αναδυόμενο παράθυρο. Αποθηκεύστε αυτό το κλειδί σε ασφαλές μέρος, καθώς μόλις κλείσετε το αναδυόμενο παράθυρο, δεν θα μπορείτε πλέον να προβάλετε ολόκληρο το κλειδί.

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 λήψεων ανά ημέρα και, με μεγάλο αριθμό διακομιστών, προσφέρει την προσωρινή αποθήκευση της ενημέρωσης σε διακομιστή μεσολάβησης.

Σημειώστε ότι το αρχείο εξόδου πρέπει να κληθεί dbip-country-lite.csv... Δυστυχώς, 20_convert_geolite2 δεν παράγει τέλειο αρχείο. Γραφή xt_geoip_build αναμένει τρεις στήλες:

  • έναρξη του εύρους διευθύνσεων.
  • τέλος του εύρους διευθύνσεων.
  • κωδικός χώρας σε iso-3166-alpha2.

Και το αρχείο εξόδου περιέχει έξι στήλες:

  • έναρξη του εύρους διευθύνσεων (αναπαράσταση συμβολοσειράς).
  • τέλος του εύρους διευθύνσεων (αναπαράσταση συμβολοσειράς).
  • έναρξη του εύρους διευθύνσεων (αριθμητική αναπαράσταση).
  • τέλος του εύρους διευθύνσεων (αριθμητική αναπαράσταση).
  • κωδικός της χώρας·
  • το όνομα της χώρας.

Αυτή η απόκλιση είναι κρίσιμη και μπορεί να διορθωθεί με έναν από τους δύο τρόπους:

  1. επεξεργασία 20_convert_geolite2;
  2. επεξεργασία xt_geoip_build.

Στην πρώτη περίπτωση μειώνουμε Printf στην απαιτούμενη μορφή και στη δεύτερη - αλλάζουμε την ανάθεση στη μεταβλητή $cc επί $row->[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

Σημειώστε ότι ο συγγραφέας GeoLite2xtables δεν θεωρεί τα σενάρια της έτοιμα για παραγωγή και προσφορές ακολουθήστε για την ανάπτυξη πρωτότυπων σεναρίων xt_geoip_*. Επομένως, ας προχωρήσουμε στη συναρμολόγηση από πηγαίους κώδικες, στους οποίους αυτά τα σενάρια έχουν ήδη ενημερωθεί.

Έκδοση πηγής

Κατά την εγκατάσταση από σενάρια πηγαίου κώδικα xt_geoip_* βρίσκονται στον κατάλογο /usr/local/libexec/xtables-addons. Αυτή η έκδοση του σεναρίου χρησιμοποιεί μια βάση δεδομένων IP στο Country Lite. Η άδεια είναι Creative Commons Attribution License, και από τα διαθέσιμα δεδομένα υπάρχουν οι πολύ απαραίτητες τρεις στήλες. Κάντε λήψη και συναρμολόγηση της βάσης δεδομένων:

cd /usr/share/xt_geoip/

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

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

Μετά από αυτά τα βήματα, το iptables είναι έτοιμο να λειτουργήσει.

Χρήση geoip σε iptables

Ενότητα xt_geoip προσθέτει μόνο δύο κλειδιά:

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. Για παράδειγμα, ένας κανόνας για τον αποκλεισμό εισερχόμενων συνδέσεων TCP στη θύρα 443 όχι από τις ΗΠΑ σε όλες τις διεπαφές:

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

Τα αρχεία που δημιουργούνται από το xt_geoip_build χρησιμοποιούνται μόνο κατά τη δημιουργία κανόνων, αλλά δεν λαμβάνονται υπόψη κατά το φιλτράρισμα. Έτσι, για να ενημερώσετε σωστά τη βάση δεδομένων geoip, πρέπει πρώτα να ενημερώσετε τα αρχεία iv* και, στη συνέχεια, να δημιουργήσετε ξανά όλους τους κανόνες που χρησιμοποιούν το geoip στα iptables.

Συμπέρασμα

Το φιλτράρισμα πακέτων με βάση τις χώρες είναι μια στρατηγική που κάπως ξεχασμένη από το χρόνο. Παρόλα αυτά, αναπτύσσονται εργαλεία λογισμικού για τέτοιου είδους φιλτράρισμα και, ίσως, σύντομα μια νέα έκδοση του xt_geoip με έναν νέο πάροχο δεδομένων geoip θα εμφανιστεί στους διαχειριστές πακέτων, γεγονός που θα απλοποιήσει σημαντικά τη ζωή των διαχειριστών συστήματος.

xtables-addons: φιλτράρετε πακέτα ανά χώρα

Μόνο εγγεγραμμένοι χρήστες μπορούν να συμμετάσχουν στην έρευνα. Συνδεθείτε, Σας παρακαλούμε.

Έχετε χρησιμοποιήσει ποτέ φιλτράρισμα ανά χώρα;

  • 59,1%Ναι 13

  • 40,9%Νο9

Ψήφισαν 22 χρήστες. 3 χρήστες απείχαν.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο