Sécurité

Αποκλείστε οποιαδήποτε χώρα στο τείχος προστασίας του διακομιστή σας με iptables ή nftables

Όταν έχουμε έναν διακομιστή εκτεθειμένο στο Διαδίκτυο, μια βασική πρόταση είναι να ρυθμίσετε το τείχος προστασίας σας ώστε να επιτρέπει μόνο την κυκλοφορία που θέλουμε να επιτρέψουμε και να αρνηθούμε την υπόλοιπη κίνηση. Επαναλαμβανόμενα πέφτουμε θύματα βίαιης βίας ή επιθέσεων άρνησης υπηρεσίας από χώρες εκτός της Ισπανίας. Στη συντριπτική πλειονότητα των περιπτώσεων, συνιστάται να επιτρέπετε μόνο διευθύνσεις IP από τη χώρα στην οποία βρίσκεστε ή από την εταιρεία σας και να αρνηθείτε από προεπιλογή οποιαδήποτε άλλη κίνηση που δεν έχουμε στη λίστα επιτρεπόμενων. Σήμερα στο RedesZone πρόκειται να σας διδάξουμε πώς να κατεβάσετε όλες τις περιοχές διευθύνσεων IP μιας συγκεκριμένης χώρας για να την αποκλείσετε ανά πάσα στιγμή ή να επιτρέψετε σε οποιαδήποτε από αυτές, να χρησιμοποιεί πάντα IPv4 αφού η χρήση της είναι πλειοψηφία, εάν χρησιμοποιείτε IPv6, εσείς θα χρειαστεί να προσαρμόσετε το σενάριο.

Πολιτικές σε τείχος προστασίας: ανεκτές ή περιοριστικές

Τα τείχη προστασίας έχουν κυρίως δύο πολιτικές, μια ανεκτική πολιτική θα επιτρέπει όλη την κίνηση εκτός από αυτό που έχουμε αρνηθεί συγκεκριμένα. Σε μια περιοριστική πολιτική, θα επιτρέπουμε μόνο την κυκλοφορία που έχουμε ορίσει συγκεκριμένα. Για λόγους ασφαλείας, είναι πάντα σκόπιμο να υπάρχει περιοριστική πολιτική στο Διαδίκτυο WAN, για να αποτρέπεται ένας κακώς διαμορφωμένος κανόνας από τη δημιουργία επισκεψιμότητας που δεν θέλουμε να εισέλθουμε στο δίκτυό μας, επιπλέον, είναι πιο αποτελεσματικό να έχουμε (λίγους) κανόνες για να εξουσιοδοτήστε ορισμένα εμπόδια και απορρίπτετε τα υπόλοιπα χύμα από το αντίθετο.

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

Πού μπορώ να βρω τις διευθύνσεις IP και τα εύρη για διαφορετικές χώρες;

Dans Απόρριψη IP μπορείτε να βρείτε όλα τα μπλοκ διευθύνσεων IPv4 που ανήκουν σε κάθε χώρα, με αυτόν τον τρόπο μπορούμε να λάβουμε όλα τα εύρη διευθύνσεων IP σε μορφή CIDR από όλες τις χώρες του κόσμου, θα έχουμε την επιλογή να δούμε τα εύρη των IP στην Ισπανία , Κίνα, Ρωσία και πολλά άλλα. Όσο μεγαλύτερη είναι η χώρα, τόσο περισσότερα εύρη διευθύνσεων IPv4 θα έχουμε, οπότε θα πρέπει να επιτρέψουμε ή να αρνηθούμε την πρόσβαση σε αυτά τα δίκτυα, να τα αρνηθούμε ή να τα επιτρέψουμε αργότερα. Dans αυτός ο άλλος σύνδεσμος, διαθέτουμε τα μπλοκ διευθύνσεων IPv6 για κάθε χώρα.

