Jeśli nie możesz znaleźć wspólnej maski sieci obejmującej adresy IP, które chcesz, musisz napisać kilka identycznych reguł, aby zrobić to, co chcesz.
Istnieje kilka frameworków iptables, które mogą poradzić sobie z niskim poziomem pisania reguł iptables, umożliwiając definiowanie reguł na bardziej symetrycznym poziomie. Shorewall jest powszechny, który jest dostarczany z większością obecnych dystrybucji Linuksa.
Mimo braku głosów to działa i jest właściwą odpowiedzią na pytanie
phil-lavin
// Czy możesz zrobić to samo z portami?
Nathan Basanese
1
@NathanBasanese Możesz używać -m multiport --dports 123,456,789dla wielu portów
mahemoff
Tobia ma teraz lepszą odpowiedź niż ta. Patrz poniżej.
Ben Aveling
Za pomocą iptables v1.3.7polecenia Given iptables -I FORWARD -s 5.188.206.14,193.238.47.5 -j DROPzwraca błąd „ host/network '5.188.206.14,193.238.47.5' not found”.
JamesThomasMoon1979,
14
możesz użyć modułu iprange w połączeniu z '--src-range' jak na przykład:
-A INPUT -i eth0 -m iprange --src-range 192.168.1.90-192.168.1.101 -j ACCEPT
Źródło: strona podręcznika 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.
(wiem, że to jest pytanie z 4 lat, ale tylko po to, by odpowiedzieć każdemu, kto szuka tego w sieci)
Pierwotne pytanie pochodzi z maja 2009 r., Ale od maja 2011 r. Jądro Linuksa ma funkcję zaspokojenia tej potrzeby o nazwie ipset .
Oto przykład tworzenia ipset, dodawania do niego adresów, a następnie używania go w regule zapory:
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
Oprócz komentarza Bòss Kinga możesz również po prostu podać kilka adresów oddzielonych przecinkiem:
[!] -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).
Z muszli bashmuszę uciec przed inwersją odwrotnym ukośnikiem:\! -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
Możesz zdefiniować wiele łańcuchów, aby połączyć niezależne listy wymagań. Wątpię, żeby tego właśnie chciałeś, ale wciąż jest całkiem przydatny. Używamy tego do definiowania list prawidłowych typów użytkowników według adresu IP, a następnie do sieci źródłowych stosujemy ograniczenia portów. Na przykład:
# 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
Załóżmy na przykład, że chcesz akceptować tylko pakiety SMTP pochodzące z wersji 10.0.0.2 lub 192.168.1.2. Możesz użyć następujących reguł:
# 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
Lub jako wynik 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
Odpowiedzi:
Jest to możliwe tylko wtedy, gdy można agregować źródłowe adresy IP w ciągły zakres. na przykład
Jeśli nie możesz znaleźć wspólnej maski sieci obejmującej adresy IP, które chcesz, musisz napisać kilka identycznych reguł, aby zrobić to, co chcesz.
Istnieje kilka frameworków iptables, które mogą poradzić sobie z niskim poziomem pisania reguł iptables, umożliwiając definiowanie reguł na bardziej symetrycznym poziomie. Shorewall jest powszechny, który jest dostarczany z większością obecnych dystrybucji Linuksa.
źródło
Aby dodać wiele źródeł w jednym poleceniu, zrobiłbym to:
iptables automatycznie przetłumaczy to na wiele reguł .
źródło
-m multiport --dports 123,456,789
dla wielu portówiptables v1.3.7
polecenia Giveniptables -I FORWARD -s 5.188.206.14,193.238.47.5 -j DROP
zwraca błąd „host/network '5.188.206.14,193.238.47.5' not found
”.możesz użyć modułu iprange w połączeniu z '--src-range' jak na przykład:
Źródło: strona podręcznika iptables 1.4.7
(wiem, że to jest pytanie z 4 lat, ale tylko po to, by odpowiedzieć każdemu, kto szuka tego w sieci)
źródło
Pierwotne pytanie pochodzi z maja 2009 r., Ale od maja 2011 r. Jądro Linuksa ma funkcję zaspokojenia tej potrzeby o nazwie ipset .
Oto przykład tworzenia ipset, dodawania do niego adresów, a następnie używania go w regule zapory:
Zobacz
man iptables
iman ipset
więcej informacji.źródło
Oprócz komentarza Bòss Kinga możesz również po prostu podać kilka adresów oddzielonych przecinkiem:
źródło
bash
muszę uciec przed inwersją odwrotnym ukośnikiem:\! -s 192.168.1.3 ...
iptables v1.6.1: ! not allowed with multiple source or destination IP addresses
:-(Możesz zdefiniować wiele łańcuchów, aby połączyć niezależne listy wymagań. Wątpię, żeby tego właśnie chciałeś, ale wciąż jest całkiem przydatny. Używamy tego do definiowania list prawidłowych typów użytkowników według adresu IP, a następnie do sieci źródłowych stosujemy ograniczenia portów. Na przykład:
źródło
Załóżmy na przykład, że chcesz akceptować tylko pakiety SMTP pochodzące z wersji 10.0.0.2 lub 192.168.1.2. Możesz użyć następujących reguł:
Lub jako wynik
iptables-save
źródło