Como criar uma regra de Iptables usando o nome de domínio

3

Alguém pode sugerir uma maneira de usar um nome de domínio nas regras do iptables?

    
por Supratik 17.03.2010 / 07:11

4 respostas

4

Se tudo for possível, considere a possibilidade de configurar um proxy transparente no nível do aplicativo. Um proxy de aplicação provavelmente será muito mais fácil de fazer esse tipo de filtragem.

Se você deve fazê-lo com iptables, uma opção kludgy seria criar uma cadeia, criar um script de linha de comando que atualize periodicamente essa cadeia específica com os resultados do DNS para o nome que você precisa usar.

Se alguém tentasse criar algo que realmente fizesse um DNS baseado em filtragem de pacotes, certamente teria que ser feito via userspace. Especificamente, você usaria algo como libnetfilter_queue . Eu nunca usei isso, mas Packetbl pode estar perto de fazer isso, mas não parece ser muito bem conservado.

Outra alternativa pode ser configurar a filtragem da Camada 7 . Você pode filtrar uma parte da solicitação se o nome DNS estiver sendo transmutado como parte da carga útil do pacote.

    
por 17.03.2010 / 07:50
1

Eu precisava do iptables para permitir o acesso ssh com base no nome de domínio do meu ip de casa, mas queria mantê-lo fechado para todos os outros endereços. Desde que eu tenho um ip dinâmico que muda ocasionalmente, eu escrevi um script para atualizar as regras com base no ip da minha entrada de DNS dinâmico. Eu sou novo nisso, então tenho certeza que há um jeito melhor. Substitua "yourname" por seu nome de host dinâmico do DNS.

#!/bin/sh

/usr/bin/nslookup yourname.dynalias.org > temp
found=0
address=""
while read LINE
do
 if [[ "$LINE" == Address* ]]; then
        let found++
        if [[ $found == 2 ]]; then
                address=${LINE:8};
                /sbin/iptables-save > /root/rulesdump
                while read LINE2
                do
                        if [[ "$LINE2" == *$address* ]]; then
                                ruleexists=1;
                        fi
                done < /root/rulesdump;
                if [[ "$ruleexists" != 1 ]]; then
                        /sbin/iptables -D INPUT -j LOG_DROP
                        /sbin/iptables -A INPUT -s $address -p tcp -m tcp --dport 22 -j LOG_ACCEPT
                        /sbin/iptables -A INPUT -j LOG_DROP
                fi
        fi
 fi
done < /root/temp;

Coloque o script acima no crontab para ser executado de vez em quando.

    
por 04.12.2010 / 02:46
1

Resposta curta, se você tiver certeza de que o IP é estático para sempre:

iptables -A INPUT -s 'dig host.your-domain-name.com +short'/32 -p tcp -m tcp --dport 22 -j ACCEPT
    
por 17.08.2017 / 08:03
0

A mesma coisa em rubi e mais curta:

#!/usr/bin/env ruby
require 'resolv'
ip = Resolv.getaddress "mydomain.com"
'iptables -A INPUT -p tcp --dport 22 -s #{ip} -j ACCEPT' if 'iptables --list' !~ /#{ip}/
    
por 17.03.2011 / 01:10

Tags