C# 如何允许.NET核心控制台应用程序通过Windows防火墙进行FTP连接?

C# 如何允许.NET核心控制台应用程序通过Windows防火墙进行FTP连接?,c#,.net,.net-core,ftp,windows-firewall,C#,.net,.net Core,Ftp,Windows Firewall,我有一个.NET核心控制台应用程序,可以从FTP服务器下载文件并进行处理。我将应用程序移动到一个新服务器上,它停止工作。在新服务器上禁用Windows防火墙解决了这个问题,但显然我不想让它完全打开——我需要一种有针对性的方法来启用这个应用。默认防火墙规则似乎已经允许FTP通信(入站和出站),因此我不知道可以打开哪些其他端口(我想我使用的是活动FTP,它可以使用广泛的端口范围AFAIK)。我更愿意将该应用程序列为白名单,但它不是一个.exe文件,因此我不确定允许哪个应用程序 我使用.bat文件的快

我有一个.NET核心控制台应用程序,可以从FTP服务器下载文件并进行处理。我将应用程序移动到一个新服务器上,它停止工作。在新服务器上禁用Windows防火墙解决了这个问题,但显然我不想让它完全打开——我需要一种有针对性的方法来启用这个应用。默认防火墙规则似乎已经允许FTP通信(入站和出站),因此我不知道可以打开哪些其他端口(我想我使用的是活动FTP,它可以使用广泛的端口范围AFAIK)。我更愿意将该应用程序列为白名单,但它不是一个.exe文件,因此我不确定允许哪个应用程序

我使用.bat文件的快捷方式运行应用程序。bat文件仅包含以下行:

dotnet "C:\path\my-application.dll"
应用程序失败的代码是:

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(ftpServerUri);
request.UseBinary = true;
request.Credentials = new NetworkCredential(ftpUser, ftpPsw);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Proxy = null;
request.KeepAlive = false;
request.UsePassive = false;

// hangs here forever unless Windows Firewall is turned off
FtpWebResponse response = (FtpWebResponse)await request.GetResponseAsync();

是否允许应用程序通过防火墙?我是否允许使用dotnet.exe、.bat文件或.dll文件,或者是否有其他方法来执行此操作?提前感谢您的帮助

您可以在Win10上尝试两件事:

  • 允许应用通过Windows防火墙
导航路径:控制面板\所有控制面板项目\窗口 Defender防火墙\允许的应用程序

单击“允许其他应用”

在以下弹出窗口中,提供dotnet.exe的绝对路径

  • 使用以下内容配置具有高级安全性的Windows Defender防火墙
导航路径:控制面板\所有控制面板项目\窗口 Defender防火墙\高级设置

编辑:


原来是白名单起了作用。

我可能在这里找到了答案:

基本上,解决方案是转到防火墙高级设置,并创建一个新的入站规则。选择自定义规则。我将其应用于所有程序(因为我仍然不知道如何选择.Net核心应用程序)。我使用了协议类型:
TCP
,本地端口:
所有端口
,远程端口:
特定端口
20

其思想是,您在TCP端口20上启动连接,然后生成的入站流量指向某个任意端口,但您可以确定这是一个FTP响应,因为远程端口是TCP端口20。因此,您没有打开大量本地端口,而是打开所有本地端口,但只打开单个远程端口


如果有人有答案可以帮助我允许整个应用程序,我将保留此选项,但这是一个足够好的解决方案,否则。

不要使用FTP活动模式。而且你不会有防火墙问题

默认情况下启用被动模式是有充分理由的。这使得通过防火墙的问题更少

删除此行:

request.UsePassive = false;

阅读我在上的文章。

有一种方法可以发布你的控制台应用程序,以便创建
exe
(>),然后你可以将
exe
->列为白名单,这是一种可能的解决方案。我希望使用“允许应用程序通过Windows防火墙”的方法,但我不知道在.Net core的上下文中选择什么。。。“.dll”不是受支持的扩展。@DaveSmash,您是否尝试过允许dotnet.exe?我能想到的另一种方法是为特定端口配置入站/出站规则?我刚刚添加了它,并将禁用我的其他规则以检查。。。这些FTP文件已经堆积了一段时间,所以我将在测试之前让程序完成运行,但我将很快跟进。我的第一个想法是,这是一个比我希望允许的范围更广的范围,但我想我可以控制服务器上运行的.Net核心应用程序,所以我越想它,它似乎不是一个大威胁。是的,入站规则非常灵活,因此将dotnet.exe列入白名单似乎确实可行。实际上,我将使用Martin Prikryl建议的被动FTP方法,但您的评论为我提出的实际问题提供了更好的答案。如果您想对其进行编辑,使其更具体地说明如何将C:\Program Files\dotnet.exe列入白名单,这样人们就不必阅读评论线程,那么我将给予您信任!感谢您的帮助。没有任何东西可以阻止攻击者使用远程端口20,使其能够以您机器上的任何端口/侦听应用程序为目标。这就好像你已经完全关闭了防火墙。好吧,这就像我完全关闭了防火墙,如果他们知道或猜测使用远程端口20。。。但我同意你的观点。我更喜欢你的被动FTP方法,这就是我写“几乎”的原因。攻击者不难识别您的主连接是FTP。那么端口20很容易猜测。即使没有,您是否会使用“20”作为您的帐户密码就安全性而言,这是一个等价物。你的链接是一个良好的阅读,被动FTP方法似乎在没有防火墙更改的情况下也能工作。为了所有搜索允许.Net Core通过防火墙问题的人,我将接受针对该特定问题的答案,但是+1,并衷心感谢您提供更好的方法!