Endereços IP de origem da lista de desbloqueio no CentOS 7

14

Eu quero configurar o firewall do CentOS 7 para que todas as solicitações recebidas sejam bloqueadas, exceto os endereços IP de origem que eu coloquei na lista de permissões. E para os endereços IP da lista de permissões, todas as portas devem estar acessíveis. Alguém pode me guiar para isso?

Consigo encontrar algumas soluções (não tenho certeza se elas funcionarão) para iptables , mas o CentOS 7 usa firewalld . Não consigo encontrar algo semelhante para conseguir com o comando firewall-cmd .

As interfaces estão na Zona Pública. Eu também mudei todos os serviços para a zona pública.

    
por Krishnandu Sarkar 07.10.2014 / 19:58

7 respostas

35

Eu conseguiria isso adicionando fontes a uma zona. Primeiro, verifique quais fontes existem para sua zona:

firewall-cmd --permanent --zone=public --list-sources

Se não houver nenhum, você pode começar a adicioná-los, esta é a sua "lista branca"

firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32

(Isso adiciona um /24 inteiro e um IP único, apenas para que você tenha uma referência para uma sub-rede e um único IP)

Defina o intervalo de portas que você deseja abrir:

firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp

Isso só faz as portas 1 a 22. Você pode ampliar isso, se quiser.

Agora, atualize o que você fez.

firewall-cmd --reload

E verifique seu trabalho:

 firewall-cmd --zone=public --list-all

Nota / editorial: Não importa, mas gosto da zona "confiável" para um conjunto de IPs listado em branco no firewalld. Você pode fazer uma avaliação adicional lendo sugestões do redhat na escolha de uma zona .

Veja também:

Se você quiser DROP pacotes fora dessa fonte, aqui está um exemplo para descartar aqueles que estão fora do /24 que eu usei como exemplo anteriormente, você pode usar regras ricas para isso , eu acredito. Isso é conceitual, eu não testei (além de ver que o centos 7 aceita o comando), mas, deve ser fácil o suficiente para fazer um pcap e ver se ele se comporta como você esperaria

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'
    
por 07.10.2014 / 20:13
17

Mesmo que uma resposta tenha sido aceita e tenha sido votada, não acho que seja correta. Não consigo encontrar uma explicação clara na documentação, mas a partir do comportamento implementado, parece que:

  1. interface e fonte são usados como seletores - qual zona (s) ativar
  2. ambos são ignorados para a zona padrão (sempre ativa)

Então a resposta seria:

  1. bloqueia a zona padrão, diga "público" - não há portas abertas nem serviços disponíveis
  2. em outra zona, diga "trabalho" - defina as portas de origem e de abertura

Por exemplo, supondo que a zona padrão seja pública e não tenha portas abertas, adicione o intervalo de origem e porta à zona de "trabalho":

$ sudo firewall-cmd --zone=work --add-source=192.168.0.0/24
$ sudo firewall-cmd --zone=work --add-port=8080-8090/tcp

agora verifique as zonas ativas (a zona padrão está sempre ativa):

$ sudo firewall-cmd --get-active-zones

você terá:

work
  sources: 192.168.0.0/24

as regras da zona "work" serão aplicadas à sub-rede específica. Você terá um intervalo de portas abertas para a "lista de permissões" = sub-rede , conforme solicitado. E, claro, use a opção --permanent em --add-xxx para fazer com que o comportamento continue.

Por sua vez, todas as portas ou serviços que você tiver na zona "pública" (padrão) serão aplicadas a todas as interfaces e endereços de origem.

$ sudo firewall-cmd --list-all-zones

public (default)
interfaces:
sources:
services:
ports: 
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

work (active)
interfaces: 
sources: 192.168.0.0/24
services: dhcpv6-client ipp-client ssh
ports: 8080-8090/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

O mesmo sistema funciona para interfaces. Diga adicionando a interface "ens3" à zona de "trabalho":

$ sudo firewall-cmd --zone=work --add-interface=ens3

você usará as regras da zona "work" para qualquer solicitação da interface específica - um seletor mais difícil do que "source".

    
por 16.02.2015 / 10:47
4

Disclaimer: Eu não tentei o que estou sugerindo aqui, mas está bem perto da última configuração do firewalld que eu fiz, então estou saindo disso. O Firewalld oferece algumas zonas pré-configuradas, apenas para esse propósito. Há um chamado "drop", que deixa cair qualquer coisa, e um chamado "confiável", que permite qualquer conexão (ou seja, você não precisa abrir portas individuais, eu acho). O truque é obter a zona certa para acionar o que você deseja.

