Το έργο του αποκλεισμού της κυκλοφορίας από ορισμένες χώρες φαίνεται απλό, αλλά οι πρώτες εντυπώσεις μπορεί να είναι απατηλές. Σήμερα θα σας πούμε πώς μπορεί να εφαρμοστεί αυτό.
Ιστορικό
Τα αποτελέσματα μιας αναζήτησης στο Google σχετικά με αυτό το θέμα είναι απογοητευτικά: οι περισσότερες από τις λύσεις είναι εδώ και καιρό «σάπιες» και μερικές φορές φαίνεται ότι αυτό το θέμα έχει μείνει στο ράφι και ξεχασμένο για πάντα. Έχουμε χτενίσει πολλούς παλιούς δίσκους και είμαστε έτοιμοι να μοιραστούμε μια σύγχρονη εκδοχή των οδηγιών.
Σας συνιστούμε να διαβάσετε ολόκληρο το άρθρο πριν εκτελέσετε αυτές τις εντολές.
Προετοιμασία λειτουργικού συστήματος
Το φιλτράρισμα θα ρυθμιστεί χρησιμοποιώντας το βοηθητικό πρόγραμμα iptables, το οποίο απαιτεί επέκταση για να λειτουργήσει με δεδομένα GeoIP. Αυτή η επέκταση βρίσκεται στο
Τη στιγμή της γραφής, η τρέχουσα έκδοση των 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, που διανέμεται κατόπιν άδειας, χρησιμοποιήθηκε ως βάση δεδομένων
Πρώτον, τον Ιανουάριο του 2018
Δεύτερον, από τον Δεκέμβριο του 2019 MaxMind
Εφόσον θέλουμε να χρησιμοποιήσουμε το προϊόν τους, θα εγγραφούμε σε αυτή τη σελίδα.
Στη συνέχεια θα λάβετε ένα email που θα σας ζητά να ορίσετε έναν κωδικό πρόσβασης. Τώρα που δημιουργήσαμε έναν λογαριασμό, πρέπει να δημιουργήσουμε ένα κλειδί άδειας χρήσης. Στον προσωπικό σας λογαριασμό βρίσκουμε το αντικείμενο Τα κλειδιά άδειας χρήσης μου, και μετά κάντε κλικ στο κουμπί Δημιουργία νέου κλειδιού άδειας χρήσης.
Κατά τη δημιουργία ενός κλειδιού, θα μας τεθεί μόνο μία ερώτηση: θα χρησιμοποιήσουμε αυτό το κλειδί στο πρόγραμμα GeoIP Update; Απαντάμε αρνητικά και πατάμε το κουμπί Επιβεβαιώνω. Το κλειδί θα εμφανιστεί σε ένα αναδυόμενο παράθυρο. Αποθηκεύστε αυτό το κλειδί σε ασφαλές μέρος, καθώς μόλις κλείσετε το αναδυόμενο παράθυρο, δεν θα μπορείτε πλέον να προβάλετε ολόκληρο το κλειδί.
Έχουμε τη δυνατότητα μη αυτόματης λήψης βάσεων δεδομένων 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.
Και το αρχείο εξόδου περιέχει έξι στήλες:
- έναρξη του εύρους διευθύνσεων (αναπαράσταση συμβολοσειράς).
- τέλος του εύρους διευθύνσεων (αναπαράσταση συμβολοσειράς).
- έναρξη του εύρους διευθύνσεων (αριθμητική αναπαράσταση).
- τέλος του εύρους διευθύνσεων (αριθμητική αναπαράσταση).
- κωδικός της χώρας·
- το όνομα της χώρας.
Αυτή η απόκλιση είναι κρίσιμη και μπορεί να διορθωθεί με έναν από τους δύο τρόπους:
- επεξεργασία 20_convert_geolite2;
- επεξεργασία xt_geoip_build.
Στην πρώτη περίπτωση μειώνουμε
/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
Σημειώστε ότι ο συγγραφέας
Έκδοση πηγής
Κατά την εγκατάσταση από σενάρια πηγαίου κώδικα xt_geoip_* βρίσκονται στον κατάλογο /usr/local/libexec/xtables-addons. Αυτή η έκδοση του σεναρίου χρησιμοποιεί μια βάση δεδομένων
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 θα εμφανιστεί στους διαχειριστές πακέτων, γεγονός που θα απλοποιήσει σημαντικά τη ζωή των διαχειριστών συστήματος.
Μόνο εγγεγραμμένοι χρήστες μπορούν να συμμετάσχουν στην έρευνα.
Έχετε χρησιμοποιήσει ποτέ φιλτράρισμα ανά χώρα;
-
59,1%Ναι 13
-
40,9%Νο9
Ψήφισαν 22 χρήστες. 3 χρήστες απείχαν.
Πηγή: www.habr.com