Μια πολύ σημαντική λεπτομέρεια είναι ότι το IPDeny ενημερώνει πολύ συχνά ολόκληρη τη βάση δεδομένων των διευθύνσεων IP, IPv4 και IPv6, για να μας εμποδίσει να αποκλείσουμε τις διευθύνσεις IP ή τις περιοχές μιας χώρας που βρίσκονται στην πραγματικότητα σε άλλη. Αυτή η ιστοσελίδα ενημερώνεται σχεδόν καθημερινά καθώς οι μπλοκ διευθύνσεων IPv4 και IPv6 αλλάζουν ή προστίθενται περισσότερα.

Ρύθμιση παραμέτρων iptables με ipset για αποκλεισμό χωρών

Το iptables είναι το βασικό τείχος προστασίας Linux, αν και υπάρχουν κάποιες διανομές που κάνουν το άλμα στα nftables, που είναι η εξέλιξη των iptables, πολύ ταχύτερα, πιο αποτελεσματικά και ευκολότερα στη διαμόρφωση, ωστόσο, αυτήν τη στιγμή χρησιμοποιούμε ακόμα τα συντακτικά iptables αν και για παρακάτω χρησιμοποιήστε nftables, όπως στις τελευταίες εκδόσεις του λειτουργικού συστήματος Debian και πολλές άλλες. Εάν χρησιμοποιείτε iptables, συνιστάται ιδιαίτερα η χρήση της επέκτασης ipset, η οποία θα μας επιτρέψει να αποκλείσουμε ή να επιτρέψουμε εκατομμύρια διευθύνσεις IP, αλλά με υψηλότερη απόδοση από ό, τι εάν το κάναμε απευθείας με IPtables. Σε περίπτωση που επιτρέπετε ή αποκλείετε μια ολόκληρη χώρα, συνιστάται ανεπιφύλακτα να το κάνετε αυτό μέσω του ipset, καθώς είναι σαφώς πιο αποτελεσματικό από το iptables.

Για να χρησιμοποιήσετε το ipset με iptables πρέπει να το εγκαταστήσετε καθώς δεν είναι εγκατεστημένο από προεπιλογή, μπορείτε να το εγκαταστήσετε με αυτόν τον τρόπο:

sudo apt install ipset

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

Το επόμενο σενάριο που έχουμε προγραμματίσει είναι να αποκλείσουμε μία ή περισσότερες χώρες, προσθέτοντας όλα τα υποδίκτυα που κατεβάστηκαν από το IPdeny και ενσωματώνοντας όλα τα υποδίκτυα σε ένα ipset για να καλέσετε αργότερα το ipset και να το αποκλείσετε σε iptables. Με αυτόν τον τρόπο τα iptables θα είναι πολύ πιο αποτελεσματικά από ό, τι αν το κάνετε χωρίς την επέκταση ipset.

