it-swarm.com.de

iptables mehrere Quell-IPs in einer Regel

Ich möchte eine einzelne Regel in iptables erstellen (falls möglich), die mehrere Quell-IP-Adressen verwendet. Ist das möglich?

33
Glen Solsberry

Dies ist nur möglich, wenn Sie die gewünschten Quell-IPs in einem zusammenhängenden Bereich zusammenfassen können. z.B

iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.5 -p tcp -j ACCEPT

Wenn Sie keine gemeinsame Netzmaske finden, die die gewünschten IP-Adressen abdeckt, müssen Sie mehrere identische Regeln schreiben, um das zu tun, was Sie möchten.

Es gibt mehrere iptables-Frameworks, die sich mit der geringen Schreibstufe der iptables-Regeln befassen und es Ihnen ermöglichen, Ihre Regeln auf einer symolischeren Ebene zu definieren. Shorewall ist eine gängige Version, die mit den meisten aktuellen Linux-Distributionen geliefert wird.

14
Dave Cheney

Um mehrere Quellen in einem einzigen Befehl hinzuzufügen, würde ich Folgendes tun:

iptables -t filter -A INPUT -s 192.168.1.1,2.2.2.2,10.10.10.10 -j ACCEPT

iptables übersetzt es automatisch in mehrere Regeln.

117
Ali Pandidan

Die ursprüngliche Frage stammt aus dem Mai 2009, aber seit Mai 2011 verfügt der Linux-Kernel über eine Funktion namens ipset, um diesen Bedarf zu decken.

Hier ist ein Beispiel für das Erstellen eines ipset, das Hinzufügen von Adressen und das anschließende Verwenden in einer Firewall-Regel:

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

Sehen man iptables und man ipset Für mehr Information.

16
Tobia

sie können das iprange-Modul in Kombination mit '--src-range' wie für e.x. verwenden:

-A INPUT -i eth0 -m iprange --src-range 192.168.1.90-192.168.1.101 -j ACCEPT

Quelle: iptables 1.4.7 Manpage

   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.

(Ich weiß, das ist wie eine 4 Jahre alte Frage, aber nur um sie für jeden zu beantworten, der dies im Internet sucht.)

14
GGets

Zusätzlich zum Kommentar von Bòss King können Sie auch einfach mehrere mit einem Komma getrennte Adressen angeben:

[!] -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).
5
arjarj

Sie können mehrere Ketten so definieren, dass Sie unabhängige Anforderungslisten kombinieren können. Ich bezweifle, dass dies genau das ist, was Sie wollen, aber es ist immer noch ziemlich praktisch. Wir verwenden dies, um Listen gültiger Benutzertypen nach IP zu definieren und dann Portbeschränkungen auf die Quellnetzwerke anzuwenden. Also zum Beispiel:

# 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
4
jj33