O Firewalld aplicará as regras para uma zona com base na seguinte precedência:

  • Se o IP de origem corresponder a um IP de origem ligado a uma zona, ele usará isso.
  • Se o IP de origem não corresponder a nenhuma zona específica, ele verificará se há uma zona configurada para a interface em que o pacote entrou. Se houver um, ele usa isso.
  • Por fim, se nada mais corresponder, ele usará a zona padrão.

Primeiramente, você deseja vincular seus IPs confiáveis à zona "confiável":

firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4

Em seguida, defina sua zona padrão como "soltar" ou vincule sua interface a ela:

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

e, em seguida, faça as alterações entrarem em vigor (aviso: isso provavelmente derrubará sua conexão se você estiver fazendo isso pela rede e não tiver adicionado seu IP de origem à zona confiável):

firewall-cmd --reload

Claro, você também pode testá-los temporariamente omitindo o "--permanent" (e então você não precisa recarregar, também).

    
por 29.04.2015 / 04:36
2

Eu operei meus firewalls dessa maneira. Aqui está o meu método preferido para realizar o que você quer.

# firewall-cmd --list-all

Você verá que sua zona padrão é pública e os serviços ativados são dhcpv6-client e ssh. Nós não queremos nenhum serviço público disponível, certo? Apenas os IPs permitidos estão autorizados. Então, vamos remover os dois serviços públicos.

# firewall-cmd --zone=public --remove-service=ssh --permanent
# firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent

Agora, vamos colocar na lista de permissões um IP específico que conceda acesso a qualquer porta.

#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" accept'

Agora, vamos colocar na lista de permissões outro IP, que só queremos ter acesso ao acesso SSH, http e https. Nenhuma outra porta.

#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" service name="ssh" accept'
#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" service name="http" accept'
#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx service name="https" accept'

Se você estiver se conectando via SSH, certifique-se de autorizar o seu IP antes de aplicar o novo conjunto de regras. Quando estiver pronto para aplicar as novas regras.

#firewall-cmd --reload
    
por 11.01.2017 / 21:15
1

Apenas para adicionar à resposta do Normunds:

$ sudo firewall-cmd --permanent --zone=work --add-source=172.16.0.0/12
$ sudo firewall-cmd --permanent --zone=work --add-port=8080-8090/tcp

Para bloquear todo o outro tráfego:

$ sudo firewall-cmd --set-default-zone=drop

Aviso: se você acessar de uma máquina remota, isso pode desconectar sua sessão de login. Se você não conseguiu a configuração do IP da zona 'trabalho' corretamente, você não poderá se conectar ao seu servidor.

Para recarregar o firewall:

$ sudo firewall-cmd --reload

Eu não consegui descobrir como adicionar dois IPs diferentes com '--add-rich-rule'.

    
por 19.06.2015 / 23:13
1

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 11.01.2017 / 22:20
1

A resposta principal do dougBTV está errada. Eu não posso responder a sua resposta porque eu ainda não tenho os pontos necessários, então vou explicar aqui:

Ele está usando a zona padrão "public". Ele está conectando redes a essa zona e abrindo portas nessa zona. Mas, em uma configuração padrão, todo o tráfego passa pela zona padrão, não apenas pelas redes de origem que você vincula a ela. Portanto, seus comandos --add-source não fazem diferença e seus comandos --add-port permitiram que o mundo inteiro acessasse essas portas.

A segunda resposta de Normunds Kalnberzins está correta. Você deseja criar uma zona separada, vincular sua rede / IP a essa zona e abrir as portas nessa zona.

Como alternativa, você pode deixar tudo na zona padrão e usar as regras avançadas do firewalld para permitir o acesso de determinados IPs:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept'

Isso permite todo o tráfego de 192.168.2.2 para todas as portas e, como eu não especifiquei uma zona, isso será aplicado à zona padrão "public" (use --get-default-zone para verificar qual é a sua zona padrão e --get-active-zones para ver quais zonas estão atualmente em uso).

Para permitir o acesso deste IP somente a uma porta específica, eu faria:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" port port="1234" protocol="tcp" accept'

A melhor prática é executar esses comandos sem --permanent (ou --perm para abreviar), o que afeta o firewall atualmente em execução. Depois de testar se sua regra está funcionando, execute-a novamente com --perm acrescentado para que ela seja lembrada nas recargas posteriores do firewalld.

    
por 18.08.2017 / 22:49