Si vous ne trouvez pas un masque de réseau commun qui couvre les adresses IP que vous voulez, vous devrez écrire plusieurs règles identiques pour faire ce que vous voulez.
Il existe plusieurs frameworks iptables autour desquels peut traiter le faible niveau d'écriture des règles iptables, vous permettant de définir vos règles à un niveau plus symétrique. Shorewall est un système courant livré avec la plupart des distributions Linux actuelles.
Malgré le manque de votes, cela fonctionne et est la bonne réponse à la question
phil-lavin
//, Pouvez-vous faire de même avec les ports?
Nathan Basanese
1
@NathanBasanese Vous pouvez utiliser -m multiport --dports 123,456,789pour plusieurs ports
mahemoff
Tobia a maintenant une meilleure réponse que celle-ci. Voir ci-dessous.
Ben Aveling
L'utilisation de la iptables v1.3.7commande Given iptables -I FORWARD -s 5.188.206.14,193.238.47.5 -j DROPrenvoie l'erreur " host/network '5.188.206.14,193.238.47.5' not found".
JamesThomasMoon1979
14
vous pouvez utiliser le module iprange en combinaison avec '--src-range' comme par exemple:
-A INPUT -i eth0 -m iprange --src-range 192.168.1.90-192.168.1.101 -j ACCEPT
Source: page de manuel iptables 1.4.7
iprange
This matches on a given arbitrary range of IP addresses.
[!] --src-range from[-to]
Match source IP in the specified range.
[!] --dst-range from[-to]
Match destination IP in the specified range.
(Je sais que c'est comme une question de 4 ans, mais juste pour répondre à toute personne qui cherche cela sur le net)
La question d'origine date de mai 2009, mais depuis mai 2011, le noyau Linux a une fonction pour répondre à ce besoin appelée ipset .
Voici un exemple de création d'un ipset, en y ajoutant des adresses, puis en l'utilisant dans une règle de pare-feu:
ipset -N office365 iphash
ipset -A office365 132.245.228.194
ipset -A office365 132.245.77.34
ipset -A office365 132.245.48.34
ipset -A office365 132.245.68.242
ipset -A office365 132.245.55.2
ipset -A office365 40.101.17.98
ipset -A office365 132.245.48.18
ipset -A office365 132.245.229.114
ipset -A office365 132.245.196.34
ipset -A office365 132.245.56.114
iptables -A OUTPUT -m set --match-set office365 dst -j ACCEPT
Voir man iptableset man ipsetpour plus d'informations.
En plus du commentaire de Bòss King, vous pouvez également simplement spécifier plusieurs adresses séparées par une virgule:
[!] -s, --source address[/mask][,...]
Source specification. Address can be either a network name, a hostname, a network IP address (with /mask), or a plain IP address. Hostnames will be resolved once only, before the rule is submitted to the kernel. Please note that specifying
any name to be resolved with a remote query such as DNS is a really bad idea. The mask can be either a network mask or a plain number, specifying the number of 1's at the left side of the network mask. Thus, a mask of 24 is equivalent to
255.255.255.0. A "!" argument before the address specification inverts the sense of the address. The flag --src is an alias for this option. Multiple addresses can be specified, but this will expand to multiple rules (when adding with -A),
or will cause multiple rules to be deleted (with -D).
De la coquille comme bash, je dois échapper à l'inversion avec une barre oblique inverse:\! -s 192.168.1.3 ...
Marcos
iptables v1.6.1: ! not allowed with multiple source or destination IP addresses:-(
tu-Reinstate Monica-dor duh
4
Vous pouvez définir plusieurs chaînes de manière à pouvoir combiner des listes indépendantes d'exigences. Je doute que c'est exactement ce que vous voulez, mais c'est quand même assez pratique. Nous l'utilisons pour définir des listes de types d'utilisateurs valides par IP, puis appliquer des restrictions de port aux réseaux source. Ainsi, par exemple:
# Allow SMTP from anywhere
-A tcp_inbound -p tcp -m tcp -s 0/0 --dport 25 -j allowed
#
# Define the set of IP ranges we'll send to the tcp_user_inbound chain
-A tcp_inbound -p tcp -m tcp -s 172.19.1.0/24 -j tcp_user_inbound
-A tcp_inbound -p tcp -m tcp -s 172.19.6.0/23 -j tcp_user_inbound
-A tcp_inbound -p tcp -m tcp -s 172.19.8.0/24 -j tcp_user_inbound
-A tcp_inbound -p tcp -m tcp -s 172.19.10.0/23 -j tcp_user_inbound
-A tcp_inbound -p tcp -m tcp -s 172.19.12.0/23 -j tcp_user_inbound
-A tcp_inbound -p tcp -m tcp -s 172.19.4.0/23 -j tcp_user_inbound
#
# Ports we allow access to based on a source-address prereq.
# SSH
-A tcp_user_inbound -p tcp -m tcp --dport 22 -j allowed
# VNC
-A tcp_user_inbound -p tcp -m tcp --dport 5950:5958 -j allowed
# https
-A tcp_user_inbound -p tcp -m tcp --dport 443 -j allowed
Disons par exemple que vous ne souhaitez accepter que les paquets SMTP provenant de 10.0.0.2 ou 192.168.1.2. Vous pouvez utiliser les règles suivantes:
# create a new chain
iptables --new-chain multiple_sources_smtp
# send all SMTP connections to the new chain
iptables --append INPUT --protocol tcp --dport 25 --jump multiple_sources_smtp
# use the default INPUT rules for packets coming from allowed sources
iptables --append multiple_sources_smtp --source 10.0.0.2 --jump RETURN
iptables --append multiple_sources_smtp --source 192.168.1.2 --jump RETURN
# drop packets from anywhere else
iptables --append multiple_sources_smtp -j DROP
Ou comme sortie de iptables-save
# Generated by iptables-save v1.4.14 on Sat Dec 6 09:17:11 2014
*filter
:INPUT ACCEPT [32:13325]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [25:3084]
:multiple_sources_smtp - [0:0]
-A INPUT -p tcp -m tcp --dport 25 -j multiple_sources_smtp
-A multiple_sources_smtp -s 10.0.0.2/32 -j RETURN
-A multiple_sources_smtp -s 192.168.1.2/32 -j RETURN
-A multiple_sources_smtp -j DROP
COMMIT
# Completed on Sat Dec 6 09:17:11 2014
Réponses:
Cela n'est possible que si vous pouvez agréger les IP source que vous souhaitez dans une plage contiguë. par exemple
Si vous ne trouvez pas un masque de réseau commun qui couvre les adresses IP que vous voulez, vous devrez écrire plusieurs règles identiques pour faire ce que vous voulez.
Il existe plusieurs frameworks iptables autour desquels peut traiter le faible niveau d'écriture des règles iptables, vous permettant de définir vos règles à un niveau plus symétrique. Shorewall est un système courant livré avec la plupart des distributions Linux actuelles.
la source
Pour ajouter plusieurs sources dans une seule commande, je ferais ceci:
iptables le traduira automatiquement en plusieurs règles .
la source
-m multiport --dports 123,456,789
pour plusieurs portsiptables v1.3.7
commande Giveniptables -I FORWARD -s 5.188.206.14,193.238.47.5 -j DROP
renvoie l'erreur "host/network '5.188.206.14,193.238.47.5' not found
".vous pouvez utiliser le module iprange en combinaison avec '--src-range' comme par exemple:
Source: page de manuel iptables 1.4.7
(Je sais que c'est comme une question de 4 ans, mais juste pour répondre à toute personne qui cherche cela sur le net)
la source
La question d'origine date de mai 2009, mais depuis mai 2011, le noyau Linux a une fonction pour répondre à ce besoin appelée ipset .
Voici un exemple de création d'un ipset, en y ajoutant des adresses, puis en l'utilisant dans une règle de pare-feu:
Voir
man iptables
etman ipset
pour plus d'informations.la source
En plus du commentaire de Bòss King, vous pouvez également simplement spécifier plusieurs adresses séparées par une virgule:
la source
bash
, je dois échapper à l'inversion avec une barre oblique inverse:\! -s 192.168.1.3 ...
iptables v1.6.1: ! not allowed with multiple source or destination IP addresses
:-(Vous pouvez définir plusieurs chaînes de manière à pouvoir combiner des listes indépendantes d'exigences. Je doute que c'est exactement ce que vous voulez, mais c'est quand même assez pratique. Nous l'utilisons pour définir des listes de types d'utilisateurs valides par IP, puis appliquer des restrictions de port aux réseaux source. Ainsi, par exemple:
la source
Disons par exemple que vous ne souhaitez accepter que les paquets SMTP provenant de 10.0.0.2 ou 192.168.1.2. Vous pouvez utiliser les règles suivantes:
Ou comme sortie de
iptables-save
la source