Lista de permissões de endereços IP de origem no CentOS 7

Lista de permissões de endereços IP de origem no CentOS 7

Quero configurar o firewall do CentOS 7 de forma 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 branca, todas as portas devem estar acessíveis.

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

As interfaces estão em Zona Pública. Também já mudei todos os serviços para a zona Pública.

Responder1

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 de permissões"

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 /24IP inteiro e ú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 faz apenas as portas 1 a 22. Você pode ampliar isso, se desejar.

Agora, recarregue o que você fez.

firewall-cmd --reload

E verifique seu trabalho:

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

Nota lateral/editorial: Não importa, mas eu gosto da zona "confiável" para um conjunto de IPs na lista branca no firewalld. Você pode fazer uma avaliação adicional lendosugestões do redhat sobre como escolher uma zona.

Veja também:


Se você quiser DROPpacotes fora desta fonte, aqui está um exemplo para descartar aqueles fora do que /24usei como exemplo anteriormente,você pode usar regras ricas para isso, Eu acredito. Isso é conceitual, não testei (além de ver que o centos 7 aceita o comando), mas deve ser fácil 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'

Responder2

Mesmo que uma resposta tenha sido aceita e votada positivamente, não creio que seja correta. Não consigo encontrar uma explicação clara na documentação, mas pelo comportamento implementado é assim:

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

Então a resposta seria:

  1. bloqueie a zona padrão, diga "pública" - nenhuma porta aberta ou serviços disponíveis
  2. em outra zona, diga "trabalhar" - defina as portas de origem e abertas

Por exemplo, supondo que a zona padrão seja pública e não tenha portas abertas, adicione origem e intervalo de portas à 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

portanto, as regras da zona de "trabalho" serão aplicadas à sub-rede específica. Você terá uma variedade de portas abertas para a "lista branca" =sub-redecomo pedido. E, claro, use --permanenta opção nas --add-xxxdeclarações para manter o comportamento.

Por sua vez, quaisquer portas ou serviços que você tenha na zona "pública" (padrão) serão aplicados 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. Digamos adicionando a interface "ens3" à zona "work":

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

você usará as regras da zona "trabalho" para quaisquer solicitações da interface específica - um seletor mais aproximado do que "fonte".

Responder3

Isenção de responsabilidade: na verdade, não tentei o que estou sugerindo aqui, mas está bastante próximo da última configuração do firewalld que fiz, então vou parar com isso. O Firewalld fornece algumas zonas pré-configuradas, apenas para essa finalidade. Há um chamado "drop", que descarta qualquer coisa que chegue, e outro chamado "trusted", que permitequalquerconexão (ou seja, você nem deveria precisar abrir portas individuais, eu acho). O truque é encontrar 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 vinculado a uma zona, ele o usará.
  • Se o IP de origem não corresponder a nenhuma zona específica, ele verifica se há uma zona configurada para ointerfaceo pacote chegou. Se houver, ele usa isso.
  • Por último, se nada mais corresponder, ele usa a zona padrão.

Então, primeiro, 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 "drop" 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 com que as alterações entrem em vigor (aviso: isso provavelmente interromperá 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ê também não precisa --reload).

Responder4

Estou surpreso que as respostas da zona confiável não sejam a resposta selecionada. A zona confiável tem um padrão "target: ACCEPT" enquanto o restante é "target: default". Embora isso realmente não importe, parece ser o método pretendido devido ao seu nome e valor alvo padrão.

Como bloquear rapidamente uma caixa para que somente você possa acessá-la:

firewall-cmd --zone=trusted --add-source=1.2.3.4
firewall-cmd --zone=trusted --add-source=5.6.7.8/24
firewall-cmd --zone=drop --change-interface=eth1
firewall-cmd --set-default-zone=drop
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --list-all-zones

Depois de listar todas as zonas, você deverá ver algo assim:

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  sources: 1.2.3.4 5.6.7.8/24
  masquerade: no

drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth1
  masquerade: no

Nota: removi linhas com valor nulo/ausente. O importante é que trust e drop estejam ambos (ativos) e drop tenha sua interface pública.

O que isso faz com o iptables para demonstração:

Chain INPUT_ZONES_SOURCE (1 references)
target     prot opt source               destination
IN_trusted  all  --  1.2.3.4         0.0.0.0/0
IN_trusted  all  --  5.6.7.8/24        0.0.0.0/0
Chain INPUT_ZONES (1 references)
target     prot opt source               destination
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0

informação relacionada