Firewalld - restringe o tráfego para IPs específicos

2

Estou tentando configurar o firewalld para restringir o acesso ao servidor CentOS7 a IPs específicos (192.168.10.5 e 167.165.100.22) para tráfego de entrada e saída.

Eu tenho apenas uma interface de rede, enp0s01.

Eu mudei o firewalld uma zona personalizada que tem o serviço 'ssh' ativado.

firewall-cmd --zone=customlist --list-all
internal (active)
target: default
icmp-block-inversion: no
interfaces: enp0s01
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Eu testei adicionando um endereço IP, por exemplo,

firewall-cmd --permanent --zone=external --add-source=192.168.10.5

No entanto, outros IPS dentro da rede ainda podem acessar o servidor via ssh.

Como posso restringir o acesso? Eu pensei que o firewall bloqueia todo o tráfego, a menos que esteja na lista de permissões, adicionando a fonte.

    
por user6507067 03.07.2018 / 22:43

1 resposta

0

Antecedentes

Ao pesquisar isso, parece que você não pode restringir o tráfego de saída usando os comandos básicos do firewalld. Várias fontes confirmam isso:

Seu único recurso é usar os comandos firewall-cmd --direct ... , que fazem pouco mais do que facilitar iptables regras para você. Dado isso, você tem a opção de fazer isso através do Firewalld ou apenas fazer isso usando quaisquer métodos que você tenha empregado anteriormente ao usar iptables .

OBSERVAÇÃO: as regras diretas serão semelhantes a isto:

$ firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 0 -d 74.125.136.99/32 -p tcp -m tcp --dport=80 -j DROP

Solução potencial

Se você puder relaxar o requisito de impedir o host de qualquer comunicação de saída, poderá obter a maior parte do que deseja da seguinte forma usando os comandos básicos firewall-cmd .

NOTA: No meu exemplo eu tenho 3 nós:

  • 192.168.56.101 - VM # 1 - servidor com regras de Firewalld
  • 192.168.56.102 - VM # 2
  • 192.168.56.1 - meu laptop
Comandos do Firwalld:
$ firewall-cmd --permanent --zone=internal --add-source=192.168.56.101/32
$ firewall-cmd --permanent --zone=internal --add-source=192.168.56.1/32
$ firewall-cmd --permanent --zone=internal --add-port=8080/tcp
$ firewall-cmd --zone=public --set-target=DROP

Com essa configuração, posso acessar a VM nº 1 do meu laptop, mas não consigo em nenhum outro lugar, como na VM nº 2.

zona padrão
$ firewall-cmd --get-default-zone
public
zonas ativas
$ firewall-cmd --get-active-zones
internal
  sources: 192.168.56.101/32 192.168.56.1/32
public
  interfaces: eth0 eth1
configuração da zona pública
$ firewall-cmd --zone=public --list-all
public (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
configuração da zona interna
$ firewall-cmd --zone=internal --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces:
  sources: 192.168.56.101/32 192.168.56.1/32
  services: ssh mdns samba-client dhcpv6-client
  ports: 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
alvo padrão da zona pública
$ firewall-cmd --permanent --get-target
DROP

Teste

Para testar essa configuração, usarei nc (ncat) para criar um 'listener daemon' na porta 8080 e use os comandos curl -v telnet://... para atuar como clientes que se conectarão a esses ouvintes.

OBSERVAÇÃO: Isso é apenas para ilustrar que as coisas estão funcionando conforme o esperado e podem ser removidas posteriormente.

Na VM # 1:
$ nc -4 -l -p 8080 -k
Agora, no aviso da VM nº 2, não podemos nos conectar:
$ timeout 1 curl -v telnet://192.168.56.101:8080
* About to connect() to 192.168.56.101 port 8080 (#0)
*   Trying 192.168.56.101...
$
Enquanto no laptop, podemos:
$ timeout 1 curl -v telnet://192.168.56.101:8080
* Rebuilt URL to: telnet://192.168.56.101:8080/
*   Trying 192.168.56.101...
* Connected to 192.168.56.101 (192.168.56.101) port 8080 (#0)
$

A única pegadinha com essa abordagem é que o nó VM # 1 ainda pode sair:

$ timeout 2 ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=26.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=25.6 ms
$

$ timeout 1 curl -v telnet://www.google.com:80
* About to connect() to www.google.com port 80 (#0)
*   Trying 216.58.217.164...
* Connected to www.google.com (216.58.217.164) port 80 (#0)
$

Referências

por 05.07.2018 / 06:54

Tags