it-swarm-ru.tech

iptables несколько исходных IP-адресов в одном правиле

Я хотел бы создать одно правило в iptables (если это возможно), которое использует несколько исходных IP-адресов. Это возможно?

33
Glen Solsberry

Это возможно только в том случае, если вы можете объединить нужные IP-адреса источника в непрерывный диапазон. например

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

Если вы не можете найти общую маску сети, которая охватывает IP-адреса, которые вы хотите, вам придется написать несколько идентичных правил, чтобы делать то, что вы хотите.

Существует несколько структур iptables, которые могут справиться с низким уровнем написания правил iptables, что позволяет вам определять свои правила на более символическом уровне. Shorewall - это распространенная версия, которая поставляется с большинством современных дистрибутивов Linux.

14
Dave Cheney

Чтобы добавить несколько источников в одну команду, я бы сделал это:

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

iptables автоматически переведет его в несколько правил.

117
Ali Pandidan

Первоначальный вопрос относится к маю 2009 года, но с мая 2011 года в ядре Linux появилась функция для удовлетворения этой потребности, называемая ipset.

Вот пример создания ipset, добавления адресов к нему, а затем использования его в правиле брандмауэра:

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

Видеть man iptables а также man ipset для получения дополнительной информации.

16
Tobia

вы можете использовать модуль iprange в сочетании с '--src-range', как для e.x .:

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

Источник: страница руководства 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.

(я знаю, что это как 4-летний вопрос, но просто ответить на любой, кто ищет это в сети)

14
GGets

В дополнение к комментарию Bòss King вы также можете просто указать несколько адресов, разделенных запятой:

[!] -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

Вы можете определить несколько цепочек, так что вы можете комбинировать независимые списки требований. Я сомневаюсь, что это именно то, что вы хотите, но это все еще довольно удобно. Мы используем это для определения списков допустимых типов пользователей по IP, а затем применяем ограничения портов к исходным сетям. Так, например:

# 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