#!/bin/bash
# El objetivo de este script es BLOQUEAR todo el tráfico del pais que nosotros definamos, aunque tambien podriamos permitir solamente el nuestro, y denegar el resto.
# Autor: RedesZone.net; puedes compartir y modificar este script como desees.
# -------------------------------------------------------------------------------
#Elegiremos el nombre PAIS del pais que queremos BLOQUEAR
#Como ejemplo pondremos Andorra ya que tiene pocos rangos de direcciones IP.
PAIS="ad"
### Variables para facilitar el uso del script que apuntan a iptables (cortafuegos), ipset (extension de IPTABLESables), wget para coger los archivos de la base de datos y egrep para seleccionar la IP sin ningún símbolo que iptables no pueda interpretar ###
IPTABLES=/sbin/iptables
IPSET=/sbin/ipset
WGET=/usr/bin/wget
EGREP=/bin/egrep
#Ubicacion donde se guarda la base de datos de
BBDD="/root/iptables-bdd"
#URL de la base de datos de paises
URLDESCARGA="http://www.ipdeny.com/ipblocks/data/countries"
#Funcion para limpiar todas las reglas del firewall y lo ponemos por defecto.
limpiarReglasAntiguas(){
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPSET flush paisbloqueado
$IPSET destroy paisbloqueado
}
#Creamos el directorio para almacenar la base de datos
[ ! -d $BBDD ] && /bin/mkdir -p $BBDD
#Ejecutamos la funcion
limpiarReglasAntiguas
for c in $PAIS
do
# Base de datos local
DBLOCAL=$BBDD/$c.zone
# Descargamos y actualizamos la base de datos
$WGET -O $DBLOCAL $URLDESCARGA/$c.zone
# Filtramos la base de datos para que IPTABLES interprete correctamente la base de datos y vamos anadiendo cada bloque de IP.
FILTROIPS=$(egrep -v "^#|^$" $DBLOCAL)
#Creamos el IPset nuevo para bloquear el pais
$IPSET create paisbloqueado hash:net
for ipbloqueo in $FILTROIPS
do
$IPSET add paisbloqueado $ipbloqueo
done
done
#Denegamos el tráfico del ipset creado.
$IPTABLES -I INPUT -m set --match-set paisbloqueado src -j DROP
#Permitimos todo el resto del trafico. CUIDADO CON ESTO
$IPTABLES -A INPUT -j ACCEPT
exit 0

Τώρα μπορούμε να δούμε την κατάσταση των iptables βάζοντας τα ακόλουθα και θα δούμε ότι χρησιμοποιεί το διαμορφωμένο ipset:

iptables -L

Για να δείτε την κατάσταση του ipset, βάζουμε τα εξής:

ipset list

Κάθε φορά που θέλουμε να αποκλείσουμε μια νέα χώρα, θα πρέπει να εκτελέσετε ξανά το σενάριο και αυτόματα όλο το περιεχόμενο ipset θα αφαιρεθεί και όλα τα νέα υποδίκτυα θα προστεθούν από το μηδέν. Αυτό συνιστάται περισσότερο, επειδή οι διάφορες βάσεις δεδομένων διευθύνσεων IP και περιοχών σε διαφορετικές χώρες ενημερώνονται συνεχώς. Θα πρέπει να σημειωθεί ότι χώρες όπως η Κίνα έχουν μεγάλο αριθμό μπλοκ διευθύνσεων IP, επομένως θα χρειαστούν αρκετά λεπτά για να εφαρμοστούν όλοι οι κανόνες στο τείχος προστασίας, αν προσπαθήσουμε μόνο με "διαφήμιση" είναι σχεδόν στιγμιαία επειδή έχουμε μερικά. λίγο.

Χάρη σε αυτό το σενάριο, εάν η υπηρεσία μας στο Διαδίκτυο λειτουργεί μόνο στην Ισπανία, μπορούμε να απαγορεύσουμε όλες τις άλλες χώρες, αλλά πρέπει να έχουμε κατά νου ότι εάν ένας Ισπανός χρήστης χρησιμοποιεί διακομιστή μεσολάβησης ή VPN από άλλη χώρα, δεν θα επιτρέψουμε την πρόσβαση.

Διαμόρφωση iptables με ipset για να επιτρέπεται στην Ισπανία και αποκλεισμός των υπόλοιπων

Σε αυτό το σενάριο θα κάνουμε το ακριβώς αντίθετο από το προηγούμενο, αυτό που θα κάνουμε είναι να κατεβάσετε τη βάση δεδομένων των διευθύνσεων IP από την Ισπανία, θα την προσθέσουμε στο ipset που δημιουργήθηκε πρόσφατα και θα επιτρέψουμε την πρόσβαση. Από προεπιλογή, θα αρνηθεί κάθε άλλη κίνηση από άλλες χώρες. Εάν η επιχείρησή σας είναι στην Ισπανία και θέλετε μόνο να συνδεθούν με την Ισπανία, αυτό είναι το καλύτερο και πιο αποτελεσματικό πράγμα που μπορείτε να κάνετε, καθώς θα επιτρέπετε μόνο μια χώρα και όχι αποκλεισμό του υπόλοιπου κόσμου.

