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

0

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

No entanto, da minha experiência com o CentOS, 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 limpo; 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, do jeito que eu acho 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 ) faz não trabalho neste caso, porque, por exemplo, meu IP não irá resolver para o meu FQDN DynDNS.

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

Neil Santos
fonte

Respostas:

2

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

Se sua linha de hosts é

hosts: arquivos 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 tcp_wrappers, que pode ser encontrado por meio da 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, em seguida, aplique a alteração ao seu iptable.

Darren Hall
fonte
Hrm ... Isso é interessante. Existe um daemon existente que faz isso? Ou eu teria que escrever o meu próprio? Eu suponho que não será muito trabalhoso se eu precisar escrever isso sozinho, mas eu não quero duplicar o esforço se ele já existir.
Neil Santos
Eu tinha um script perl que era executado a partir do cron a cada 5 minutos. Ele faria uma pesquisa de DNS, salve o nome & lt; & gt; Pareamento de endereço IP em um arquivo / var, então compare isso com as regras existentes do iptables. Eu não parecia muito difícil de ver se já havia algo escrito desde que o que eu precisava era bem simples.
Darren Hall
Doce! Obrigado pela dica! Vou tentar implementá-lo da mesma maneira. :)
Neil Santos
Uma coisa que eu aviso, sempre que executar qualquer processo de estilo daemon via cron, use alguma forma de bloqueio para evitar que ele se duplique. Isso é especialmente verdadeiro quando você depende de fontes externas, como fazer uma pesquisa de DNS.
Darren Hall
1

De acordo com a sugestão de Darren, eu escrevi o script de shell que procura o IP, então ajuste 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, 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 (tão óbvia): acabei usando ufw gerenciar iptables regras para mim (como eu disse, contagem mínima de células cerebrais).

Neil Santos
fonte