Correspondência stateful de respostas multicast em iptables

1

Uma parte central da minha configuração de firewall é:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Parece que RELATED não funciona para respostas multicast: quando o host envia para um grupo multicast (no meu caso uma descoberta UPnP SSDP, para 239.255.255.250:1900), as respostas correspondentes de um endereço IP específico voltar a porta selecionada aleatoriamente do remetente são descartadas.

Qual é a maneira correta de preservar a semântica de --state ESTABLISHED,RELATED , mas fazer a correspondência de resposta funcionar para multicast?

    
por Christian 23.03.2011 / 09:09

2 respostas

1

Esse é o problema com o multicast: o netfilter nunca pode ter certeza se está relacionado ou não.

A única maneira de permitir o UPnP SSDP será:

-A INPUT -p udp --sport 1900 -j ACCEPT

Além da regra ESTABLISHED,RELATED existente.

    
por 23.03.2011 / 14:29
2

Com os kernels recentes do Linux (> = 2.6.39), você pode usar o ipset do kernel para limitar o controle de conexão. Você não precisa escrever nenhum espaço de usuário ou auxiliar de kernel. Para UPnP SSDP, pode ser escrito como:

$ ipset create upnp hash:ip,port timeout 3
$ iptables -A OUTPUT -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j SET --add-set upnp src,src --exist
$ iptables -A INPUT -p udp -m set --match-set upnp dst,dst -j ACCEPT

O primeiro comando cria um novo ipset chamado upnp que armazena tuplas (endereço ip, protocolo ip, porta ip) e cada registro inserido expira em 3 segundos.

O segundo comando corresponde ao pacote UPnP SSDP de saída (o destino é o endereço multicast 239.255.255.250 na porta udp 1900) e armazena endereço IP de origem e origem da porta udp do pacote no ipset upnp A primeira palavra-chave src significa endereço IP de origem e segunda palavra-chave src significa porta de origem como ipset do tipo hash : ip, port sempre precisa desse par. A palavra-chave - exists significa que, para o registro existente, o temporizador é redefinido. Este registro armazenado é automaticamente removido em 3 segundos.

O terceiro comando corresponde ao pacote udp de entrada e, se o endereço de destino e a porta de destino corresponderem a algum registro no ipset upnp , este pacote será aceito. Sintaxe dst, dst significa endereço IP de destino e porta de destino .

Os clientes UPnP normalmente enviam o pacote udp para 239.255.255.250:1090 e aguardam apenas 2 segundos pela resposta. Portanto, a autoexpiração em 3 segundos no ipset é suficiente.

Eu não encontrei na internet nenhuma configuração funcional de firewall / iptables para clientes UPnP que não seja muito relaxada (por exemplo, aceitar todos os pacotes UDP de entrada) ou sem algum rastreamento de espaço de usuário ou necessidade de corrigir o kernel. Portanto, espero que este exemplo ajude você.

    
por 08.05.2018 / 16:45