#!/bin/bash
# El objetivo de este script es PERMITIR todo el tráfico del pais que nosotros definamos.
# Autor: RedesZone.net; puedes compartir y modificar este script como desees.
# -------------------------------------------------------------------------------
#Elegiremos el nombre PAIS del pais que queremos PERMITIR
#Como ejemplo pondremos Andorra ya que tiene pocos rangos de direcciones IP.
PAIS="ad"
### Variables para facilitar el uso del script que apuntan a iptables (cortafuegos), ipset (extension de IPTABLESables), wget para coger los archivos de la base de datos y egrep para seleccionar la IP sin ningún símbolo que iptables no pueda interpretar ###
IPTABLES=/sbin/iptables
IPSET=/sbin/ipset
WGET=/usr/bin/wget
EGREP=/bin/egrep
#Ubicacion donde se guarda la base de datos de
BBDD="/root/iptables-bdd"
#URL de la base de datos de paises
URLDESCARGA="http://www.ipdeny.com/ipblocks/data/countries"
#Funcion para limpiar todas las reglas del firewall y lo ponemos por defecto.
limpiarReglasAntiguas(){
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPSET flush paispermitido
$IPSET destroy paispermitido
}
#Creamos el directorio para almacenar la base de datos
[ ! -d $BBDD ] && /bin/mkdir -p $BBDD
#Ejecutamos la funcion
limpiarReglasAntiguas
for c in $PAIS
do
# Base de datos local
DBLOCAL=$BBDD/$c.zone
# Descargamos y actualizamos la base de datos
$WGET -O $DBLOCAL $URLDESCARGA/$c.zone
# Filtramos la base de datos para que IPTABLES interprete correctamente la base de datos y vamos anadiendo cada bloque de IP.
FILTROIPS=$(egrep -v "^#|^$" $DBLOCAL)
#Creamos el IPset nuevo para bloquear el pais
$IPSET create paispermitido hash:net
for ippermitir in $FILTROIPS
do
$IPSET add paispermitido $ippermitir
done
done
#Permitimos el tráfico del ipset creado.
$IPTABLES -I INPUT -m set --match-set paispermitido src -j ACCEPT
#DENEGAMOS todo el resto del trafico.
$IPTABLES -A INPUT -j DROP
exit 0

Τώρα μπορούμε να δούμε την κατάσταση των iptables βάζοντας τα ακόλουθα και θα δούμε ότι χρησιμοποιεί το διαμορφωμένο ipset:

iptables -L

Για να δείτε την κατάσταση του ipset, βάζουμε τα εξής:

ipset list

Όπως είδατε, είναι πολύ εύκολο να αποκλείσετε ή να επιτρέψετε σε μια χώρα που χρησιμοποιεί το ipset από iptables, καθώς είναι πολύ πιο αποτελεσματικό από το να το κάνετε απευθείας με το iptables, οπότε σας συνιστούμε να χρησιμοποιείτε πάντα το ipset για τέτοιου είδους ενέργειες.

Διαμόρφωση Nftables για αποκλεισμό χωρών

Το nftables είναι το νέο τείχος προστασίας Linux, καλύτερο, γρηγορότερο και πιο διαισθητικό από τα δημοφιλή iptables που χρησιμοποιούσαμε πάντα. Το nftables είναι ήδη εγκατεστημένο στις περισσότερες διανομές Linux αν και χρησιμοποιούμε τη σύνταξη iptables. Εάν χρησιμοποιείτε τις πιο πρόσφατες εκδόσεις του Debian, θα χρησιμοποιείτε ήδη nftables χωρίς να το γνωρίζετε, αλλά δεν θα μπορούμε να χρησιμοποιήσουμε τη σύνταξη των nftables.

