iptables múltiplos IPs de origem

26

Eu gostaria de criar uma única regra no iptables (se possível) que usa vários endereços IP de origem. Isso é possível?

    
por Glen Solsberry 11.05.2009 / 15:09

7 respostas

12

Isso só é possível se você puder agregar os IPs de origem desejados em um intervalo contíguo. eg

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

Se você não encontrar uma máscara de rede comum que cubra os IPs desejados, será necessário escrever várias regras idênticas para fazer o que quiser.

Existem vários frameworks iptables que podem lidar com o baixo nível de escrita das regras do iptables, permitindo que você defina suas regras em um nível mais symolic. Shorewall é comum e vem com a maioria das distribuições de linux atuais.

    
por 11.05.2009 / 15:26
93

Para adicionar várias fontes em um único comando, eu faria isso:

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

O iptables irá traduzi-lo automaticamente para várias regras .

    
por 06.12.2014 / 18:57
12

você pode usar o módulo iprange em combinação com '--src-range' como para e.x.:

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

Fonte: iptables 1.4.7 man page

   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.

(Eu sei que isso é como uma pergunta de 4 anos de idade, mas apenas para responder para quem procura isso na net)

    
por 31.05.2013 / 09:58
9

A pergunta original é de maio de 2009, mas desde maio de 2011 o kernel do Linux tem um recurso para atender a essa necessidade chamada ipset .

Aqui está um exemplo para criar um ipset, adicionar endereços a ele e usá-lo em uma regra de firewall:

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

Veja man iptables e man ipset para mais informações.

    
por 03.11.2016 / 13:08
5

Além do comentário de Bòss King, você também pode simplesmente especificar vários endereços separados por vírgula:

[!] -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).
    
por 31.05.2013 / 10:04
4

Você pode definir várias cadeias para poder combinar listas independentes de requisitos. Eu duvido que isso é exatamente o que você quer, mas ainda é muito útil. Usamos isso para definir listas de tipos de usuários válidos por IP e, em seguida, aplicar restrições de porta às redes de origem. Então, por exemplo:

# 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
    
por 11.05.2009 / 15:42
-1

Digamos, por exemplo, que você só queira aceitar pacotes SMTP provenientes de 10.0.0.2 ou 192.168.1.2. Você pode usar as seguintes regras:

  # 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 como a saída 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
    
por 06.12.2014 / 18:20