bloqueia todos, exceto alguns ips com firewalld

11

Em uma máquina em rede linux, gostaria de restringir o conjunto de endereços na zona "pública" (conceito firewalld), que podem ser acessados. Assim, o resultado final seria nenhuma outra máquina pode acessar qualquer porta ou protocolo, exceto aqueles explicitamente permitidos, uma espécie de mistura de

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'

O problema acima é que esta não é uma lista real, irá bloquear tudo já que se o seu endereço for bloqueado por não ser o mesmo que o outro, gerando um efeito acidental "drop all", como eu iria "desbloquear" um conjunto específico não contíguo? A fonte aceita uma lista de endereços? Eu não vejo nada em minha olhada nos documentos ou no resultado do Google até agora.

EDITAR: Eu acabei de criar isso:

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
  interfaces: eth1
  sources: 192.168.56.120
  services: ssh
  ports: 6000/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

Mas ainda posso acessar a porta 6000 a partir de .123 . Minha intenção era que, se uma fonte não estivesse listada, ela não conseguiria alcançar nenhum serviço ou porta

    
por mike 06.04.2015 / 22:26

3 respostas

17

As regras avançadas não são necessárias.

Se você quiser restringir uma zona a um conjunto específico de IPs, simplesmente defina esses IPs como fontes para a própria zona (e remova qualquer definição de interface que possa estar presente, pois eles substituem os IPs de origem).

Você provavelmente não desejará fazer isso na zona "pública", já que isso significa semanticamente que os serviços públicos estejam abertos para o mundo.

Em vez disso, tente usar uma zona diferente, como "interna", para a maioria dos endereços IP confiáveis, para acessar serviços potencialmente confidenciais, como o sshd. (Você também pode criar suas próprias zonas.)

Atenção: não confunda a zona especial "confiável" com a zona "interna" normal. Todas as fontes adicionadas à zona "confiável" serão permitidas em todas as portas; adicionar serviços à zona "confiável" é permitido, mas não faz sentido fazer isso.

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh

O resultado disso será uma zona "interna" que permite acesso ao ssh, mas somente a partir dos dois endereços IP fornecidos. Para torná-lo persistente, execute novamente cada comando com --permanent anexado.

    
por 06.04.2015 / 22:47
1

Como por firewalld.richlanguage :

Source source [not] address="address[/mask]"

   With the source address the origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either
   dot-decimal (/x.x.x.x) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.

Especifique uma máscara de rede para o endereço para permitir blocos contíguos.

Além disso, você pode tentar criar um ipset para uma lista não contígua de IPs permitidos.

Por exemplo, em /etc/firewalld/direct.xml :

<?xml version="1.0" encoding="utf-8"?>
<direct>
   <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule>
</direct>

O% realipset deve ser criado separadamente.

    
por 06.04.2015 / 22:53
0

Você pode gerenciar facilmente por Rich Regra.

Primeiro passo

firewall-cmd --permanent --set-default-zone=home
firewall-cmd --permanent --zone=drop --change-interface=eth0

Segundo passo: adicionar regra avançada

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'

Todas as portas são acessadas por 192.168.2.2 depois que você adicionar uma regra avançada e bloquear todas as portas de outra origem.

Se você adicionar qualquer porta ou serviço pelo comando abaixo, ele será acessível por todas as fontes.

firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-port=8080

Se você deseja abrir uma porta específica para um Ip específico do que o comando abaixo

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
    
por 12.01.2017 / 17:28