Eu encontrei um método um pouco seguro do que desativar o firewall, que é permitir intervalo de porta de 10000 a 59999. E você não precisa abrir 1900.
Estou usando o Fedora 15 e o Transmission BT Client. A transmissão não pode abrir portas, a menos que o firewall esteja desativado.
Pesquisei algumas postagens que diziam adicionar 1900 às portas confiáveis ou por meio de uma regra de iptable: -A INPUT -m state --state NEW -m udp -p udp --sport 1900 -j ACCEPT"
. No entanto, a transmissão não pode abrir portas de qualquer maneira.
Eu também testei com upnp-inspector
, o que é melhor que Transmission, ele pode detectar meu roteador upnp após adicionar 1900 às portas confiáveis, mas a detecção é mais lenta do que se o firewall estivesse desativado.
Alguma idéia de como deixar o UPnP de Transmissão funcionar com o Firewall?
Eu encontrei um método um pouco seguro do que desativar o firewall, que é permitir intervalo de porta de 10000 a 59999. E você não precisa abrir 1900.
A primeira coisa que você precisa saber é como o protocolo UPnP IGD está funcionando. Você escolhe a porta UDP local aleatória e envia a solicitação de descoberta para o conhecido endereço multicast 239.255.255.250 e a porta UDP 1900. O servidor UPnP IGD (em execução no seu roteador) escuta essas consultas multicast e envia de volta a resposta UDP unicast aleatoriamente porta escolhida para o seu endereço IP e porta a partir do qual a solicitação de descoberta foi enviada. Mas tal resposta não é emparelhada pelo módulo conntrack do iptables ao seu pedido enviado, então a resposta recebida é descartada pelo iptables. É por isso que a ativação de todas as portas UDP ou a desativação do firewall ajudaram. Em que a resposta UDP é a localização do seu servidor e cliente UPnP IGD, então estabeleça a conexão TCP clássica com o servidor UPnP IGD. Portanto, o único problema é como escrever uma regra para receber uma resposta UDP a essa solicitação de descoberta multicast.
Via ipset é possível. Eu descrevi isso em resposta no link :
$ 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
No IPv6, os pacotes UPnP são enviados para o endereço multicast ff02 :: c ou ff05 :: c. Então as regras ficariam assim:
$ ipset create upnp6 hash:ip,port timeout 3 family inet6
$ ip6tables -A OUTPUT -d ff02::c/128 -p udp -m udp --dport 1900 -j SET --add-set upnp6 src,src --exist
$ ip6tables -A OUTPUT -d ff05::c/128 -p udp -m udp --dport 1900 -j SET --add-set upnp6 src,src --exist
$ ip6tables -A INPUT -p udp -m set --match-set upnp6 dst,dst -j ACCEPT
Alguns servidores UPnP (mas não todos) periodicamente (por exemplo, a cada 30s) anunciam a si mesmos via pacote UDP multicast para endereço / porta conhecido. Se você tem tal servidor e também cliente que está escutando estes pacotes multicast, então a regra iptables é muito simples:
$ iptables -A INPUT -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
E equivalente para o IPv6:
$ ip6tables -A INPUT -d ff02::c/128 -p udp -m udp --dport 1900 -j ACCEPT
$ ip6tables -A INPUT -d ff05::c/128 -p udp -m udp --dport 1900 -j ACCEPT
Na sua pergunta, você descreveu algo semelhante à regra acima do iptables, mas cometeu um grande erro: Você especificou a porta source , em vez de destination : --sport 1900
. Os pacotes UPnP UDP são enviados de portas de origem aleatórias para a porta de destino fixo 1900.
Você também descreveu que o upnp-inspector pode detectar seu roteador UPnP IGD depois que você adicionou a porta 1900 a confiável (provavelmente origem e destino), mas foi mais lento do que desativar o firewall. Isso combina perfeitamente com a descrição acima do anúncio periódico, pois o upnp-inspector estava aguardando quando o seu roteador envia o próximo pacote de anúncio.
Tags firewall