Για να μπορέσουμε να χρησιμοποιήσουμε 100% nftables, θα πρέπει να το εγκαταστήσουμε απευθείας από τα αποθετήρια, εκτελώντας την ακόλουθη εντολή:

sudo apt install nftables

Μόλις εγκατασταθεί, μπορούμε να ξεκινήσουμε τη διαμόρφωση των nftables με την εντολή “nft”. Η σύνταξη διαφέρει δραστικά από τα iptables, οπότε αν δεν το έχετε χρησιμοποιήσει, θα χρειαστεί λίγος χρόνος για να προσαρμοστεί στη νέα σύνταξη.

Το επόμενο σενάριο που έχουμε προγραμματίσει είναι να αποκλείσουμε μία ή περισσότερες χώρες, να προσθέσουμε όλα τα υποδίκτυα που έχουν ληφθεί από το IPdeny και να φέρουν όλα τα υποδίκτυα σε nftables για να το αποκλείσουν στο τείχος προστασίας. Πρέπει να θυμόμαστε ότι τα nftables είναι πολύ πιο αποτελεσματικά από τα iptables και ότι θα λειτουργήσει μια χαρά.

#!/bin/bash
# El objetivo de este script es BLOQUEAR todo el tráfico del pais que nosotros definamos, aunque tambien podriamos permitir solamente el nuestro, y denegar el resto.
# Autor: RedesZone.net; puedes compartir y modificar este script como desees.
# -------------------------------------------------------------------------------
#Elegiremos el nombre PAIS del pais que queremos BLOQUEAR
#Como ejemplo pondremos Andorra ya que tiene pocos rangos de direcciones IP.
PAIS="ad"
### Variables para facilitar el uso del script que apuntan a nftables (cortafuegos), wget para coger los archivos de la base de datos y egrep para seleccionar la IP sin ningún símbolo que NFT no pueda interpretar ###
NFT=/sbin/nft
WGET=/usr/bin/wget
EGREP=/bin/egrep
#Ubicacion donde se guarda la base de datos de
BBDD="/root/NFT-bdd"
#URL de la base de datos de paises
URLDESCARGA="http://www.ipdeny.com/ipblocks/data/countries"
#Funcion para limpiar todas las reglas del firewall y lo ponemos por defecto.
limpiarReglasAntiguas(){
$NFT flush set filter ips_baneadas
$NFT flush chain ip filter INPUT
}
#Creamos el directorio para almacenar la base de datos
[ ! -d $BBDD ] && /bin/mkdir -p $BBDD
#Ejecutamos la funcion
limpiarReglasAntiguas
for c in $PAIS
do
# Base de datos local
DBLOCAL=$BBDD/$c.zone
# Descargamos y actualizamos la base de datos
$WGET -O $DBLOCAL $URLDESCARGA/$c.zone
# Filtramos la base de datos para que NFT interprete correctamente la base de datos y vamos anadiendo cada bloque de IP.
FILTROIPS=$(egrep -v "^#|^$" $DBLOCAL)
#Creamos el set de ips_baneadas de tipo IPv4.
$NFT add set ip filter ips_baneadas {type ipv4_addr; flags interval;}
#Metemos en el set todos los rangos de IP.
for ipbloqueo in $FILTROIPS
do
$NFT add element ip filter ips_baneadas { $ipbloqueo }
done
done
#Bloqueamos todo lo que coincida con el SET anteriormente creado.
$NFT add rule ip filter INPUT ip saddr @ips_baneadas counter drop
$NFT list ruleset > /etc/nftables.conf
systemctl restart nftables.service
exit 0

Τώρα μπορούμε να δούμε την κατάσταση των nftables βάζοντας τα ακόλουθα και θα δούμε ότι χρησιμοποιεί το ρυθμισμένο ipset:

nft list ruleset

Διαμόρφωση Nftables για να επιτρέπεται σε χώρες

