4 votes

Permettre à iptables d'autoriser une gamme d'ip seulement sur un port spécifique.

Sur cette question Je vois une ligne comme celle-ci qui me permettra de dire "autoriser ces adresses IP à se connecter".

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 -j ACCEPT

Maintenant, je veux sécuriser davantage cette règle afin qu'elle ne s'applique qu'à des ports spécifiques. J'ai utilisé une commande comme celle-ci pour mes ports réguliers :

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Puis-je combiner ces deux éléments pour qu'un port spécifique ne soit autorisé que pour une plage, comme ceci

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 --dport 12345 -j ACCEPT

J'hésite évidemment à faire des appels à iptables au hasard :) Merci !

4voto

Dangph Points 5561

La dernière ligne que vous avez là devrait fonctionner, vous devez juste vous assurer que vous avez un - -. -p dans cette ligne, car --dport ne fonctionne pas comme une option à part entière.

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 -p tcp --dport 12345 -j ACCEPT

3voto

Zsolt Sz. Points 347

Vous pouvez également installer ipset et vous pourrez changer la liste des adresses IP sans perturber votre iptables règles :

ipset -N AllowedSources ipmap --network 10.50.10.0/24
for i in $LIST_OF_ALLOWED_SOURCES; do ipset -A AllowedSources $i; done
iptables -A INPUT -m set --match-set AllowedSources src -p tcp --dport 12345 -j ACCEPT

Maintenant, si vous avez besoin d'ajouter une autre source autorisée :

ipset -A AllowedSources a.b.c.d

Ou bien, vous devez supprimer un hôte des sources autorisées :

ipset -D AllowedSources e.f.g.h

Vous pouvez sauvegarder vos jeux :

ipset --save > /etc/ipset.conf

Que vous pouvez restaurer pendant le démarrage, avant vous mettez en œuvre votre iptables (sinon, iptables se plaindra !) :

ipset --restore < /etc/ipset.conf

Vous pouvez même créer un ensemble d'IP qui correspondra à l'IP source. y le port de destination, par exemple :

ipset -N AllowedAccess ipporthash --network 10.50.0.0/16
# These hosts may access port 12345
for i in $LIST_OF_ALLOWED_TO_12345; do ipset -A AllowedAccess $i,12345; done
# These hosts may access port 23456
for i in $LIST_OF_ALLOWED_TO_23456; do ipset -A AllowedAccess $i,23456; done
# These hosts may access port 34567
for i in $LIST_OF_ALLOWED_TO_34567; do ipset -A AllowedAccess $i,34567; done
# Now that the IP set has been created, we can use it in iptables
iptables -A INPUT -m set --match-set AllowedAccess src,dst -j ACCEPT
# Note that we use "src,dst", meaning that we want to match source IP, but
# destination port
# Also note, if you need to match against a single port, the ipmap method
# will be slightly faster.

En savoir plus ipset : http://ipset.netfilter.org/

Si vous utilisez Ubuntu vous ne pouvez pas installer le ipset à partir de son répertoire. Utilisez mon astuce : http://pepoluan.posterous.com/powertip-howto-install-ipset-on-ubuntu

1voto

jcollie Points 129

Vous avez l'idée de base, vous puede les combiner en une seule règle comme ça.

Cependant, malgré ce que disent certaines réponses, vous ne devrait pas utilisez une plage comme 10.50.10.20-80 (elle s'étendra à 10.50.10.20-80.0.0.0 - utilisez la commande iptables pour vérifier). Vous devez utiliser l'adresse IP complète dans la plage, par exemple 10.50.10.20-10.50.10.80.

En outre, si vous spécifiez un numéro de port, vous devez indiquer un protocole qui prend en charge les ports, de sorte que la règle révisée serait :

iptables -A INPUT -p tcp -m iprange --src-range 10.50.10.20-10.50.10.80 --dport 12345 -j ACCEPT

Documentaion sur l'iprange : https://www.frozentux.net/iptables-tutorial/chunkyhtml/x2702.html#TABLE.IPRANGEMATCH

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X