Eu tenho um programa c # que faz exatamente isso. Eu tive um problema no Server 2008 R2 em que o log de eventos nem sempre listava os endereços IP do usuário (se eles se conectassem a partir dos clientes mais recentes da Área de Trabalho Remota). Alguns serviços implementam seu próprio provedor de verificação de credenciais que não fornece todas as informações que você deseja.
http://cyberarms.net/security-insights/security-lab/remote-desktop-logging-of-ip-address-%28security-event-log-4625%29.aspx
Para a Área de Trabalho Remota, no entanto, descobri que entrar em "Configuração do host da sessão da área de trabalho remota" e alterar a conexão RDP-TCP para que a camada de segurança de "Camada de segurança RDP" em vez de "Negociar" ou "SSL (TLS 1.0)" retorne o Endereços IP.
Se você realmente deseja fazer isso, é outra pergunta para você: "Se você selecionar Camada de segurança RDP, não poderá usar a autenticação no nível da rede".
Eu achei http://www.windowsecurity.com/articles/logon-types.html útil. Eu usei EventLogWatcher e vinculei a "* [System / EventID = 4625 ou System / EventID = 4624]" para que eu pudesse redefinir uma contagem incorreta de êxito se o usuário realmente tivesse errado sua senha. Também incluí na lista branca :: 1, 0.0.0.0, 127.0.0.1 e "-". Você pode ou não querer adicionar os IPs de LAN / gerenciamento à lista de permissões.
Como uso o Forefront TMG, usei a API para adicionar endereços IP inválidos a um grupo de IPs dessa maneira e pedi à Cisco para adicionar acesso à API a um de seus roteadores SMB (o que eles me garantiram que poderiam fazer!)
Se você deseja usar o Firewall do Windows nativo para bloqueá-los, consulte a API para isso ("netsh advfirewall").
Eu permito x número de tentativas antes de banir e um sucesso redefinirá a contagem.