Το επόμενο σενάριο που έχουμε προγραμματίσει είναι να επιτρέψουμε σε μια χώρα, να προσθέσουμε όλα τα υποδίκτυά της που έχουν ληφθεί από το IPdeny και να φέρουν όλα τα υποδίκτυα σε nftables για να το επιτρέψουν στο τείχος προστασίας, η υπόλοιπη κίνηση θα απορριφθεί. Πρέπει να θυμόμαστε ότι τα nftables είναι πολύ πιο αποτελεσματικά από τα iptables και ότι θα λειτουργήσει μια χαρά.

#!/bin/bash
# El objetivo de este script es PERMITIR todo el tráfico del pais que nosotros definamos, aunque tambien podriamos permitir solamente el nuestro, y denegar el resto.
# Autor: RedesZone.net; puedes compartir y modificar este script como desees.
# -------------------------------------------------------------------------------
#Elegiremos el nombre PAIS del pais que queremos PERMITIR
#Como ejemplo pondremos Andorra ya que tiene pocos rangos de direcciones IP.
PAIS="ad"
### Variables para facilitar el uso del script que apuntan a nftables (cortafuegos), wget para coger los archivos de la base de datos y egrep para seleccionar la IP sin ningún símbolo que NFT no pueda interpretar ###
NFT=/sbin/nft
WGET=/usr/bin/wget
EGREP=/bin/egrep
#Ubicacion donde se guarda la base de datos de
BBDD="/root/NFT-bdd"
#URL de la base de datos de paises
URLDESCARGA="http://www.ipdeny.com/ipblocks/data/countries"
#Funcion para limpiar todas las reglas del firewall y lo ponemos por defecto.
limpiarReglasAntiguas(){
$NFT flush set filter ips_permitidas
$NFT flush chain ip filter INPUT
}
#Creamos el directorio para almacenar la base de datos
[ ! -d $BBDD ] && /bin/mkdir -p $BBDD
#Ejecutamos la funcion
limpiarReglasAntiguas
for c in $PAIS
do
# Base de datos local
DBLOCAL=$BBDD/$c.zone
# Descargamos y actualizamos la base de datos
$WGET -O $DBLOCAL $URLDESCARGA/$c.zone
# Filtramos la base de datos para que NFT interprete correctamente la base de datos y vamos anadiendo cada bloque de IP.
FILTROIPS=$(egrep -v "^#|^$" $DBLOCAL)
#Creamos el set de ips_permitidas de tipo IPv4.
$NFT add set ip filter ips_permitidas {type ipv4_addr; flags interval;}
#Metemos en el set todos los rangos de IP.
for ippermitida in $FILTROIPS
do
$NFT add element ip filter ips_permitidas { $ippermitida }
done
done
#Permitimos todo lo que coincida con el SET anteriormente creado.
$NFT add rule ip filter INPUT ip saddr @ips_permitidas counter accept
#Bloqueamos todo lo demas en cadena base
$NFT add chain ip filter INPUT '{ policy drop; }'
#Guardamos y reiniciamos servicio
$NFT list ruleset > /etc/nftables.conf
systemctl restart nftables.service
exit 0

Τώρα μπορούμε να δούμε την κατάσταση των nftables βάζοντας τα ακόλουθα και θα δούμε ότι χρησιμοποιεί το ρυθμισμένο ipset:

nft list ruleset

Μέχρι στιγμής έχουμε δημιουργήσει αυτό το σεμινάριο για iptables και ipset για να αποκλείσουμε ή να επιτρέψουμε IP από διαφορετικές χώρες, έχουμε επίσης δει πώς να το κάνουμε με nftables, το νέο τείχος προστασίας Linux με μια νέα πολύ πιο διαισθητική σύνταξη, αλλά θα μας κοστίσει λίγη δουλειά για να συνηθίσουμε αν είχαμε εργαστεί πάντα με iptables.

Παρόμοια στοιχεία

Αφήστε μια απάντηση

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

Κουμπί Επιστροφή στην κορυφή