Como usar o FQDN nas regras de firewall do GNU / Linux?

0

Estou tentando configurar um firewall para um dos sistemas GNU / Linux. AFAIK, iptables e sua turma não podem fazer uso de FQDNs em sua configuração, já que eles devem estar operacionais antes da interface de rede e antes que o acesso aos DNSs esteja disponível.

No entanto, da minha experiência com o CentOS, eu conheço pelo menos uma solução: apf . No entanto, não consigo fazer isso funcionar corretamente no Arch Linux. ( iptables -nvL produz um resultado clean-slate; nada como o que recebo ao executar o mesmo comando em nossos servidores de desenvolvimento.)

Eu estou querendo saber se há alguém aqui que conseguiu apf trabalhando no Arch Linux, ou conhece outro firewall ou outro firewall que possa trabalhar com FQDNs em suas regras.

Observe que os FQDNs de destino são de serviços dinâmicos de DNS, como DynDNS . Eu gostaria de saber se há uma maneira de fazer com que o firewall faça pesquisas de DNS, o caminho (eu acho) que apf faz.

Pesquisas reversas de DNS (que, AFAIK, é o que acontece quando um FQDN é colocado em /etc/hosts.allow e não pode ser encontrado em /etc/hosts ) não funcionam nesse caso, porque , por exemplo, meu IP não será resolvido para o meu FQDN DynDNS.

(Além disso, por favor me diga se isso é melhor perguntar no ServerFault.)

    
por Neil Santos 07.12.2009 / 15:36

2 respostas

1

De acordo com a sugestão de Darren, eu escrevi o script de shell que procura o IP, então ajustei as regras de firewall conforme necessário (e, por necessário, eu quis dizer apagar tudo de antes e substituir pelo IP correto). Aqui está o script:

#!/bin/bash

target_hosts="dynhost.does-not-exist.com another-host.does-not-exist.com"

if [ -f "/root/dynblock-curr" ]; then
    mv /root/dynblock-curr /root/dynblock-prev
fi

touch /root/dynblock-curr

if [ -f "/root/dynblock-prev" ]; then
    # Remove previously set firewall allows
    for prev_ip in 'cat /root/dynblock-prev'; do
        ufw delete allow from $prev_ip to any app OpenSSH > /dev/null
    done
fi

for target_host in $target_hosts; do
    # Look up IP per host
    # echo "Looking up IP for host:" $target_host
    target_ip='host $target_host | cut -d ' ' -f 4'
    if [ $? -eq 0 ]; then
        echo $target_ip >> /root/dynblock-curr
        ufw allow from $target_ip to any app OpenSSH > /dev/null
    fi
done

Obviamente, eu não pretendia gastar mais do que o número necessário de células cerebrais nisso. Isso foi testado e garantido para Work For Me (tm). Isso é executado através de cron a cada 15 minutos.

Outra nota (óbvia): acabei usando ufw para gerenciar iptables regras para mim (como eu disse, contagem mínima de células cerebrais).

    
por 18.12.2009 / 14:35
2

Em seu /etc/nsswitch.conf determine a ordem de resolução do host.

Se sua linha de hosts é

hosts: files dns

Em seguida, ele verificará seu arquivo / etc / hosts antes do DNS.

Coloque o FQDN em seu arquivo / etc / hosts.

A outra opção é mudar do bloqueio do firewall para o uso de tcp_wrappers, que podem ser correspondidos por meio de pesquisa de DNS. As pesquisas de DNS em firewalls podem ser problemáticas e contrariam os conceitos de segurança. Outra opção é executar um daemon que consulte o nome do DynDNS, determine se ele foi alterado e aplique a alteração ao seu iptable.

    
por 07.12.2009 / 16:16