Ich möchte eine einzelne Regel in iptables erstellen (falls möglich), die mehrere Quell-IP-Adressen verwendet. Ist das möglich?
Ich möchte eine einzelne Regel in iptables erstellen (falls möglich), die mehrere Quell-IP-Adressen verwendet. Ist das möglich?
Antworten:
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 wollen.
Es gibt mehrere iptables-Frameworks, die sich mit dem geringen Grad des Schreibens der iptables-Regeln befassen, sodass Sie Ihre Regeln auf einer sympathischeren Ebene definieren können. Shorewall ist eine verbreitete Software , die mit den meisten aktuellen Linux-Distributionen geliefert wird.
So fügen Sie mehrere Quellen zu einem einzigen Befehl hinzu:
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 .
-m multiport --dports 123,456,789
für mehrere Ports verwenden
iptables v1.3.7
Befehl iptables -I FORWARD -s 5.188.206.14,193.238.47.5 -j DROP
wird der Fehler " host/network '5.188.206.14,193.238.47.5' not found
" zurückgegeben.
Sie können das iprange-Modul in Kombination mit '--src-range' verwenden, wie zum Beispiel:
-A INPUT -i eth0 -m iprange --src-range 192.168.1.90-192.168.1.101 -j ACCEPT
Quelle: Manpage zu 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.
(Ich weiß, das ist wie eine 4-jährige Frage, aber nur für jeden zu beantworten, der dies im Internet sucht.)
Die ursprüngliche Frage stammt aus dem Mai 2009, aber seit Mai 2011 gibt es im Linux-Kernel eine Funktion namens ipset , um diese Anforderung zu erfüllen .
Hier ein Beispiel zum Erstellen eines IPSets, Hinzufügen von Adressen und anschließendes 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
Siehe man iptables
und man ipset
für mehr Infos.
Zusätzlich zum Kommentar von Bòss King können Sie auch einfach mehrere mit 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).
bash
, muss ich die Inversion mit einem Backslash entkommen:\! -s 192.168.1.3 ...
iptables v1.6.1: ! not allowed with multiple source or destination IP addresses
:-(
Sie können mehrere Ketten definieren, sodass 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 Porteinschränkungen auf die Quellnetzwerke anzuwenden. So 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
Angenommen, Sie möchten nur SMTP-Pakete akzeptieren, die aus 10.0.0.2 oder 192.168.1.2 stammen. Sie können die folgenden Regeln verwenden:
# 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
Oder als Ausgabe von 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