
Ich habe eine Liste mit IPs wie diesen Länder-IPs von i-blocklist:https://www.iblocklist.com/lists.php?category=country
Sie bieten nur Bereiche ohne Abonnement an, wie zum Beispiel: 201.237.0.0-201.237.255.255
Ich muss einige dieser Listen über eine bestimmte Schnittstelle auf einem Server weiterleiten, sehe aber in der IP-Route keine Option zum Angeben eines Bereichs in der obigen Notation.
Irgendwelche Ideen?
Antwort1
DerNetzmaske Werkzeugkann sehr praktisch sein, um einen Bereich in eine CIDR umzuwandeln:
$ netmask 201.237.0.0:201.237.255.255
201.237.0.0/16
$ netmask 201.238.3.0:201.238.9.255
201.238.3.0/24
201.238.4.0/22
201.238.8.0/23
Sie sollten auch prüfen, ob die Verwendungipsetoder deriptables GeoIP-Modul, Teil vonxtables-addonswäre nicht nützlicher, als diese Bereiche direkt zu verwenden.
Für GeoIP sehen Sie sich dieses Anwendungsbeispiel in dieser Frage/Antwort an:Ubuntu IPTables erlauben nur 1 Land
Antwort2
So etwas wie Bereichsrouting gibt es nicht. Sie können Subnetze routen (so nah an den gewünschten Bereich wie nötig) und dies mit beliebig vielen anderen unabhängigen, nicht in den Subnetzen enthaltenen IPs ergänzen, die Sie benötigen.
In Ihrem Beispiel ist 201.237.0.0-201.237.255.255 kein Bereich, sondern das Subnetz 201.237.0.0 /16. Sie können es in einem Schritt weiterleiten.
Ein Bereich wäre etwa 201.237.0.1-201.237.1.3, der in diesem Format nicht geroutet werden könnte. In diesem Szenario müssten Sie 201.237.0.0 /24 und separat 201.237.1.0 /30 routen, sodass Sie es im Grunde mit 2 Routen abdecken, aber das ist einfach. Es kann viel komplizierter werden.
Antwort3
Erweiterung der AB-Antwort - Sie können eine ganze Liste in die CIDR-Notation konvertieren mit
for each in `cut -f2 -d":" ad | tr "-" ":"` ; do netmask $each 2>/dev/null; done
Oder zur IP/Netmask-Notation mit
for each in `cut -f2 -d":" ad | tr "-" ":"` ; do netmask -s $each 2>/dev/null; done
Um alle IPs aus einem bestimmten Bereich über eine bestimmte Schnittstelle zu übertragen, könnten Sie beispielsweise Folgendes tun:
Zusammengefasst könnten Sie mit dem folgenden Skript einen Befehl erstellen – entfernen Sie dabei das „Echo“ und beenden Sie den iptables-Befehl entsprechend Ihren Anforderungen:
#! /bin/bash
TMPFILE="/dev/shm/$$.del"
for each in `cut -f2 -d":" ad | tr "-" ":"`
do
netmask -s $each 2>/dev/null;
done > $TMPFILE
while read -r each
do
ROUTE=${each%/*}
NETMASK=${each#*/}
echo /sbin/route add $ROUTE netmask $NETMASK ....
done <$TMPFILE