urlacl e o Firewall do Windows

2

Normalmente, uso servidores Linux para meus aplicativos. Portanto, sou muito novo no sistema de firewall dos Windows Servers.

Eu tenho um aplicativo c # que precisa atuar como um servidor HTTP. Existem várias maneiras de perceber isso com diferentes níveis de abstração: É claro que há uma biblioteca Socket para fornecer funcionalidade muito fundamental. Para o tráfego TCP, há também um TcpClient . Ambos escutam em uma porta específica e precisam que as "Regras de Entrada" definidas no Firewall do Windows sejam acessadas de outra máquina (não são necessárias regras quando você precisa acessá-las somente a partir da sua máquina).

Depois, há o HttpListener . Ele não opera por porta, usa prefixos de URI para corresponder aos pedidos. Por exemplo, o prefixo "http: // *: 80 /" processaria todo o tráfego HTTP da porta 80.

O que realmente me incomoda é que, para um HttpListener , não funcione nenhuma regra no Firewall do Windows, mas é necessária uma entrada no urlacl:

netsh http add urlacl url=http://*:80/ user=DOMAIN\user

(É uma reserva de espaço de nomes de url)

Todos os três métodos de realizar um servidor http são igualmente úteis. A diferença é que muito menos código é necessário ao usar o HttpListener.

A minha pergunta é: Por que existe o conceito de reserva de espaço de nomes de URL, mas os URLs não registados podem ser ouvidos por um servidor, no entanto. E por que os URLs registrados podem ignorar regras de firewall? Por que existe um sistema como este em primeiro lugar?

    
por user2737037 27.07.2016 / 12:57

1 resposta

2

AFAIK, http http é mostra / edita a configuração do http.sys, a parte do driver do modo kernel do IIS que, junto com o Windows Activation Servers (WAS), também pode ser usado por aplicativos não IIS. Eles só precisam registrar sua URL para que o http.sys / WAS possa encaminhar solicitações para o cliente correto e evitar conflitos.

Se você optar por implementar a porta de baixo nível ouvindo a si mesmo, não está usando o http.sys e não precisa registrar o URL com netsh, mas ainda precisa ter cuidado para que não haja conflitos com outros programas.

A classe .NET httpListener também está usando o http.sys

Quanto às regras de firewall, não vejo que URLs registradas não precisem de uma regra de firewall. Seu exemplo http://*:80/ é coberto pela regra World Wide Web Services do filtro.

    
por 27.07.2016 / 23:02